{"action":"created","comment":{"url":"https://api.github.com/repos/OCA/l10n-italy/pulls/comments/63487644","id":63487644,"diff_hunk":"@@ -0,0 +1,337 @@\n+# -*- coding: utf-8 -*-\n+# © 2013-2015 Alexis de Lattre <alexis.delattre@akretion.com>\n+# © 2016 Alessandro Camilli <alessandro.camilli@openforce.it>\n+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).\n+\n+from openerp import models, fields, api, _\n+from openerp.exceptions import Warning\n+from openerp import workflow\n+from lxml import etree\n+import logging\n+\n+logger = logging.getLogger(__name__)\n+\n+\n+class BankingExportSepaCbiWizard(models.TransientModel):\n+    _name = 'banking.export.sepa.cbi.wizard'\n+    _inherit = ['banking.export.pain']\n+    _description = 'Export SEPA CBI File'\n+\n+    state = fields.Selection([\n+        ('create', 'Create'),\n+        ('finish', 'Finish'),\n+        ], string='State', readonly=True, default='create')\n+    batch_booking = fields.Boolean(\n+        string='Batch Booking',\n+        help=\"If true, the bank statement will display only one credit \"\n+        \"line for all the direct debits of the SEPA file ; if false, \"\n+        \"the bank statement will display one credit line per direct \"\n+        \"debit of the SEPA file.\")\n+    charge_bearer = fields.Selection([\n+        ('SLEV', 'Following Service Level'),\n+        ('SHAR', 'Shared'),\n+        ('CRED', 'Borne by Creditor'),\n+        ('DEBT', 'Borne by Debtor'),\n+        ], string='Charge Bearer', required=True, default='SLEV',\n+        help=\"Following service level : transaction charges are to be \"\n+        \"applied following the rules agreed in the service level \"\n+        \"and/or scheme (SEPA Core messages must use this). Shared : \"\n+        \"transaction charges on the creditor side are to be borne \"\n+        \"by the creditor, transaction charges on the debtor side are \"\n+        \"to be borne by the debtor. Borne by creditor : all \"\n+        \"transaction charges are to be borne by the creditor. Borne \"\n+        \"by debtor : all transaction charges are to be borne by the debtor.\")\n+    nb_transactions = fields.Integer(\n+        string='Number of Transactions', readonly=True)\n+    total_amount = fields.Float(string='Total Amount', readonly=True)\n+    file = fields.Binary(string=\"File\", readonly=True)\n+    filename = fields.Char(string=\"Filename\", readonly=True)\n+    payment_order_ids = fields.Many2many(\n+        'payment.order', 'wiz_sepa_cbi_payorders_rel', 'wizard_id',\n+        'payment_order_id', string='Payment Orders', readonly=True)\n+\n+    @api.model\n+    def create(self, vals):\n+        payment_order_ids = self._context.get('active_ids', [])\n+        vals.update({\n+            'payment_order_ids': [[6, 0, payment_order_ids]],\n+        })\n+        return super(BankingExportSepaCbiWizard, self).create(vals)\n+\n+    @api.model\n+    def generate_party_agent(\n+            self, parent_node, party_type, party_type_label,\n+            order, party_name, iban, bic, eval_ctx, gen_args, context=None):\n+        # CBI logic modified for add ABI of debitor\n+        # ABI code from IBAN\n+        if party_type == 'Dbtr':\n+            company_bank = gen_args['sepa_export'].payment_order_ids[0].mode.\\\n+                                                                    bank_id\n+            abi_code = False\n+            if 'bank_abi' in company_bank:\n+                abi_code = company_bank.bank_abi\n+            # ... try from iban\n+            if not abi_code and company_bank.state == 'iban':\n+                iban = company_bank.acc_number.replace(\" \", \"\")\n+                abi_code = iban[5:10]\n+            if not abi_code:\n+                raise Warning(\n+                    _(\"Error Bank Code ABI\"))\n+            party_agent = etree.SubElement(parent_node, '%sAgt' % party_type)\n+            party_agent_institution = etree.SubElement(\n+                party_agent, 'FinInstnId')\n+            party_agent_institution_sys = etree.SubElement(\n+                party_agent_institution, 'ClrSysMmbId')\n+            party_agent_institution_sys_abi = etree.SubElement(\n+                    party_agent_institution_sys, 'MmbId')\n+            party_agent_institution_sys_abi.text = abi_code\n+        return True\n+\n+    @api.model\n+    def generate_creditor_scheme_identification(\n+            self, parent_node, identification, identification_label,\n+            eval_ctx, scheme_name_proprietary, gen_args):\n+        #\n+        # CBI logic modified for not try to add other info\n+        #\n+        '''\n+        csi_id = etree.SubElement(parent_node, 'Id')\n+        csi_privateid = etree.SubElement(csi_id, 'PrvtId')\n+        csi_other = etree.SubElement(csi_privateid, 'Othr')\n+        csi_other_id = etree.SubElement(csi_other, 'Id')\n+        csi_other_id.text = self._prepare_field(\n+            identification_label, identification, eval_ctx, gen_args=gen_args)\n+        csi_scheme_name = etree.SubElement(csi_other, 'SchmeNm')\n+        csi_scheme_name_proprietary = etree.SubElement(\n+            csi_scheme_name, 'Prtry')\n+        csi_scheme_name_proprietary.text = scheme_name_proprietary\n+        '''\n+        return True\n+\n+    @api.multi\n+    def create_sepa(self):\n+        \"\"\"Creates the SEPA Credit Transfer file. That's the important code!\"\"\"\n+        sepa_export = self[0]\n+        pain_flavor = self.payment_order_ids[0].mode.type.code\n+        convert_to_ascii = \\\n+            self.payment_order_ids[0].mode.convert_to_ascii\n+        if pain_flavor == 'CBIBdyPaymentRequest.00.04.00':\n+            bic_xml_tag = 'BIC'\n+            name_maxsize = 70\n+            root_xml_tag = 'CBIEnvelPaymentRequest'\n+            xsd_ref = 'CBIPaymentRequest.00.04.00'\n+        else:\n+            raise Warning(\n+                _(\"Payment Type Code '%s' is not supported. The only \"\n+                  \"Payment Type Code supported for SEPA Credit Transfers \"\n+                  \"'CBIBdyPaymentRequest.00.04.00'. \"\n+                  ) % pain_flavor)\n+        gen_args = {\n+            'bic_xml_tag': bic_xml_tag,\n+            'name_maxsize': name_maxsize,\n+            'convert_to_ascii': convert_to_ascii,\n+            'payment_method': 'TRF',\n+            'file_prefix': 'sct_',\n+            'pain_flavor': pain_flavor,\n+            'pain_xsd_file': 'l10n_it_sepa_bonifici/data/%s.xsd'\n+                             % pain_flavor,\n+            'sepa_export': sepa_export,\n+        }\n+        pain_ns = {\n+            'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n+            None: 'urn:CBI:xsd:%s' % pain_flavor,\n+        }\n+        xml_root = etree.Element('CBIBdyPaymentRequest', nsmap=pain_ns)\n+        pain_root = etree.SubElement(xml_root, root_xml_tag)\n+        # Add tag x cbi\n+        pain_root = etree.SubElement(pain_root, 'CBIPaymentRequest')\n+        pain_03_to_05 = \\\n+            ['CBIBdyPaymentRequest.00.04.00']\n+        # A. Group header\n+        group_header_1_0, nb_of_transactions_1_6, control_sum_1_7 = \\\n+            self.generate_group_header_block(pain_root, gen_args)\n+        # ... Add pain to group header tag (CBI required)\n+        GrpHdr_node = xml_root.xpath('//GrpHdr')[0]  # CBI required\n+        GrpHdr_node.attrib['xmlns'] = 'urn:CBI:xsd:%s' % (xsd_ref,)\n+\n+        transactions_count_1_6 = 0\n+        total_amount = 0.0\n+        amount_control_sum_1_7 = 0.0\n+        lines_per_group = {}\n+        # key = (requested_date, priority, sequence type)\n+        # value = list of lines as objects\n+        # Iterate on payment orders\n+        for payment_order in self.payment_order_ids:\n+            total_amount = total_amount + payment_order.total\n+            for line in payment_order.bank_line_ids:\n+                priority = line.priority\n+                # The field line.date is the requested payment date\n+                # taking into account the 'date_prefered' setting\n+                # cf account_banking_payment_export/models/account_payment.py\n+                # in the inherit of action_open()\n+                key = (line.date, priority)\n+                if key in lines_per_group:\n+                    lines_per_group[key].append(line)\n+                else:\n+                    lines_per_group[key] = [line]\n+        for (requested_date, priority), lines in lines_per_group.items():\n+            # B. Payment info\n+            payment_info_2_0, nb_of_transactions_2_4, control_sum_2_5 = \\\n+                self.generate_start_payment_info_block(\n+                    pain_root,\n+                    \"self.payment_order_ids[0].reference + '-' \"\n+                    \"+ requested_date.replace('-', '')  + '-' + priority\",\n+                    priority, False, False, requested_date, {\n+                        'self': self,\n+                        'priority': priority,\n+                        'requested_date': requested_date,\n+                    }, gen_args)\n+            # >>>>>>>>>\n+            # print(etree.tostring(xml_root, pretty_print=True))\n+            # >>>>>>>>>\n+            # ... for CBI structure\n+            #     Add pain to payment info tag (CBI required)\n+            PmtInf_node = xml_root.xpath('//PmtInf')[0]\n+            PmtInf_node.attrib['xmlns'] = 'urn:CBI:xsd:%s' % (xsd_ref,)\n+            #     Remove the duplicate node  NbOfTxs in payment\n+            NbOfTxs_node = xml_root.xpath('//PmtInf//NbOfTxs')[0]\n+            NbOfTxs_node.getparent().remove(NbOfTxs_node)\n+            # Remove the duplicate node  CtrlSum in payment\n+            CtrlSum_node = xml_root.xpath('//PmtInf//CtrlSum')[0]\n+            CtrlSum_node.getparent().remove(CtrlSum_node)\n+            self.generate_party_block(\n+                payment_info_2_0, 'Dbtr', 'B',\n+                'self.payment_order_ids[0].mode.bank_id.partner_id.'\n+                'name',\n+                'self.payment_order_ids[0].mode.bank_id.acc_number',\n+                'self.payment_order_ids[0].mode.bank_id.bank.bic or '\n+                'self.payment_order_ids[0].mode.bank_id.bank_bic',\n+                {'self': self}, gen_args)\n+            charge_bearer_2_24 = etree.SubElement(payment_info_2_0, 'ChrgBr')\n+            charge_bearer_2_24.text = self.charge_bearer\n+            transactions_count_2_4 = 0\n+            amount_control_sum_2_5 = 0.0\n+            for line in lines:\n+                transactions_count_1_6 += 1\n+                transactions_count_2_4 += 1\n+                # C. Credit Transfer Transaction Info\n+                credit_transfer_transaction_info_2_27 = etree.SubElement(\n+                    payment_info_2_0, 'CdtTrfTxInf')\n+                payment_identification_2_28 = etree.SubElement(\n+                    credit_transfer_transaction_info_2_27, 'PmtId')\n+                # CBI PmtTpInf (Causale bonifici)\n+                payment_identification_2_28_PmtTpInf = etree.SubElement(\n+                    credit_transfer_transaction_info_2_27, 'PmtTpInf')\n+                payment_identification_2_28_CtgyPurp = etree.SubElement(\n+                    payment_identification_2_28_PmtTpInf, 'CtgyPurp')\n+                payment_identification_2_28_CtgyPurp_Cd = etree.SubElement(\n+                    payment_identification_2_28_CtgyPurp, 'Cd')\n+                # generico\n+                payment_identification_2_28_CtgyPurp_Cd.text = 'SUPP'\n+\n+                # CBI tag InstrId\n+                end2end_identification_2_30_InstrId = etree.SubElement(\n+                    payment_identification_2_28, 'InstrId')\n+                end2end_identification_2_30_InstrId.text = line.name\n+\n+                end2end_identification_2_30 = etree.SubElement(\n+                    payment_identification_2_28, 'EndToEndId')\n+                end2end_identification_2_30.text = self._prepare_field(\n+                    'End to End Identification', 'line.name',\n+                    {'line': line}, 35, gen_args=gen_args)\n+                currency_name = self._prepare_field(\n+                    'Currency Code', 'line.currency.name',\n+                    {'line': line}, 3, gen_args=gen_args)\n+                amount_2_42 = etree.SubElement(\n+                    credit_transfer_transaction_info_2_27, 'Amt')\n+                instructed_amount_2_43 = etree.SubElement(\n+                    amount_2_42, 'InstdAmt', Ccy=currency_name)\n+                instructed_amount_2_43.text = '%.2f' % line.amount_currency\n+                amount_control_sum_1_7 += line.amount_currency\n+                amount_control_sum_2_5 += line.amount_currency\n+\n+                if not line.bank_id:\n+                    raise Warning(\n+                        _(\"Missing Bank Account on invoice '%s' (payment \"\n+                          \"order line reference '%s')\")\n+                        % (line.ml_inv_ref.number, line.name))\n+                self.generate_party_block(\n+                    credit_transfer_transaction_info_2_27, 'Cdtr', 'C',\n+                    'line.partner_id.name', 'line.bank_id.acc_number',\n+                    'line.bank_id.bank.bic', {'line': line}, gen_args)\n+                # Add info for Cross Border payment\n+                partner_creditor = line.partner_id\n+                creditor_node = credit_transfer_transaction_info_2_27\\\n+                    .xpath('//Cdtr')[transactions_count_1_6-1]\n+                creditor_address_node = etree.SubElement(creditor_node, \n+                                                         'PstlAdr')\n+                creditor_address_country_node = etree.SubElement(\n+                    creditor_address_node, 'Ctry')\n+                iso_country = False\n+                if line.bank_id.state == 'iban':\n+                    iso_country = line.bank_id.iban[:2]\n+                elif partner_creditor.country_id:\n+                    iso_country = partner_creditor.country_id.code\n+                if not iso_country:\n+                    raise Warning(\n+                        _(\"Missing Country for Partner '%s' (payment \"\n+                            \"order line reference '%s')\") % \n+                                  (line.partner_id.name, line.name))\n+                creditor_address_country_node.text = iso_country\n+                creditor_address_line_node = etree.SubElement(creditor_address_node, \n+                                                              'AdrLine')\n+                if partner_creditor:\n+                    address = '%s %s %s' % (\n+                        partner_creditor.street or '',\n+                        partner_creditor.city or '',\n+                        partner_creditor.country_id and \n+                        partner_creditor.country_id.name or '',)\n+                creditor_address_line_node.text = address[:70]\n+\n+                self.generate_remittance_info_block(\n+                    credit_transfer_transaction_info_2_27, line, gen_args)\n+\n+            if pain_flavor in pain_03_to_05:\n+                nb_of_transactions_2_4.text = str(transactions_count_2_4)\n+                control_sum_2_5.text = '%.2f' % amount_control_sum_2_5\n+        if pain_flavor in pain_03_to_05:\n+            nb_of_transactions_1_6.text = str(transactions_count_1_6)\n+            control_sum_1_7.text = '%.2f' % amount_control_sum_1_7\n+        else:\n+            nb_of_transactions_1_6.text = str(transactions_count_1_6)\n+            control_sum_1_7.text = '%.2f' % amount_control_sum_1_7\n+\n+        # CBI required\n+        # >> v8","path":"l10n_it_sepa_bonifici/wizard/export_sepa_cbi.py","position":305,"original_position":305,"commit_id":"b0f93061a09d9189986fbd13dba21b239aebeb67","original_commit_id":"b0f93061a09d9189986fbd13dba21b239aebeb67","user":{"login":"OpenCode","id":265697,"avatar_url":"https://avatars.githubusercontent.com/u/265697?v=3","gravatar_id":"","url":"https://api.github.com/users/OpenCode","html_url":"https://github.com/OpenCode","followers_url":"https://api.github.com/users/OpenCode/followers","following_url":"https://api.github.com/users/OpenCode/following{/other_user}","gists_url":"https://api.github.com/users/OpenCode/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenCode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenCode/subscriptions","organizations_url":"https://api.github.com/users/OpenCode/orgs","repos_url":"https://api.github.com/users/OpenCode/repos","events_url":"https://api.github.com/users/OpenCode/events{/privacy}","received_events_url":"https://api.github.com/users/OpenCode/received_events","type":"User","site_admin":false},"body":"Remove commented lines","created_at":"2016-05-17T09:06:06Z","updated_at":"2016-05-17T09:06:06Z","html_url":"https://github.com/OCA/l10n-italy/pull/218#discussion_r63487644","pull_request_url":"https://api.github.com/repos/OCA/l10n-italy/pulls/218","_links":{"self":{"href":"https://api.github.com/repos/OCA/l10n-italy/pulls/comments/63487644"},"html":{"href":"https://github.com/OCA/l10n-italy/pull/218#discussion_r63487644"},"pull_request":{"href":"https://api.github.com/repos/OCA/l10n-italy/pulls/218"}}},"pull_request":{"url":"https://api.github.com/repos/OCA/l10n-italy/pulls/218","id":68247425,"html_url":"https://github.com/OCA/l10n-italy/pull/218","diff_url":"https://github.com/OCA/l10n-italy/pull/218.diff","patch_url":"https://github.com/OCA/l10n-italy/pull/218.patch","issue_url":"https://api.github.com/repos/OCA/l10n-italy/issues/218","number":218,"state":"open","locked":false,"title":"Add l10n_it_sepa_bonifici","user":{"login":"alessandrocamilli","id":7657512,"avatar_url":"https://avatars.githubusercontent.com/u/7657512?v=3","gravatar_id":"","url":"https://api.github.com/users/alessandrocamilli","html_url":"https://github.com/alessandrocamilli","followers_url":"https://api.github.com/users/alessandrocamilli/followers","following_url":"https://api.github.com/users/alessandrocamilli/following{/other_user}","gists_url":"https://api.github.com/users/alessandrocamilli/gists{/gist_id}","starred_url":"https://api.github.com/users/alessandrocamilli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alessandrocamilli/subscriptions","organizations_url":"https://api.github.com/users/alessandrocamilli/orgs","repos_url":"https://api.github.com/users/alessandrocamilli/repos","events_url":"https://api.github.com/users/alessandrocamilli/events{/privacy}","received_events_url":"https://api.github.com/users/alessandrocamilli/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-04-28T16:07:40Z","updated_at":"2016-05-17T09:06:06Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9efd07d80b757841abc436de6c7208ae72dd38cb","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/OCA/l10n-italy/pulls/218/commits","review_comments_url":"https://api.github.com/repos/OCA/l10n-italy/pulls/218/comments","review_comment_url":"https://api.github.com/repos/OCA/l10n-italy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OCA/l10n-italy/issues/218/comments","statuses_url":"https://api.github.com/repos/OCA/l10n-italy/statuses/b0f93061a09d9189986fbd13dba21b239aebeb67","head":{"label":"alessandrocamilli:sepa","ref":"sepa","sha":"b0f93061a09d9189986fbd13dba21b239aebeb67","user":{"login":"alessandrocamilli","id":7657512,"avatar_url":"https://avatars.githubusercontent.com/u/7657512?v=3","gravatar_id":"","url":"https://api.github.com/users/alessandrocamilli","html_url":"https://github.com/alessandrocamilli","followers_url":"https://api.github.com/users/alessandrocamilli/followers","following_url":"https://api.github.com/users/alessandrocamilli/following{/other_user}","gists_url":"https://api.github.com/users/alessandrocamilli/gists{/gist_id}","starred_url":"https://api.github.com/users/alessandrocamilli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alessandrocamilli/subscriptions","organizations_url":"https://api.github.com/users/alessandrocamilli/orgs","repos_url":"https://api.github.com/users/alessandrocamilli/repos","events_url":"https://api.github.com/users/alessandrocamilli/events{/privacy}","received_events_url":"https://api.github.com/users/alessandrocamilli/received_events","type":"User","site_admin":false},"repo":{"id":51992092,"name":"l10n-italy","full_name":"alessandrocamilli/l10n-italy","owner":{"login":"alessandrocamilli","id":7657512,"avatar_url":"https://avatars.githubusercontent.com/u/7657512?v=3","gravatar_id":"","url":"https://api.github.com/users/alessandrocamilli","html_url":"https://github.com/alessandrocamilli","followers_url":"https://api.github.com/users/alessandrocamilli/followers","following_url":"https://api.github.com/users/alessandrocamilli/following{/other_user}","gists_url":"https://api.github.com/users/alessandrocamilli/gists{/gist_id}","starred_url":"https://api.github.com/users/alessandrocamilli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alessandrocamilli/subscriptions","organizations_url":"https://api.github.com/users/alessandrocamilli/orgs","repos_url":"https://api.github.com/users/alessandrocamilli/repos","events_url":"https://api.github.com/users/alessandrocamilli/events{/privacy}","received_events_url":"https://api.github.com/users/alessandrocamilli/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/alessandrocamilli/l10n-italy","description":"","fork":true,"url":"https://api.github.com/repos/alessandrocamilli/l10n-italy","forks_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/forks","keys_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/teams","hooks_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/hooks","issue_events_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/issues/events{/number}","events_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/events","assignees_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/assignees{/user}","branches_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/branches{/branch}","tags_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/tags","blobs_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/git/refs{/sha}","trees_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/statuses/{sha}","languages_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/languages","stargazers_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/stargazers","contributors_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/contributors","subscribers_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/subscribers","subscription_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/subscription","commits_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/commits{/sha}","git_commits_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/git/commits{/sha}","comments_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/comments{/number}","issue_comment_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/issues/comments{/number}","contents_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/contents/{+path}","compare_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/merges","archive_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/downloads","issues_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/issues{/number}","pulls_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/pulls{/number}","milestones_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/milestones{/number}","notifications_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/labels{/name}","releases_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/releases{/id}","deployments_url":"https://api.github.com/repos/alessandrocamilli/l10n-italy/deployments","created_at":"2016-02-18T08:27:21Z","updated_at":"2016-02-18T08:27:22Z","pushed_at":"2016-05-16T16:10:14Z","git_url":"git://github.com/alessandrocamilli/l10n-italy.git","ssh_url":"git@github.com:alessandrocamilli/l10n-italy.git","clone_url":"https://github.com/alessandrocamilli/l10n-italy.git","svn_url":"https://github.com/alessandrocamilli/l10n-italy","homepage":null,"size":6213,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":0,"default_branch":"9.0"}},"base":{"label":"OCA:8.0","ref":"8.0","sha":"cb94cdc91ec95f8ebfc6074136d25c5ad0dbeaee","user":{"login":"OCA","id":7600578,"avatar_url":"https://avatars.githubusercontent.com/u/7600578?v=3","gravatar_id":"","url":"https://api.github.com/users/OCA","html_url":"https://github.com/OCA","followers_url":"https://api.github.com/users/OCA/followers","following_url":"https://api.github.com/users/OCA/following{/other_user}","gists_url":"https://api.github.com/users/OCA/gists{/gist_id}","starred_url":"https://api.github.com/users/OCA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OCA/subscriptions","organizations_url":"https://api.github.com/users/OCA/orgs","repos_url":"https://api.github.com/users/OCA/repos","events_url":"https://api.github.com/users/OCA/events{/privacy}","received_events_url":"https://api.github.com/users/OCA/received_events","type":"Organization","site_admin":false},"repo":{"id":20648763,"name":"l10n-italy","full_name":"OCA/l10n-italy","owner":{"login":"OCA","id":7600578,"avatar_url":"https://avatars.githubusercontent.com/u/7600578?v=3","gravatar_id":"","url":"https://api.github.com/users/OCA","html_url":"https://github.com/OCA","followers_url":"https://api.github.com/users/OCA/followers","following_url":"https://api.github.com/users/OCA/following{/other_user}","gists_url":"https://api.github.com/users/OCA/gists{/gist_id}","starred_url":"https://api.github.com/users/OCA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OCA/subscriptions","organizations_url":"https://api.github.com/users/OCA/orgs","repos_url":"https://api.github.com/users/OCA/repos","events_url":"https://api.github.com/users/OCA/events{/privacy}","received_events_url":"https://api.github.com/users/OCA/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OCA/l10n-italy","description":"","fork":false,"url":"https://api.github.com/repos/OCA/l10n-italy","forks_url":"https://api.github.com/repos/OCA/l10n-italy/forks","keys_url":"https://api.github.com/repos/OCA/l10n-italy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OCA/l10n-italy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OCA/l10n-italy/teams","hooks_url":"https://api.github.com/repos/OCA/l10n-italy/hooks","issue_events_url":"https://api.github.com/repos/OCA/l10n-italy/issues/events{/number}","events_url":"https://api.github.com/repos/OCA/l10n-italy/events","assignees_url":"https://api.github.com/repos/OCA/l10n-italy/assignees{/user}","branches_url":"https://api.github.com/repos/OCA/l10n-italy/branches{/branch}","tags_url":"https://api.github.com/repos/OCA/l10n-italy/tags","blobs_url":"https://api.github.com/repos/OCA/l10n-italy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OCA/l10n-italy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OCA/l10n-italy/git/refs{/sha}","trees_url":"https://api.github.com/repos/OCA/l10n-italy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OCA/l10n-italy/statuses/{sha}","languages_url":"https://api.github.com/repos/OCA/l10n-italy/languages","stargazers_url":"https://api.github.com/repos/OCA/l10n-italy/stargazers","contributors_url":"https://api.github.com/repos/OCA/l10n-italy/contributors","subscribers_url":"https://api.github.com/repos/OCA/l10n-italy/subscribers","subscription_url":"https://api.github.com/repos/OCA/l10n-italy/subscription","commits_url":"https://api.github.com/repos/OCA/l10n-italy/commits{/sha}","git_commits_url":"https://api.github.com/repos/OCA/l10n-italy/git/commits{/sha}","comments_url":"https://api.github.com/repos/OCA/l10n-italy/comments{/number}","issue_comment_url":"https://api.github.com/repos/OCA/l10n-italy/issues/comments{/number}","contents_url":"https://api.github.com/repos/OCA/l10n-italy/contents/{+path}","compare_url":"https://api.github.com/repos/OCA/l10n-italy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OCA/l10n-italy/merges","archive_url":"https://api.github.com/repos/OCA/l10n-italy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OCA/l10n-italy/downloads","issues_url":"https://api.github.com/repos/OCA/l10n-italy/issues{/number}","pulls_url":"https://api.github.com/repos/OCA/l10n-italy/pulls{/number}","milestones_url":"https://api.github.com/repos/OCA/l10n-italy/milestones{/number}","notifications_url":"https://api.github.com/repos/OCA/l10n-italy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OCA/l10n-italy/labels{/name}","releases_url":"https://api.github.com/repos/OCA/l10n-italy/releases{/id}","deployments_url":"https://api.github.com/repos/OCA/l10n-italy/deployments","created_at":"2014-06-09T14:08:49Z","updated_at":"2016-04-12T13:36:10Z","pushed_at":"2016-05-17T00:41:27Z","git_url":"git://github.com/OCA/l10n-italy.git","ssh_url":"git@github.com:OCA/l10n-italy.git","clone_url":"https://github.com/OCA/l10n-italy.git","svn_url":"https://github.com/OCA/l10n-italy","homepage":null,"size":7890,"stargazers_count":31,"watchers_count":31,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":63,"mirror_url":null,"open_issues_count":52,"forks":63,"open_issues":52,"watchers":31,"default_branch":"9.0"}},"_links":{"self":{"href":"https://api.github.com/repos/OCA/l10n-italy/pulls/218"},"html":{"href":"https://github.com/OCA/l10n-italy/pull/218"},"issue":{"href":"https://api.github.com/repos/OCA/l10n-italy/issues/218"},"comments":{"href":"https://api.github.com/repos/OCA/l10n-italy/issues/218/comments"},"review_comments":{"href":"https://api.github.com/repos/OCA/l10n-italy/pulls/218/comments"},"review_comment":{"href":"https://api.github.com/repos/OCA/l10n-italy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OCA/l10n-italy/pulls/218/commits"},"statuses":{"href":"https://api.github.com/repos/OCA/l10n-italy/statuses/b0f93061a09d9189986fbd13dba21b239aebeb67"}}}}