Includes: - Odoo 19 framework (odoo/) - 27 custom EnCoach addons (new_project/custom_addons/) - encoach_core, encoach_api, encoach_lms_api, encoach_adaptive_api - encoach_exam, encoach_taxonomy, encoach_adaptive, encoach_assignment - encoach_ai, encoach_ai_grading, encoach_ai_generation, encoach_ai_media - encoach_courseware, encoach_communication, encoach_subscription - encoach_notification, encoach_approval, encoach_branding - encoach_classroom, encoach_registration, encoach_stats - encoach_faq, encoach_ticket, encoach_training, encoach_resources - encoach_adaptive_ai, encoach_sis - 21 OpenEduCat Enterprise modules (new_project/enterprise-19/) - 14 OpenEduCat Community modules (new_project/openeducat_erp-19.0/) - Configuration: odoo.conf, requirements.txt, scripts - 200+ REST API endpoints with JWT authentication - SRS and test documentation Made-with: Cursor
132 lines
4.5 KiB
Python
132 lines
4.5 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.tools import LazyTranslate
|
|
|
|
|
|
_lt = LazyTranslate(__name__)
|
|
|
|
PROXY_URL = 'https://mercadopago.api.odoo.com/api/mercado_pago'
|
|
|
|
PAYMENT_RETURN_ROUTE = '/payment/mercado_pago/return'
|
|
OAUTH_RETURN_ROUTE = '/payment/mercado_pago/oauth/return'
|
|
WEBHOOK_ROUTE = '/payment/mercado_pago/webhook'
|
|
|
|
|
|
# The countries supported by Mercado Pago.
|
|
SUPPORTED_COUNTRIES = {
|
|
'AR',
|
|
'BR',
|
|
'CL',
|
|
'CO',
|
|
'MX',
|
|
'PE',
|
|
'UY',
|
|
}
|
|
|
|
# Mapping of country codes to corresponding currency codes.
|
|
CURRENCY_MAPPING = {
|
|
'AR': 'ARS', # Argentina - Argentine Peso
|
|
'BR': 'BRL', # Brazil - Brazilian Real
|
|
'CL': 'CLP', # Chile - Chilean Peso
|
|
'CO': 'COP', # Colombia - Colombian Peso
|
|
'MX': 'MXN', # Mexico - Mexican Peso
|
|
'PE': 'PEN', # Peru - Peruvian Sol
|
|
'UY': 'UYU', # Uruguay - Uruguayan Peso
|
|
}
|
|
|
|
# Set of currencies where Mercado Pago's minor units deviates from the ISO 4217 standard.
|
|
# See https://www.six-group.com/dam/download/financial-information/data-center/iso-currrency/lists/list-one.xls
|
|
# vs. https://api.mercadopago.com/currencies. Last seen online: 2024-10-29.
|
|
CURRENCY_DECIMALS = {
|
|
'COP': 0,
|
|
'HNL': 0,
|
|
'NIO': 0,
|
|
}
|
|
|
|
# The codes of the payment methods to activate when Mercado Pago is activated.
|
|
DEFAULT_PAYMENT_METHOD_CODES = {
|
|
# Primary payment methods.
|
|
'card',
|
|
# Brand payment methods.
|
|
'amex',
|
|
'visa',
|
|
'mastercard',
|
|
'argencard',
|
|
'ceconsud',
|
|
'cordobesa',
|
|
'codensa',
|
|
'lider',
|
|
'magna',
|
|
'naranja',
|
|
'nativa',
|
|
'oca',
|
|
'presto',
|
|
'tarjeta_mercadopago',
|
|
'shopping',
|
|
'elo',
|
|
'hipercard',
|
|
}
|
|
|
|
# Mapping of payment method codes to Mercado Pago codes.
|
|
PAYMENT_METHODS_MAPPING = {
|
|
'card': 'debit_card,credit_card,prepaid_card',
|
|
'paypal': 'digital_wallet',
|
|
'mastercard': 'master',
|
|
'mercado_pago_wallet': 'mercado_pago',
|
|
}
|
|
|
|
# Mapping of transaction states to Mercado Pago payment statuses.
|
|
# See https://www.mercadopago.com.mx/developers/en/reference/payments/_payments_id/get.
|
|
TRANSACTION_STATUS_MAPPING = {
|
|
'pending': ('pending', 'in_process', 'in_mediation', 'authorized'),
|
|
'done': ('approved', 'refunded'),
|
|
'canceled': ('cancelled', 'null'),
|
|
'error': ('rejected',),
|
|
}
|
|
|
|
# Mapping of error states to Mercado Pago error messages.
|
|
# See https://www.mercadopago.com.ar/developers/en/docs/checkout-api/response-handling/collection-results
|
|
ERROR_MESSAGE_MAPPING = {
|
|
'accredited': _lt(
|
|
"Your payment has been credited. In your summary you will see the charge as a statement "
|
|
"descriptor."
|
|
),
|
|
'pending_contingency': _lt(
|
|
"We are processing your payment. Don't worry, in less than 2 business days, we will notify "
|
|
"you by e-mail if your payment has been credited."
|
|
),
|
|
'pending_review_manual': _lt(
|
|
"We are processing your payment. Don't worry, less than 2 business days we will notify you "
|
|
"by e-mail if your payment has been credited or if we need more information."
|
|
),
|
|
'cc_rejected_bad_filled_card_number': _lt("Check the card number."),
|
|
'cc_rejected_bad_filled_date': _lt("Check expiration date."),
|
|
'cc_rejected_bad_filled_other': _lt("Check the data."),
|
|
'cc_rejected_bad_filled_security_code': _lt("Check the card security code."),
|
|
'cc_rejected_blacklist': _lt("We were unable to process your payment, please use another card."),
|
|
'cc_rejected_call_for_authorize': _lt("You must authorize the payment with this card."),
|
|
'cc_rejected_card_disabled': _lt(
|
|
"Call your card issuer to activate your card or use another payment method. The phone "
|
|
"number is on the back of your card."
|
|
),
|
|
'cc_rejected_card_error': _lt(
|
|
"We were unable to process your payment, please check your card information."
|
|
),
|
|
'cc_rejected_duplicated_payment': _lt(
|
|
"You have already made a payment for that value. If you need to pay again, use another card"
|
|
" or another payment method."
|
|
),
|
|
'cc_rejected_high_risk': _lt(
|
|
"We were unable to process your payment, please use another card."
|
|
),
|
|
'cc_rejected_insufficient_amount': _lt("Your card has not enough funds."),
|
|
'cc_rejected_invalid_installments': _lt(
|
|
"This payment method does not process payments in installments."
|
|
),
|
|
'cc_rejected_max_attempts': _lt(
|
|
"You have reached the limit of allowed attempts. Choose another card or other means of "
|
|
"payment."
|
|
),
|
|
'cc_rejected_other_reason': _lt("Payment was not processed, use another card or contact issuer.")
|
|
}
|