fix: use Stripe's Price API for plan-price information (#26107)
* fix: use Stripe's new Plan API for price information * patch: use inbuilt function to rename field * fix: patch call Co-authored-by: Ankush Menat <ankush@iwebnotes.com> Co-authored-by: Nabin Hait <nabinhait@gmail.com>
This commit is contained in:
parent
422f67a4c9
commit
16eed07a0f
@ -21,7 +21,7 @@
|
||||
"column_break_13",
|
||||
"billing_interval_count",
|
||||
"payment_plan_section",
|
||||
"payment_plan_id",
|
||||
"product_price_id",
|
||||
"column_break_16",
|
||||
"payment_gateway",
|
||||
"accounting_dimensions_section",
|
||||
@ -114,11 +114,6 @@
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Payment Plan"
|
||||
},
|
||||
{
|
||||
"fieldname": "payment_plan_id",
|
||||
"fieldtype": "Data",
|
||||
"label": "Payment Plan"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_16",
|
||||
"fieldtype": "Column Break"
|
||||
@ -144,10 +139,15 @@
|
||||
"fieldtype": "Link",
|
||||
"label": "Cost Center",
|
||||
"options": "Cost Center"
|
||||
},
|
||||
{
|
||||
"fieldname": "product_price_id",
|
||||
"fieldtype": "Data",
|
||||
"label": "Product Price ID"
|
||||
}
|
||||
],
|
||||
"links": [],
|
||||
"modified": "2021-08-09 10:53:44.205774",
|
||||
"modified": "2021-08-13 10:53:44.205774",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Subscription Plan",
|
||||
|
@ -2,11 +2,12 @@
|
||||
# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import stripe
|
||||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.integrations.utils import create_request_log
|
||||
import stripe
|
||||
|
||||
|
||||
def create_stripe_subscription(gateway_controller, data):
|
||||
stripe_settings = frappe.get_doc("Stripe Settings", gateway_controller)
|
||||
@ -23,31 +24,38 @@ def create_stripe_subscription(gateway_controller, data):
|
||||
except Exception:
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
return{
|
||||
"redirect_to": frappe.redirect_to_message(_('Server Error'), _("It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.")),
|
||||
"redirect_to": frappe.redirect_to_message(
|
||||
_('Server Error'),
|
||||
_("It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.")
|
||||
),
|
||||
"status": 401
|
||||
}
|
||||
|
||||
|
||||
def create_subscription_on_stripe(stripe_settings):
|
||||
items = []
|
||||
for payment_plan in stripe_settings.payment_plans:
|
||||
plan = frappe.db.get_value("Subscription Plan", payment_plan.plan, "payment_plan_id")
|
||||
items.append({"plan": plan, "quantity": payment_plan.qty})
|
||||
items = []
|
||||
for payment_plan in stripe_settings.payment_plans:
|
||||
plan = frappe.db.get_value("Subscription Plan", payment_plan.plan, "product_price_id")
|
||||
items.append({"price": plan, "quantity": payment_plan.qty})
|
||||
|
||||
try:
|
||||
customer = stripe.Customer.create(description=stripe_settings.data.payer_name, email=stripe_settings.data.payer_email, source=stripe_settings.data.stripe_token_id)
|
||||
subscription = stripe.Subscription.create(customer=customer, items=items)
|
||||
try:
|
||||
customer = stripe.Customer.create(
|
||||
source=stripe_settings.data.stripe_token_id,
|
||||
description=stripe_settings.data.payer_name,
|
||||
email=stripe_settings.data.payer_email
|
||||
)
|
||||
|
||||
if subscription.status == "active":
|
||||
stripe_settings.integration_request.db_set('status', 'Completed', update_modified=False)
|
||||
stripe_settings.flags.status_changed_to = "Completed"
|
||||
subscription = stripe.Subscription.create(customer=customer, items=items)
|
||||
|
||||
else:
|
||||
stripe_settings.integration_request.db_set('status', 'Failed', update_modified=False)
|
||||
frappe.log_error('Subscription N°: ' + subscription.id, 'Stripe Payment not completed')
|
||||
if subscription.status == "active":
|
||||
stripe_settings.integration_request.db_set('status', 'Completed', update_modified=False)
|
||||
stripe_settings.flags.status_changed_to = "Completed"
|
||||
|
||||
except Exception:
|
||||
else:
|
||||
stripe_settings.integration_request.db_set('status', 'Failed', update_modified=False)
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
frappe.log_error('Subscription N°: ' + subscription.id, 'Stripe Payment not completed')
|
||||
except Exception:
|
||||
stripe_settings.integration_request.db_set('status', 'Failed', update_modified=False)
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
|
||||
return stripe_settings.finalize_request()
|
||||
return stripe_settings.finalize_request()
|
||||
|
@ -295,6 +295,7 @@ erpnext.patches.v13_0.update_tds_check_field #3
|
||||
erpnext.patches.v13_0.add_custom_field_for_south_africa #2
|
||||
erpnext.patches.v13_0.update_recipient_email_digest
|
||||
erpnext.patches.v13_0.shopify_deprecation_warning
|
||||
erpnext.patches.v13_0.migrate_stripe_api
|
||||
erpnext.patches.v13_0.reset_clearance_date_for_intracompany_payment_entries
|
||||
erpnext.patches.v13_0.einvoicing_deprecation_warning
|
||||
erpnext.patches.v14_0.delete_einvoicing_doctypes
|
||||
|
7
erpnext/patches/v13_0/migrate_stripe_api.py
Normal file
7
erpnext/patches/v13_0/migrate_stripe_api.py
Normal file
@ -0,0 +1,7 @@
|
||||
import frappe
|
||||
from frappe.model.utils.rename_field import rename_field
|
||||
|
||||
|
||||
def execute():
|
||||
frappe.reload_doc("accounts", "doctype", "subscription_plan")
|
||||
rename_field("Subscription Plan", "payment_plan_id", "product_price_id")
|
Loading…
Reference in New Issue
Block a user