mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-19 13:09:17 +00:00
fix: Non Profit fixes (#30280)
This commit is contained in:
@@ -17,7 +17,8 @@
|
|||||||
"paid",
|
"paid",
|
||||||
"amount",
|
"amount",
|
||||||
"mode_of_payment",
|
"mode_of_payment",
|
||||||
"razorpay_payment_id",
|
"column_break_12",
|
||||||
|
"payment_id",
|
||||||
"amended_from"
|
"amended_from"
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
@@ -73,12 +74,6 @@
|
|||||||
"label": "Mode of Payment",
|
"label": "Mode of Payment",
|
||||||
"options": "Mode of Payment"
|
"options": "Mode of Payment"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"fieldname": "razorpay_payment_id",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Razorpay Payment ID",
|
|
||||||
"read_only": 1
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fieldname": "naming_series",
|
"fieldname": "naming_series",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
@@ -108,12 +103,21 @@
|
|||||||
"options": "Donation",
|
"options": "Donation",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "payment_id",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"label": "Payment ID"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "column_break_12",
|
||||||
|
"fieldtype": "Column Break"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-03-11 10:53:11.269005",
|
"modified": "2022-03-16 17:18:45.611741",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Non Profit",
|
"module": "Non Profit",
|
||||||
"name": "Donation",
|
"name": "Donation",
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ def capture_razorpay_donations(*args, **kwargs):
|
|||||||
if not donor:
|
if not donor:
|
||||||
donor = create_donor(payment)
|
donor = create_donor(payment)
|
||||||
|
|
||||||
donation = create_donation(donor, payment)
|
donation = create_razorpay_donation(donor, payment)
|
||||||
donation.run_method('create_payment_entry')
|
donation.run_method('create_payment_entry')
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -114,7 +114,7 @@ def capture_razorpay_donations(*args, **kwargs):
|
|||||||
return { 'status': 'Success' }
|
return { 'status': 'Success' }
|
||||||
|
|
||||||
|
|
||||||
def create_donation(donor, payment):
|
def create_razorpay_donation(donor, payment):
|
||||||
if not frappe.db.exists('Mode of Payment', payment.method):
|
if not frappe.db.exists('Mode of Payment', payment.method):
|
||||||
create_mode_of_payment(payment.method)
|
create_mode_of_payment(payment.method)
|
||||||
|
|
||||||
@@ -128,7 +128,7 @@ def create_donation(donor, payment):
|
|||||||
'date': getdate(),
|
'date': getdate(),
|
||||||
'amount': flt(payment.amount) / 100, # Convert to rupees from paise
|
'amount': flt(payment.amount) / 100, # Convert to rupees from paise
|
||||||
'mode_of_payment': payment.method,
|
'mode_of_payment': payment.method,
|
||||||
'razorpay_payment_id': payment.id
|
'payment_id': payment.id
|
||||||
}).insert(ignore_mandatory=True)
|
}).insert(ignore_mandatory=True)
|
||||||
|
|
||||||
donation.submit()
|
donation.submit()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import unittest
|
|||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
|
|
||||||
from erpnext.non_profit.doctype.donation.donation import create_donation
|
from erpnext.non_profit.doctype.donation.donation import create_razorpay_donation
|
||||||
|
|
||||||
|
|
||||||
class TestDonation(unittest.TestCase):
|
class TestDonation(unittest.TestCase):
|
||||||
@@ -30,7 +30,7 @@ class TestDonation(unittest.TestCase):
|
|||||||
'method': 'Debit Card',
|
'method': 'Debit Card',
|
||||||
'id': 'pay_MeXAmsgeKOhq7O'
|
'id': 'pay_MeXAmsgeKOhq7O'
|
||||||
})
|
})
|
||||||
donation = create_donation(donor, payment)
|
donation = create_razorpay_donation(donor, payment)
|
||||||
|
|
||||||
self.assertTrue(donation.name)
|
self.assertTrue(donation.name)
|
||||||
|
|
||||||
|
|||||||
@@ -100,10 +100,13 @@ def create_customer(user_details, member=None):
|
|||||||
customer = frappe.new_doc("Customer")
|
customer = frappe.new_doc("Customer")
|
||||||
customer.customer_name = user_details.fullname
|
customer.customer_name = user_details.fullname
|
||||||
customer.customer_type = "Individual"
|
customer.customer_type = "Individual"
|
||||||
|
customer.customer_group = frappe.db.get_single_value("Selling Settings", "customer_group")
|
||||||
|
customer.territory = frappe.db.get_single_value("Selling Settings", "territory")
|
||||||
customer.flags.ignore_mandatory = True
|
customer.flags.ignore_mandatory = True
|
||||||
customer.insert(ignore_permissions=True)
|
customer.insert(ignore_permissions=True)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
frappe.db.savepoint("contact_creation")
|
||||||
contact = frappe.new_doc("Contact")
|
contact = frappe.new_doc("Contact")
|
||||||
contact.first_name = user_details.fullname
|
contact.first_name = user_details.fullname
|
||||||
if user_details.mobile:
|
if user_details.mobile:
|
||||||
@@ -129,6 +132,7 @@ def create_customer(user_details, member=None):
|
|||||||
return customer.name
|
return customer.name
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
frappe.db.rollback(save_point="contact_creation")
|
||||||
frappe.log_error(frappe.get_traceback(), _("Contact Creation Failed"))
|
frappe.log_error(frappe.get_traceback(), _("Contact Creation Failed"))
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -21,9 +21,11 @@
|
|||||||
"paid",
|
"paid",
|
||||||
"currency",
|
"currency",
|
||||||
"amount",
|
"amount",
|
||||||
|
"column_break_16",
|
||||||
"invoice",
|
"invoice",
|
||||||
"razorpay_details_section",
|
"razorpay_details_section",
|
||||||
"subscription_id",
|
"subscription_id",
|
||||||
|
"column_break_19",
|
||||||
"payment_id"
|
"payment_id"
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
@@ -106,20 +108,17 @@
|
|||||||
{
|
{
|
||||||
"fieldname": "razorpay_details_section",
|
"fieldname": "razorpay_details_section",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"hidden": 1,
|
|
||||||
"label": "Razorpay Details"
|
"label": "Razorpay Details"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "subscription_id",
|
"fieldname": "subscription_id",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"label": "Subscription ID",
|
"label": "Subscription ID"
|
||||||
"read_only": 1
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "payment_id",
|
"fieldname": "payment_id",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"label": "Payment ID",
|
"label": "Payment ID"
|
||||||
"read_only": 1
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "invoice",
|
"fieldname": "invoice",
|
||||||
@@ -140,11 +139,19 @@
|
|||||||
"label": "Company",
|
"label": "Company",
|
||||||
"options": "Company",
|
"options": "Company",
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "column_break_19",
|
||||||
|
"fieldtype": "Column Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "column_break_16",
|
||||||
|
"fieldtype": "Column Break"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-02-19 14:33:44.925122",
|
"modified": "2022-03-16 17:37:28.672916",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Non Profit",
|
"module": "Non Profit",
|
||||||
"name": "Membership",
|
"name": "Membership",
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ class Membership(Document):
|
|||||||
return invoice
|
return invoice
|
||||||
|
|
||||||
def validate_membership_type_and_settings(self, plan, settings):
|
def validate_membership_type_and_settings(self, plan, settings):
|
||||||
settings_link = get_link_to_form("Membership Type", self.membership_type)
|
settings_link = get_link_to_form("Non Profit Settings", "Non Profit Settings")
|
||||||
|
|
||||||
if not settings.membership_debit_account:
|
if not settings.membership_debit_account:
|
||||||
frappe.throw(_("You need to set <b>Debit Account</b> in {0}").format(settings_link))
|
frappe.throw(_("You need to set <b>Debit Account</b> in {0}").format(settings_link))
|
||||||
|
|||||||
@@ -353,3 +353,4 @@ erpnext.patches.v13_0.amazon_mws_deprecation_warning
|
|||||||
erpnext.patches.v13_0.set_work_order_qty_in_so_from_mr
|
erpnext.patches.v13_0.set_work_order_qty_in_so_from_mr
|
||||||
erpnext.patches.v13_0.update_accounts_in_loan_docs
|
erpnext.patches.v13_0.update_accounts_in_loan_docs
|
||||||
erpnext.patches.v13_0.remove_unknown_links_to_prod_plan_items
|
erpnext.patches.v13_0.remove_unknown_links_to_prod_plan_items
|
||||||
|
erpnext.patches.v13_0.rename_non_profit_fields
|
||||||
17
erpnext/patches/v13_0/rename_non_profit_fields.py
Normal file
17
erpnext/patches/v13_0/rename_non_profit_fields.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
import frappe
|
||||||
|
from frappe.model.utils.rename_field import rename_field
|
||||||
|
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
if frappe.db.table_exists("Donation"):
|
||||||
|
frappe.reload_doc("non_profit", "doctype", "Donation")
|
||||||
|
|
||||||
|
rename_field("Donation", "razorpay_payment_id", "payment_id")
|
||||||
|
|
||||||
|
if frappe.db.table_exists("Tax Exemption 80G Certificate"):
|
||||||
|
frappe.reload_doc("regional", "doctype", "Tax Exemption 80G Certificate")
|
||||||
|
frappe.reload_doc("regional", "doctype", "Tax Exemption 80G Certificate Detail")
|
||||||
|
|
||||||
|
rename_field("Tax Exemption 80G Certificate", "razorpay_payment_id", "payment_id")
|
||||||
|
rename_field("Tax Exemption 80G Certificate Detail", "razorpay_payment_id", "payment_id")
|
||||||
@@ -36,7 +36,7 @@ frappe.ui.form.on('Tax Exemption 80G Certificate', {
|
|||||||
'date_of_donation': '',
|
'date_of_donation': '',
|
||||||
'amount': 0,
|
'amount': 0,
|
||||||
'mode_of_payment': '',
|
'mode_of_payment': '',
|
||||||
'razorpay_payment_id': ''
|
'payment_id': ''
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
"amount",
|
"amount",
|
||||||
"column_break_27",
|
"column_break_27",
|
||||||
"mode_of_payment",
|
"mode_of_payment",
|
||||||
"razorpay_payment_id"
|
"payment_id"
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
@@ -201,13 +201,6 @@
|
|||||||
"options": "Mode of Payment",
|
"options": "Mode of Payment",
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"fetch_from": "donation.razorpay_payment_id",
|
|
||||||
"fieldname": "razorpay_payment_id",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "RazorPay Payment ID",
|
|
||||||
"read_only": 1
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fetch_from": "donation.date",
|
"fetch_from": "donation.date",
|
||||||
"fieldname": "date_of_donation",
|
"fieldname": "date_of_donation",
|
||||||
@@ -266,11 +259,18 @@
|
|||||||
"hidden": 1,
|
"hidden": 1,
|
||||||
"label": "Title",
|
"label": "Title",
|
||||||
"print_hide": 1
|
"print_hide": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fetch_from": "donation.payment_id",
|
||||||
|
"fieldname": "payment_id",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"label": "Payment ID",
|
||||||
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-02-22 00:03:34.215633",
|
"modified": "2022-03-16 17:21:39.831059",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Regional",
|
"module": "Regional",
|
||||||
"name": "Tax Exemption 80G Certificate",
|
"name": "Tax Exemption 80G Certificate",
|
||||||
|
|||||||
@@ -6,29 +6,19 @@ import frappe
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.contacts.doctype.address.address import get_company_address
|
from frappe.contacts.doctype.address.address import get_company_address
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.utils import flt, get_link_to_form, getdate
|
from frappe.utils import flt, get_link_to_form
|
||||||
|
|
||||||
from erpnext.accounts.utils import get_fiscal_year
|
from erpnext.accounts.utils import get_fiscal_year
|
||||||
|
|
||||||
|
|
||||||
class TaxExemption80GCertificate(Document):
|
class TaxExemption80GCertificate(Document):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
self.validate_date()
|
|
||||||
self.validate_duplicates()
|
self.validate_duplicates()
|
||||||
self.validate_company_details()
|
self.validate_company_details()
|
||||||
self.set_company_address()
|
self.set_company_address()
|
||||||
self.calculate_total()
|
self.calculate_total()
|
||||||
self.set_title()
|
self.set_title()
|
||||||
|
|
||||||
def validate_date(self):
|
|
||||||
if self.recipient == 'Member':
|
|
||||||
if getdate(self.date):
|
|
||||||
fiscal_year = get_fiscal_year(fiscal_year=self.fiscal_year, as_dict=True)
|
|
||||||
|
|
||||||
if not (fiscal_year.year_start_date <= getdate(self.date) \
|
|
||||||
<= fiscal_year.year_end_date):
|
|
||||||
frappe.throw(_('The Certificate Date is not in the Fiscal Year {0}').format(frappe.bold(self.fiscal_year)))
|
|
||||||
|
|
||||||
def validate_duplicates(self):
|
def validate_duplicates(self):
|
||||||
if self.recipient == 'Donor':
|
if self.recipient == 'Donor':
|
||||||
certificate = frappe.db.exists(self.doctype, {
|
certificate = frappe.db.exists(self.doctype, {
|
||||||
@@ -96,7 +86,7 @@ class TaxExemption80GCertificate(Document):
|
|||||||
'date': doc.from_date,
|
'date': doc.from_date,
|
||||||
'amount': doc.amount,
|
'amount': doc.amount,
|
||||||
'invoice_id': doc.invoice,
|
'invoice_id': doc.invoice,
|
||||||
'razorpay_payment_id': doc.payment_id,
|
'payment_id': doc.payment_id,
|
||||||
'membership': doc.name
|
'membership': doc.name
|
||||||
})
|
})
|
||||||
total += flt(doc.amount)
|
total += flt(doc.amount)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import frappe
|
|||||||
from frappe.utils import getdate
|
from frappe.utils import getdate
|
||||||
|
|
||||||
from erpnext.accounts.utils import get_fiscal_year
|
from erpnext.accounts.utils import get_fiscal_year
|
||||||
from erpnext.non_profit.doctype.donation.donation import create_donation
|
from erpnext.non_profit.doctype.donation.donation import create_razorpay_donation
|
||||||
from erpnext.non_profit.doctype.donation.test_donation import (
|
from erpnext.non_profit.doctype.donation.test_donation import (
|
||||||
create_donor,
|
create_donor,
|
||||||
create_donor_type,
|
create_donor_type,
|
||||||
@@ -39,11 +39,11 @@ class TestTaxExemption80GCertificate(unittest.TestCase):
|
|||||||
donor = create_donor()
|
donor = create_donor()
|
||||||
create_mode_of_payment()
|
create_mode_of_payment()
|
||||||
payment = frappe._dict({
|
payment = frappe._dict({
|
||||||
'amount': 100,
|
'amount': 100, # rzp sends data in paise
|
||||||
'method': 'Debit Card',
|
'method': 'Debit Card',
|
||||||
'id': 'pay_MeXAmsgeKOhq7O'
|
'id': 'pay_MeXAmsgeKOhq7O'
|
||||||
})
|
})
|
||||||
donation = create_donation(donor, payment)
|
donation = create_razorpay_donation(donor, payment)
|
||||||
|
|
||||||
args = frappe._dict({
|
args = frappe._dict({
|
||||||
'recipient': 'Donor',
|
'recipient': 'Donor',
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"amount",
|
"amount",
|
||||||
"invoice_id",
|
"invoice_id",
|
||||||
"column_break_4",
|
"column_break_4",
|
||||||
"razorpay_payment_id",
|
"payment_id",
|
||||||
"membership"
|
"membership"
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
@@ -35,26 +35,28 @@
|
|||||||
"options": "Sales Invoice",
|
"options": "Sales Invoice",
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"fieldname": "razorpay_payment_id",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Razorpay Payment ID"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fieldname": "membership",
|
"fieldname": "membership",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
|
"in_list_view": 1,
|
||||||
"label": "Membership",
|
"label": "Membership",
|
||||||
"options": "Membership"
|
"options": "Membership"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "column_break_4",
|
"fieldname": "column_break_4",
|
||||||
"fieldtype": "Column Break"
|
"fieldtype": "Column Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "payment_id",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"in_list_view": 1,
|
||||||
|
"label": "Payment ID"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-02-15 16:35:10.777587",
|
"modified": "2022-03-17 11:55:24.621708",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Regional",
|
"module": "Regional",
|
||||||
"name": "Tax Exemption 80G Certificate Detail",
|
"name": "Tax Exemption 80G Certificate Detail",
|
||||||
|
|||||||
@@ -10,10 +10,10 @@
|
|||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "Print Format",
|
"doctype": "Print Format",
|
||||||
"font": "Default",
|
"font": "Default",
|
||||||
"html": "{% if letter_head and not no_letterhead -%}\n <div class=\"letter-head\">{{ letter_head }}</div>\n{%- endif %}\n\n<div>\n <h3 class=\"text-center\">{{ doc.company }} 80G Donor Certificate</h3>\n</div>\n<br><br>\n\n<div class=\"details\">\n <p> <b>{{ _(\"Certificate No. : \") }}</b> {{ doc.name }} </p>\n <p>\n \t<b>{{ _(\"Date\") }} :</b> {{ doc.get_formatted(\"date\") }}<br>\n </p>\n <br><br>\n \n <div>\n\n This is to confirm that the {{ doc.company }} received an amount of <b>{{doc.get_formatted(\"amount\")}}</b>\n from <b>{{ doc.donor_name }}</b>\n {% if doc.pan_number -%}\n bearing PAN Number {{ doc.member_pan_number }}\n {%- endif %}\n\n via the Mode of Payment {{doc.mode_of_payment}}\n\n {% if doc.razorpay_payment_id -%}\n bearing RazorPay Payment ID {{ doc.razorpay_payment_id }}\n {%- endif %}\n\n on {{ doc.get_formatted(\"date_of_donation\") }}\n <br><br>\n \n <p>\n We thank you for your contribution towards the corpus of the {{ doc.company }} and helping support our work.\n </p>\n\n </div>\n</div>\n\n<br><br>\n<p class=\"company-address text-left\"> {{doc.company_address_display }}</p>\n\n<div class=\"certificate-footer text-center\">\n <p><i>Computer generated receipt - Does not require signature</i></p><br>\n \n {% if doc.company_pan_number %}\n <p>\n <b>{{ doc.company }}'s PAN Account No :</b> {{ doc.company_pan_number }}\n <p><br>\n {% endif %}\n \n <p>\n <b>80G Number : </b> {{ doc.company_80g_number }}\n {% if doc.company_80g_wef %}\n ( w.e.f. {{ doc.get_formatted('company_80g_wef') }} )\n {% endif %}\n </p><br>\n</div>",
|
"html": "{% if letter_head and not no_letterhead -%}\n <div class=\"letter-head\">{{ letter_head }}</div>\n{%- endif %}\n\n<div>\n <h3 class=\"text-center\">{{ doc.company }} 80G Donor Certificate</h3>\n</div>\n<br><br>\n\n<div class=\"details\">\n <p> <b>{{ _(\"Certificate No. : \") }}</b> {{ doc.name }} </p>\n <p>\n \t<b>{{ _(\"Date\") }} :</b> {{ doc.get_formatted(\"date\") }}<br>\n </p>\n <br><br>\n \n <div>\n\n This is to confirm that the {{ doc.company }} received an amount of <b>{{doc.get_formatted(\"amount\")}}</b>\n from <b>{{ doc.donor_name }}</b>\n {% if doc.pan_number -%}\n bearing PAN Number {{ doc.member_pan_number }}\n {%- endif %}\n\n via the Mode of Payment {{doc.mode_of_payment}}\n\n {% if doc.payment_id -%}\n bearing Payment ID {{ doc.payment_id }}\n {%- endif %}\n\n on {{ doc.get_formatted(\"date_of_donation\") }}\n <br><br>\n \n <p>\n We thank you for your contribution towards the corpus of the {{ doc.company }} and helping support our work.\n </p>\n\n </div>\n</div>\n\n<br><br>\n<p class=\"company-address text-left\"> {{doc.company_address_display }}</p>\n\n<div class=\"certificate-footer text-center\">\n <p><i>Computer generated receipt - Does not require signature</i></p><br>\n \n {% if doc.company_pan_number %}\n <p>\n <b>{{ doc.company }}'s PAN Account No :</b> {{ doc.company_pan_number }}\n <p><br>\n {% endif %}\n \n <p>\n <b>80G Number : </b> {{ doc.company_80g_number }}\n {% if doc.company_80g_wef %}\n ( w.e.f. {{ doc.get_formatted('company_80g_wef') }} )\n {% endif %}\n </p><br>\n</div>",
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"line_breaks": 0,
|
"line_breaks": 0,
|
||||||
"modified": "2021-02-22 00:20:08.516600",
|
"modified": "2022-03-16 17:25:33.420509",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Regional",
|
"module": "Regional",
|
||||||
"name": "80G Certificate for Donation",
|
"name": "80G Certificate for Donation",
|
||||||
|
|||||||
Reference in New Issue
Block a user