Exemple #1
0
    def action_synchronize_iugu(self):
        for partner in self:
            token = self.env.company.iugu_api_token
            iugu.config(token=token)

            iugu_customer_api = iugu.Customer()
            commercial_part = partner.commercial_partner_id
            # TODO Validar telefone e passar
            vals = {
                'email': partner.email,
                'name': commercial_part.l10n_br_legal_name
                or commercial_part.name,
                'notes': commercial_part.comment or '',
                'cpf_cnpj': commercial_part.l10n_br_cnpj_cpf,
                'zip_code': re.sub('[^0-9]', '', commercial_part.zip or ''),
                'number': commercial_part.l10n_br_number,
                'street': commercial_part.street,
                'city': commercial_part.city_id.name,
                'state': commercial_part.state_id.code,
                'district': commercial_part.l10n_br_district or '',
                'complement': commercial_part.street2 or '',
            }
            if not partner.iugu_id:
                data = iugu_customer_api.create(vals)
                if "errors" in data:
                    msg = "\n".join(
                        ["A integração com IUGU retornou os seguintes erros"] +
                        [
                            "Field: %s %s" % (x[0], x[1][0])
                            for x in data['errors'].items()
                        ])
                    raise UserError(msg)
                partner.iugu_id = data['id']
            else:
                iugu_customer_api.change(partner.iugu_id, vals)
Exemple #2
0
    def action_change_invoice_iugu(self):
        if self.move_line_id.reconciled:
            raise UserError('O pagamento já está reconciliado')
        if self.date_change:

            token = self.env.company.iugu_api_token
            iugu.config(token=token)
            iugu_invoice_api = iugu.Invoice()

            data = iugu_invoice_api.duplicate(
                self.move_line_id.iugu_id, {
                    'due_date': self.date_change.strftime('%Y-%m-%d'),
                    'email': self.move_line_id.invoice_id.partner_id.email,
                })
            if "errors" in data:
                msg = "\n".join(
                    ["A integração com IUGU retornou os seguintes erros"] +
                    ["%s" % data['errors']])
                raise UserError(msg)
            self.move_line_id.write({
                'date_maturity':
                self.date_change,
                'iugu_id':
                data['id'],
                'iugu_secure_payment_url':
                data['secure_url'],
                'iugu_digitable_line':
                data['bank_slip']['digitable_line'],
                'iugu_barcode_url':
                data['bank_slip']['barcode'],
            })
Exemple #3
0
 def cancel_transaction_in_iugu(self):
     if not self.acquirer_reference:
         raise UserError('Esta parcela não foi enviada ao IUGU')
     token = self.env.company.iugu_api_token
     iugu.config(token=token)
     iugu_invoice_api = iugu.Invoice()
     iugu_invoice_api.cancel(self.acquirer_reference)
    def action_cancel(self):
        res = super(SaleOrder, self).action_cancel()
        for order in self:
            for transaction_id in order.transaction_ids:
                if (transaction_id
                        and transaction_id.acquirer_id.provider == "iugu"):
                    iugu.config(token=transaction_id.acquirer_id.iugu_api_key)
                    invoice_api = iugu.Invoice()
                    invoice_api.cancel(transaction_id.acquirer_reference)

        return res
    def action_verify_iugu_payment(self):
        if self.iugu_id:
            token = self.env.user.company_id.iugu_api_token
            iugu.config(token=token)
            iugu_invoice_api = iugu.Invoice()

            data = iugu_invoice_api.search(self.iugu_id)
            if "errors" in data:
                raise UserError(data['errors'])
            if data.get('status', '') == 'paid' and not self.reconciled:
                self.iugu_status = data['status']
                self.action_mark_paid_iugu(data)
            else:
                self.iugu_status = data['status']
        else:
            raise UserError('Esta parcela não foi enviada ao IUGU')
Exemple #6
0
    def action_verify_transaction(self):
        if self.acquirer_id.provider != 'iugu':
            return
        if not self.acquirer_reference:
            raise UserError('Esta transação não foi enviada a nenhum gateway de pagamento')
        token = self.env.company.iugu_api_token
        iugu.config(token=token)
        iugu_invoice_api = iugu.Invoice()

        data = iugu_invoice_api.search(self.acquirer_reference)
        if "errors" in data:
            raise UserError(data['errors'])
        if data.get('status', '') == 'paid' and self.state not in ('done', 'authorized'):
            self._set_transaction_done()
            self._post_process_after_done()
            if self.origin_move_line_id:
                self.origin_move_line_id._create_bank_tax_move(
                    (data.get('taxes_paid_cents') or 0) / 100)
        else:
            self.iugu_status = data['status']
Exemple #7
0
    def iugu_form_generate_values(self, values):
        """ Função para gerar HTML POST do Iugu """
        base_url = (
            self.env["ir.config_parameter"].sudo().get_param("web.base.url")
        )

        partner_id = values.get('billing_partner')

        items = [{
            "description": 'Fatura Ref: %s' % values.get('reference'),
            "quantity": 1,
            "price_cents":  int(values.get('amount') * 100),
        }]

        today = datetime.date.today()

        invoice_data = {
            "email": partner_id.email,
            "due_date": today.strftime("%d/%m/%Y"),
            "return_url": urls.url_join(base_url, "/payment/process"),
            "notification_url": urls.url_join(  # ngrok_url
                base_url, "/iugu/notificacao/"
            ),
            "items": items,
            "payer": {
                "name": partner_id.name,
                "cpf_cnpj": partner_id.cnpj_cpf,
                "address": {
                    "street": partner_id.street,
                    "city": partner_id.city_id.name,
                    "number": partner_id.number,
                    "zip_code": re.sub('[^0-9]', '', partner_id.zip or ''),
                },
            },
        }

        iugu.config(token=self.iugu_api_key)
        invoice = iugu.Invoice()
        result = invoice.create(invoice_data)

        if "errors" in result:
            if isinstance(result["errors"], str):
                msg = result['errors']
            else:
                msg = "\n".join(
                    ["A integração com IUGU retornou os seguintes erros"] +
                    ["Field: %s %s" % (x[0], x[1][0])
                     for x in result['errors'].items()])
            raise UserError(msg)

        acquirer_reference = result.get("id")
        payment_transaction_id = self.env['payment.transaction'].search(
            [("reference", "=", values['reference'])])

        payment_transaction_id.write({
            "acquirer_reference": acquirer_reference,
            "invoice_url": result['secure_url'],
        })

        url = result.get("secure_url")
        return {
            "checkout_url": urls.url_join(base_url, "/iugu/checkout/redirect"),
            "secure_url": url
        }
    def send_information_to_iugu(self):
        if not self.payment_journal_id.receive_by_iugu:
            return

        base_url = (
            self.env["ir.config_parameter"].sudo().get_param("web.base.url"))
        token = self.env.user.company_id.iugu_api_token
        iugu.config(token=token)
        iugu_invoice_api = iugu.Invoice()

        for moveline in self.receivable_move_line_ids:
            self.partner_id.action_synchronize_iugu()

            iugu_p = self.env['payment.acquirer'].search([('provider', '=',
                                                           'iugu')])
            transaction = self.env['payment.transaction'].create({
                'acquirer_id':
                iugu_p.id,
                'amount':
                moveline.amount_residual,
                'currency_id':
                moveline.move_id.currency_id.id,
                'partner_id':
                moveline.partner_id.id,
                'type':
                'server2server',
                'date_maturity':
                moveline.date_maturity,
                'origin_move_line_id':
                moveline.id,
                'invoice_ids': [(6, 0, self.ids)]
            })

            vals = {
                'email':
                self.partner_id.email,
                'due_date':
                moveline.date_maturity.strftime('%Y-%m-%d'),
                'ensure_workday_due_date':
                True,
                'items': [{
                    'description': 'Fatura Ref: %s' % moveline.name,
                    'quantity': 1,
                    'price_cents': int(moveline.amount_residual * 100),
                }],
                'return_url':
                '%s/my/invoices/%s' % (base_url, self.id),
                'notification_url':
                '%s/iugu/webhook?id=%s' % (base_url, self.id),
                'fines':
                True,
                'late_payment_fine':
                2,
                'per_day_interest':
                True,
                'customer_id':
                self.partner_id.iugu_id,
                'early_payment_discount':
                False,
                'order_id':
                transaction.reference,
            }
            data = iugu_invoice_api.create(vals)
            if "errors" in data:
                if isinstance(data['errors'], str):
                    raise UserError('Erro na integração com IUGU:\n%s' %
                                    data['errors'])

                msg = "\n".join(
                    ["A integração com IUGU retornou os seguintes erros"] + [
                        "Field: %s %s" % (x[0], x[1][0])
                        for x in data['errors'].items()
                    ])
                raise UserError(msg)

            transaction.write({
                'acquirer_reference': data['id'],
                'transaction_url': data['secure_url'],
            })
            moveline.write({
                'iugu_id':
                data['id'],
                'iugu_secure_payment_url':
                data['secure_url'],
                'iugu_digitable_line':
                data['bank_slip']['digitable_line'],
                'iugu_barcode_url':
                data['bank_slip']['barcode'],
            })
Exemple #9
0
import iugu
api = iugu.config(token='39B1841C-3940-49D5-9F5FA2596755629D')

iugu_token_api = iugu.Token()
items = [
    {
        'description': 'Item 1',
        'quantity': 1,
        'price_cents': 1000
    },
    {
        'description': 'Item 2',
        'quantity': 1,
        'price_cents': 2000
    },
]
content = iugu_token_api.charge({
    'customer_payment_method_id': '4111111111111111',
    'email': '*****@*****.**',
    'test': 'true',
    'items': items
})

print(content)