fix: update redemption count when payment received
This commit is contained in:
@@ -120,30 +120,6 @@ watch(
|
|||||||
|
|
||||||
const saveItems = (parent = null) => {
|
const saveItems = (parent = null) => {
|
||||||
return rows.value
|
return rows.value
|
||||||
/* for (const row of rows.value) {
|
|
||||||
if (row.name) {
|
|
||||||
await applicableItems.setValue.submit({
|
|
||||||
...row,
|
|
||||||
}, {
|
|
||||||
onSuccess() {
|
|
||||||
props.coupons.reload()
|
|
||||||
applicableItems.reload()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
await applicableItems.insert.submit({
|
|
||||||
...row,
|
|
||||||
parent: parent,
|
|
||||||
parenttype: 'LMS Coupon',
|
|
||||||
parentfield: 'applicable_items',
|
|
||||||
}, {
|
|
||||||
onSuccess() {
|
|
||||||
props.coupons.reload()
|
|
||||||
applicableItems.reload()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
} */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const removeRow = (rowToRemove: any) => {
|
const removeRow = (rowToRemove: any) => {
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ const props = defineProps<{
|
|||||||
}>()
|
}>()
|
||||||
|
|
||||||
const updateStep = (newStep: 'list' | 'new' | 'edit', newData: Coupon) => {
|
const updateStep = (newStep: 'list' | 'new' | 'edit', newData: Coupon) => {
|
||||||
console.log('Updating step to:', newStep, newData)
|
|
||||||
step.value = newStep
|
step.value = newStep
|
||||||
if (newData) {
|
if (newData) {
|
||||||
data.value = newData
|
data.value = newData
|
||||||
|
|||||||
+59
-41
@@ -1932,62 +1932,80 @@ def publish_notifications(doc, method):
|
|||||||
|
|
||||||
|
|
||||||
def update_payment_record(doctype, docname):
|
def update_payment_record(doctype, docname):
|
||||||
request = frappe.get_all(
|
request = get_integration_requests(doctype, docname)
|
||||||
|
|
||||||
|
if len(request):
|
||||||
|
data = request[0].data
|
||||||
|
data = frappe._dict(json.loads(data))
|
||||||
|
payment_doc = get_payment_doc(data.payment)
|
||||||
|
|
||||||
|
update_payment_details(data)
|
||||||
|
update_coupon_redemption(payment_doc)
|
||||||
|
|
||||||
|
if payment_doc.payment_for_certificate:
|
||||||
|
update_certificate_purchase(docname, data.payment)
|
||||||
|
elif doctype == "LMS Course":
|
||||||
|
enroll_in_course(docname, data.payment)
|
||||||
|
else:
|
||||||
|
enroll_in_batch(docname, data.payment)
|
||||||
|
|
||||||
|
|
||||||
|
def get_integration_requests(doctype, docname):
|
||||||
|
return frappe.get_all(
|
||||||
"Integration Request",
|
"Integration Request",
|
||||||
{
|
{
|
||||||
"reference_doctype": doctype,
|
"reference_doctype": doctype,
|
||||||
"reference_docname": docname,
|
"reference_docname": docname,
|
||||||
"owner": frappe.session.user,
|
"owner": frappe.session.user,
|
||||||
},
|
},
|
||||||
|
["data"],
|
||||||
order_by="creation desc",
|
order_by="creation desc",
|
||||||
limit=1,
|
limit=1,
|
||||||
)
|
)
|
||||||
|
|
||||||
if len(request):
|
|
||||||
data = frappe.db.get_value("Integration Request", request[0].name, "data")
|
|
||||||
data = frappe._dict(json.loads(data))
|
|
||||||
|
|
||||||
payment_gateway = data.get("payment_gateway")
|
def get_payment_doc(payment_name):
|
||||||
if payment_gateway == "Razorpay":
|
return frappe.db.get_value(
|
||||||
payment_id = "razorpay_payment_id"
|
"LMS Payment", payment_name, ["name", "coupon", "payment_for_certificate"], as_dict=True
|
||||||
elif "Stripe" in payment_gateway:
|
)
|
||||||
payment_id = "stripe_token_id"
|
|
||||||
else:
|
|
||||||
payment_id = "order_id"
|
def update_payment_details(data):
|
||||||
|
payment_id = get_payment_id(data)
|
||||||
|
|
||||||
|
frappe.db.set_value(
|
||||||
|
"LMS Payment",
|
||||||
|
data.payment,
|
||||||
|
{
|
||||||
|
"payment_received": 1,
|
||||||
|
"payment_id": data.get(payment_id),
|
||||||
|
"order_id": data.get("order_id"),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_payment_id(data):
|
||||||
|
payment_gateway = data.get("payment_gateway")
|
||||||
|
if payment_gateway == "Razorpay":
|
||||||
|
payment_id = "razorpay_payment_id"
|
||||||
|
elif "Stripe" in payment_gateway:
|
||||||
|
payment_id = "stripe_token_id"
|
||||||
|
else:
|
||||||
|
payment_id = "order_id"
|
||||||
|
return payment_id
|
||||||
|
|
||||||
|
|
||||||
|
def update_coupon_redemption(payment_doc):
|
||||||
|
if payment_doc.coupon:
|
||||||
|
redemption_count = frappe.db.get_value("LMS Coupon", payment_doc.coupon, "redemption_count") or 0
|
||||||
|
|
||||||
frappe.db.set_value(
|
frappe.db.set_value(
|
||||||
"LMS Payment",
|
"LMS Coupon",
|
||||||
data.payment,
|
payment_doc.coupon,
|
||||||
{
|
"redemption_count",
|
||||||
"payment_received": 1,
|
redemption_count + 1,
|
||||||
"payment_id": data.get(payment_id),
|
|
||||||
"order_id": data.get("order_id"),
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Increment coupon usage if applicable
|
|
||||||
coupon = frappe.db.get_value("LMS Payment", data.payment, "coupon")
|
|
||||||
if coupon:
|
|
||||||
frappe.db.sql(
|
|
||||||
"""
|
|
||||||
UPDATE `tabLMS Coupon`
|
|
||||||
SET times_redeemed = COALESCE(times_redeemed, 0) + 1
|
|
||||||
WHERE name = %s
|
|
||||||
""",
|
|
||||||
(coupon,),
|
|
||||||
)
|
|
||||||
payment_for_certificate = frappe.db.get_value("LMS Payment", data.payment, "payment_for_certificate")
|
|
||||||
|
|
||||||
try:
|
|
||||||
if payment_for_certificate:
|
|
||||||
update_certificate_purchase(docname, data.payment)
|
|
||||||
elif doctype == "LMS Course":
|
|
||||||
enroll_in_course(docname, data.payment)
|
|
||||||
else:
|
|
||||||
enroll_in_batch(docname, data.payment)
|
|
||||||
except Exception as e:
|
|
||||||
frappe.log_error(frappe.get_traceback(), _("Enrollment Failed, {0}").format(e))
|
|
||||||
|
|
||||||
|
|
||||||
def enroll_in_course(course, payment_name):
|
def enroll_in_course(course, payment_name):
|
||||||
if not frappe.db.exists("LMS Enrollment", {"member": frappe.session.user, "course": course}):
|
if not frappe.db.exists("LMS Enrollment", {"member": frappe.session.user, "course": course}):
|
||||||
|
|||||||
Reference in New Issue
Block a user