feat: added razorpay details to membership

This commit is contained in:
Shivam Mishra 2020-04-06 14:44:17 +05:30
parent 3a2c8560ba
commit 4b667160a0
3 changed files with 205 additions and 481 deletions

View File

@ -2,7 +2,13 @@
// For license information, please see license.txt // For license information, please see license.txt
frappe.ui.form.on('Membership', { frappe.ui.form.on('Membership', {
onload:function(frm) { setup: function(frm) {
frappe.db.get_single_value("Membership Settings", "enable_razorpay").then(val => {
if (val) frm.set_df_property('razorpay_details_section', 'hidden', false);
})
},
onload: function(frm) {
frm.add_fetch('membership_type', 'amount', 'amount'); frm.add_fetch('membership_type', 'amount', 'amount');
} }
}); });

View File

@ -1,501 +1,164 @@
{ {
"allow_copy": 0, "actions": [],
"allow_guest_to_view": 0, "autoname": "NPO-MSH-.YYYY.-.#####",
"allow_import": 0, "creation": "2017-09-11 11:39:18.492184",
"allow_rename": 0, "doctype": "DocType",
"autoname": "NPO-MSH-.YYYY.-.#####", "editable_grid": 1,
"beta": 0, "engine": "InnoDB",
"creation": "2017-09-11 11:39:18.492184", "field_order": [
"custom": 0, "member",
"docstatus": 0, "membership_type",
"doctype": "DocType", "column_break_3",
"document_type": "", "membership_status",
"editable_grid": 1, "membership_validity_section",
"engine": "InnoDB", "from_date",
"to_date",
"column_break_8",
"member_since_date",
"payment_details",
"paid",
"currency",
"amount",
"razorpay_details_section",
"subscription_id",
"payment_id",
"webhook_payload"
],
"fields": [ "fields": [
{ {
"allow_bulk_edit": 0, "fieldname": "member",
"allow_in_quick_entry": 0, "fieldtype": "Link",
"allow_on_submit": 0, "label": "Member",
"bold": 0, "options": "Member"
"collapsible": 0, },
"columns": 0,
"fieldname": "member",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Member",
"length": 0,
"no_copy": 0,
"options": "Member",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "membership_type",
"allow_in_quick_entry": 0, "fieldtype": "Link",
"allow_on_submit": 0, "in_list_view": 1,
"bold": 0, "label": "Membership Type",
"collapsible": 0, "options": "Membership Type",
"columns": 0, "reqd": 1
"fieldname": "membership_type", },
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Membership Type",
"length": 0,
"no_copy": 0,
"options": "Membership Type",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "column_break_3",
"allow_in_quick_entry": 0, "fieldtype": "Column Break"
"allow_on_submit": 0, },
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "column_break_3",
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "membership_status",
"allow_in_quick_entry": 0, "fieldtype": "Select",
"allow_on_submit": 0, "label": "Membership Status",
"bold": 0, "options": "New\nCurrent\nExpired\nPending\nCancelled"
"collapsible": 0, },
"columns": 0,
"fieldname": "membership_status",
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Membership Status",
"length": 0,
"no_copy": 0,
"options": "New\nCurrent\nExpired\nPending\nCancelled",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "membership_validity_section",
"allow_in_quick_entry": 0, "fieldtype": "Section Break",
"allow_on_submit": 0, "label": "Validity"
"bold": 0, },
"collapsible": 0,
"columns": 0,
"fieldname": "membership_validity_section",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Validity",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "from_date",
"allow_in_quick_entry": 0, "fieldtype": "Date",
"allow_on_submit": 0, "in_list_view": 1,
"bold": 0, "label": "From",
"collapsible": 0, "reqd": 1
"columns": 0, },
"fieldname": "from_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "From",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "to_date",
"allow_in_quick_entry": 0, "fieldtype": "Date",
"allow_on_submit": 0, "in_list_view": 1,
"bold": 0, "label": "To",
"collapsible": 0, "reqd": 1
"columns": 0, },
"fieldname": "to_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "To",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "column_break_8",
"allow_in_quick_entry": 0, "fieldtype": "Column Break"
"allow_on_submit": 0, },
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "column_break_8",
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "member_since_date",
"allow_in_quick_entry": 0, "fieldtype": "Date",
"allow_on_submit": 0, "label": "Member Since"
"bold": 0, },
"collapsible": 0,
"columns": 0,
"fieldname": "member_since_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Member Since",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "payment_details",
"allow_in_quick_entry": 0, "fieldtype": "Section Break",
"allow_on_submit": 0, "label": "Payment Details"
"bold": 0, },
"collapsible": 0,
"columns": 0,
"fieldname": "payment_details",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Payment Details",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "default": "0",
"allow_in_quick_entry": 0, "fieldname": "paid",
"allow_on_submit": 0, "fieldtype": "Check",
"bold": 0, "label": "Paid"
"collapsible": 0, },
"columns": 0,
"fieldname": "paid",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Paid",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "currency",
"allow_in_quick_entry": 0, "fieldtype": "Select",
"allow_on_submit": 0, "label": "Currency",
"bold": 0, "options": "USD\nINR"
"collapsible": 0, },
"columns": 0,
"fieldname": "currency",
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Currency",
"length": 0,
"no_copy": 0,
"options": "USD\nINR",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "amount",
"allow_in_quick_entry": 0, "fieldtype": "Float",
"allow_on_submit": 0, "label": "Amount"
"bold": 0, },
"collapsible": 0, {
"columns": 0, "fieldname": "razorpay_details_section",
"fieldname": "amount", "fieldtype": "Section Break",
"fieldtype": "Float", "hidden": 1,
"hidden": 0, "label": "Razorpay Details"
"ignore_user_permissions": 0, },
"ignore_xss_filter": 0, {
"in_filter": 0, "fieldname": "subscription_id",
"in_global_search": 0, "fieldtype": "Data",
"in_list_view": 0, "label": "Subscription ID",
"in_standard_filter": 0, "read_only": 1
"label": "Amount", },
"length": 0, {
"no_copy": 0, "fieldname": "payment_id",
"permlevel": 0, "fieldtype": "Data",
"precision": "", "label": "Payment ID",
"print_hide": 0, "read_only": 1
"print_hide_if_no_value": 0, },
"read_only": 0, {
"remember_last_selected_value": 0, "fieldname": "webhook_payload",
"report_hide": 0, "fieldtype": "Code",
"reqd": 0, "label": "Webhook Payload",
"search_index": 0, "options": "JSON",
"set_only_once": 0, "read_only": 1
"translatable": 0,
"unique": 0
} }
], ],
"has_web_view": 0, "links": [],
"hide_heading": 0, "modified": "2020-04-06 14:29:33.856060",
"hide_toolbar": 0, "modified_by": "Administrator",
"idx": 0, "module": "Non Profit",
"image_view": 0, "name": "Membership",
"in_create": 0, "owner": "Administrator",
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-08-21 16:15:42.323446",
"modified_by": "Administrator",
"module": "Non Profit",
"name": "Membership",
"name_case": "",
"owner": "Administrator",
"permissions": [ "permissions": [
{ {
"amend": 0, "create": 1,
"cancel": 0, "delete": 1,
"create": 1, "email": 1,
"delete": 1, "export": 1,
"email": 1, "print": 1,
"export": 1, "read": 1,
"if_owner": 0, "report": 1,
"import": 0, "role": "Non Profit Manager",
"permlevel": 0, "share": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Non Profit Manager",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1 "write": 1
}, },
{ {
"amend": 0, "create": 1,
"cancel": 0, "delete": 1,
"create": 1, "email": 1,
"delete": 1, "export": 1,
"email": 1, "print": 1,
"export": 1, "read": 1,
"if_owner": 0, "report": 1,
"import": 0, "role": "Non Profit Member",
"permlevel": 0, "share": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Non Profit Member",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1 "write": 1
} }
], ],
"quick_entry": 0, "restrict_to_domain": "Non Profit",
"read_only": 0, "sort_field": "modified",
"read_only_onload": 0, "sort_order": "DESC",
"restrict_to_domain": "Non Profit", "track_changes": 1
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0,
"track_views": 0
} }

View File

@ -126,20 +126,39 @@ def create_customer(user_details):
return customer.name return customer.name
def create_membership(member): def create_membership(member, plan):
membership = frappe.new_doc("Membership") membership = frappe.new_doc("Membership")
membership.update({ membership.update({
"member": member.name, "member": member.name,
"membership_status": "New", "membership_status": "New",
"membership_type": member.membership_type, "membership_type": member.membership_type,
"currency": "INR", "currency": "INR",
"amount": plan.amount "amount": plan.amount,
"from_date": getdate()
}) })
membership.insert(ignore_permissions=True) membership.insert(ignore_permissions=True)
return membership
@frappe.whitelist(allow_guest=True) @frappe.whitelist(allow_guest=True)
def create_membership_subscription(user_details): def create_membership_subscription(user_details):
"""Summary
Args:
user_details (TYPE): Description
Returns:
Dictionary: Dictionary with subscription details
{
'subscription_details': {
'plan_id': 'plan_EXwyxDYDCj3X4v',
'billing_frequency': 24,
'customer_notify': 1
},
'subscription_id': 'sub_EZycCvXFvqnC6p'
}
"""
# {"plan_id":"IFF Starter","fullname":"Shivam Mishra","mobile":"7506056962","email":"shivam@shivam.dev","pan":"Testing123"} # {"plan_id":"IFF Starter","fullname":"Shivam Mishra","mobile":"7506056962","email":"shivam@shivam.dev","pan":"Testing123"}
user_details = frappe._dict(user_details) user_details = frappe._dict(user_details)
member = get_member_if_exists(user_details.email, user_details.plan_id) member = get_member_if_exists(user_details.email, user_details.plan_id)
@ -150,3 +169,39 @@ def create_membership_subscription(user_details):
membership = create_membership(member, plan) membership = create_membership(member, plan)
return membership.setup_subscription() return membership.setup_subscription()
@frappe.whitelist(allow_guest=True)
def razorpay_subscription_started(data={}):
data = {
"entity": "event",
"event": "subscription.activated",
"payload": {
"subscription": {
"entity": {
"id": "sub_EZZsbKwt5xRYH6",
"entity": "subscription",
"plan_id": "plan_EXwyxDYDCj3X4v",
"customer_id": "cust_EZZw80dUQgID8C",
"current_start": 1585822073,
"current_end": 1588357800,
"start_at": 1585822073,
"end_at": 1646159400,
"auth_attempts": 0,
"total_count": 24,
"paid_count": 1,
}
},
"payment": {
"entity": {
"id": "pay_EZZw7v9NEUFCVJ",
"amount": 10000,
"currency": "INR",
"method": "card",
}
}
},
"created_at": 1585822079
}
data = frappe._dict(data)
pass