Beispiel #1
0
    def mercadopago_create_preference(self, **post):
        _logger.info('Mercadopago: create preference with post data %s',
                     pprint.pformat(post))
        # TODO podriamos pasar cada elemento por separado para no necesitar
        # el literal eval
        mercadopago_data = literal_eval(post.get('mercadopago_data', {}))
        if not mercadopago_data:
            return werkzeug.utils.redirect("/")
        environment = mercadopago_data.get('environment')
        mercadopago_preference = mercadopago_data.get('mercadopago_preference')
        mercadopago_client_id = mercadopago_data.get('mercadopago_client_id')
        mercadopago_secret_key = mercadopago_data.get('mercadopago_secret_key')
        if (not environment or not mercadopago_preference
                or not mercadopago_secret_key or not mercadopago_client_id):
            _logger.warning('Missing parameters!')
            return werkzeug.utils.redirect("/")
        MPago = mercadopago.MP(mercadopago_client_id, mercadopago_secret_key)
        if environment == "prod":
            MPago.sandbox_mode(False)
        else:
            MPago.sandbox_mode(True)
        preferenceResult = MPago.create_preference(mercadopago_preference)
        _logger.info('Preference Result: %s' % preferenceResult)

        # # TODO validate preferenceResult response
        if environment == "prod":
            linkpay = preferenceResult['response']['init_point']
        else:
            linkpay = preferenceResult['response']['sandbox_init_point']

        return werkzeug.utils.redirect(linkpay)
Beispiel #2
0
    def mercadopago_create_preference(self, **post):
        # TODO podriamos pasar cada elemento por separado para no necesitar
        # el literal eval
        mercadopago_data = safe_eval(post.get('mercadopago_data', {}))
        acquirer = request.env['payment.acquirer'].browse(
            mercadopago_data.get('acquirer_id')).sudo()
        if not acquirer:
            return werkzeug.utils.redirect("/")

        environment = mercadopago_data.get('environment')
        mercadopago_preference = mercadopago_data.get('mercadopago_preference')
        mercadopago_client_id = acquirer.mercadopago_client_id
        mercadopago_secret_key = acquirer.mercadopago_secret_key
        if (not environment or not mercadopago_preference
                or not mercadopago_secret_key or not mercadopago_client_id):
            _logger.warning('Missing parameters!')
            return werkzeug.utils.redirect("/")
        MPago = mercadopago.MP(mercadopago_client_id, mercadopago_secret_key)
        if environment == "prod":
            MPago.sandbox_mode(False)
        else:
            MPago.sandbox_mode(True)
        preferenceResult = MPago.create_preference(mercadopago_preference)
        if environment != "prod":
            _logger.info('Preference Result: %s' % preferenceResult)

        # # TODO validate preferenceResult response
        if environment == "prod":
            linkpay = preferenceResult['response']['init_point']
        else:
            linkpay = preferenceResult['response']['sandbox_init_point']

        return werkzeug.utils.redirect(linkpay)
    def mercadopago_search_payment(self):
        mercadopago_client = self.env['ir.config_parameter'].get_param(
            'mercadopago_client', default=False)
        mercadopago_key = self.env['ir.config_parameter'].get_param(
            'mercadopago_key', default=False)

        if mercadopago_client and mercadopago_key:

            mp = mercadopago.MP(mercadopago_client, mercadopago_key)
            filters = {
                "range": "date_created",
                "begin_date": "NOW-1MONTH",
                "end_date": "NOW",
                "status": "approved",
            }
            journal_id = int(self.env['ir.config_parameter'].get_param(
                'mercadopago_journal_id', default=False))
            searchResult = mp.search_payment(filters, 0, 100)
            for result in searchResult["response"]["results"]:
                #_logger.info(result)
                #model, res_id =result['external_reference'].split('-')
                res_id = '11'
                model = 'res.partner'
                if model == 'res.partner':
                    partner_id = self.env['res.partner'].browse(int(res_id))
                else:
                    partner_id = self.env[model].browse(res_id)[
                        self.env[model]._mercadopago_partner_field]

                exist = self.search([('mercadopago_id', '=',
                                      result['authorization_code'])])
                if not len(exist):
                    payment = {
                        'communication':
                        result['authorization_code'],
                        'mercadopago_id':
                        result['authorization_code'],
                        'partner_type':
                        'customer',
                        'payment_type':
                        'inbound',
                        'partner_id':
                        partner_id.id,
                        'journal_id':
                        journal_id,
                        'payment_date':
                        result['money_release_date'][:10],
                        'amount':
                        result['transaction_amount'],
                        'payment_method_id':
                        self.env.ref(
                            'payment.account_payment_method_electronic_in').id
                    }
                    payment_id = self.create(payment)
                    payment_id.post()
                    if model != 'res.partner':
                        self.env[model].search([
                            ('id', '=', int(res_id))
                        ]).mercadopago_payment_receipt(payment_id, result)
Beispiel #4
0
    def mercadopago_create_preference(self):
        # preference api description
        # https://www.mercadopago.com.ar/developers/es/reference/preferences/_checkout_preferences/post/
        # to-do: add suport to back_urls expires
        mercadopago_client = self.env['ir.config_parameter'].get_param(
            'mercadopago_client', default=False)
        mercadopago_key = self.env['ir.config_parameter'].get_param(
            'mercadopago_key', default=False)

        if self.env['ir.config_parameter'].sudo().get_param(
                'mercadopago_external_reference', default='obj') == 'obj':
            external_reference = self._name
        else:
            external_reference = 'res.partner'

        if self.env['ir.config_parameter'].sudo().get_param(
                'mercadopago_sandbox', default=False):
            init_point = 'sandbox_init_point'
        else:
            init_point = 'init_point'

        if mercadopago_client and mercadopago_key:
            mp = mercadopago.MP(mercadopago_client, mercadopago_key)

            for obj in self:
                if external_reference == 'res.partner':
                    ref_id = self[self._mercadopago_partner_field].id
                else:
                    ref_id = obj.id
                preference = {
                    'external_reference':
                    '%s-%s' % (external_reference, ref_id),
                    'payer': obj.mercadopago_payer_dict(),
                    'shipments': obj.mercadopago_shipments_dict(),
                    'payment_methods': obj.mercadopago_payment_methods_dict(),
                    'notification_url': obj.mercadopago_notification_url(),
                    'items': obj.mercadopago_items(),
                }
                preference.update(obj.mercadopago_expires_dict())
                _logger.info("preference %r" % preference)
                preferenceResult = mp.create_preference(preference)

                if 'status' in preferenceResult and preferenceResult[
                        'status'] == 201:
                    self.mercadopago_url = preferenceResult['response'][
                        init_point]
                    self.mercadopago_id = preferenceResult['response']['id']

        return True  # for xmlrcp
Beispiel #5
0
    def get_context_data(self, *, object_list=None, **kwargs):
        context = super(SalesInMonth, self).get_context_data()
        total = 0
        usage = 0
        for order in self.object_list:
            total += order.total
            # TODO: Separate the usage formula in a separate function
            order.usage = apply_usage(order.total)
            usage += order.usage
        context['total'] = total
        context['usage'] = usage

        # TODO: Check if this is not necessary in the future, this is only for security
        payment = PaymentService.objects.get(pk=self.kwargs['pk'])
        context['warning'] = False
        if payment.mount != context['usage']:
            context['warning'] = True

        mp = mercadopago.MP(settings.MELI_TOKEN)
        preference = {
            "items": [{
                "title":
                "Servicio de Delivery Lavalle de {} por {}".format(
                    get_company(self.request.user), usage),
                "quantity":
                1,
                "unit_price":
                usage
            }],
            "payment_methods": {
                "excluded_payment_types": [{
                    "id": "ticket"
                }, {
                    "id": "bank_transfer"
                }],
            },
            "binary_mode":
            True,
        }
        context_preference = mp.create_preference(preference)
        context['preference'] = context_preference['response']['id']
        context['payment'] = payment
        context['payment_id'] = payment.id
        return context