Customize script to update per_received field in Purchase Order doesn't update

Hello, I am updating the per_received field in Purchase Order this will trigger before submitting the Purchase Receipt. Please help

//
def update_per_receive(doc):
data = fetch_per_receive_data(doc)
frappe.msgprint(str(data))

for d in data:
    pr_total_qty = float(d.get("pr_total_qty", 0))
    po_total_qty = float(d.get("po_total_qty", 0))
    
    frappe.msgprint(f"Processing Purchase Order: {d.get('document')}")
    frappe.msgprint(f"PR Total Qty: {pr_total_qty}, PO Total Qty: {po_total_qty}")
    
    if d.get("is_cancelled"):
        po_doc = frappe.get_doc("Purchase Order", d.get("document"))
        
        if pr_total_qty == po_total_qty:
            frappe.msgprint("Setting per_received to 100%")
            po_doc.per_received = 100
        elif po_total_qty > 0:
            po_doc.per_received = (pr_total_qty / po_total_qty) * 100
        else:
            po_doc.per_received = 0
            
        po_doc.save()
        frappe.msgprint(f"Updated per_received: {po_doc.per_received}")
        frappe.db.commit()
        frappe.msgprint("SUCCESS: Purchase Order updated.")

//