mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-27 00:44:45 +00:00
feat: separate invoice generation and email
This commit is contained in:
@@ -57,34 +57,65 @@ class Membership(Document):
|
|||||||
self.load_from_db()
|
self.load_from_db()
|
||||||
self.db_set('paid', 1)
|
self.db_set('paid', 1)
|
||||||
|
|
||||||
def generate_and_send_invoice(self):
|
def generate_invoice(self, save=True):
|
||||||
if not self.paid:
|
if not (self.paid or self.currency or self.amount):
|
||||||
frappe.throw(_("The payment for this membership is not paid. To generate invoice mark the paid check"))
|
frappe.throw(_("The payment for this membership is not paid. To generate invoice fill the payment details"))
|
||||||
|
|
||||||
|
if self.invoice:
|
||||||
|
frappe.throw(_("An invoice is already linked to this document"))
|
||||||
|
|
||||||
member = frappe.get_doc("Member", self.member)
|
member = frappe.get_doc("Member", self.member)
|
||||||
plan = frappe.get_doc("Membership Type", self.membership_type)
|
plan = frappe.get_doc("Membership Type", self.membership_type)
|
||||||
settings = frappe.get_doc("Membership Settings")
|
settings = frappe.get_doc("Membership Settings")
|
||||||
|
attachments = []
|
||||||
|
|
||||||
|
if not member.customer:
|
||||||
|
frappe.throw(_("No customer linked to member {}", [member.name]))
|
||||||
|
|
||||||
|
if not settings.debit_account:
|
||||||
|
frappe.throw(_("You need to set <b>Debit Account</b> in Membership Settings"))
|
||||||
|
|
||||||
|
if not settings.company:
|
||||||
|
frappe.throw(_("You need to set <b>Default Company</b> for invoicing in Membership Settings"))
|
||||||
|
|
||||||
invoice = make_invoice(self, member, plan, settings)
|
invoice = make_invoice(self, member, plan, settings)
|
||||||
|
self.invoice = invoice.name
|
||||||
|
|
||||||
if invoice and settings.send_invoice and self.membership_status in ["New", "Current"]:
|
if save:
|
||||||
print("Sending")
|
self.save()
|
||||||
message = settings.new_message if self.membership_status == "New" else settings.renewal
|
|
||||||
email = member.email_id if member.email_id else member.email
|
|
||||||
|
|
||||||
email_args = {
|
return invoice
|
||||||
"recipients": [email],
|
|
||||||
"message": message,
|
|
||||||
"subject": _('Here is your invoice'),
|
|
||||||
"attachments": [frappe.attach_print("Sales Invoice", invoice.name, print_format=settings.print_format)],
|
|
||||||
"reference_doctype": self.doctype,
|
|
||||||
"reference_name": self.name
|
|
||||||
}
|
|
||||||
if not frappe.flags.in_test:
|
|
||||||
frappe.enqueue(method=frappe.sendmail, queue='short', timeout=300, is_async=True, **email_args)
|
|
||||||
else:
|
|
||||||
frappe.sendmail(**email_args)
|
|
||||||
|
|
||||||
|
def send_acknowlement(self):
|
||||||
|
settings = frappe.get_doc("Membership Settings")
|
||||||
|
if not settings.send_email:
|
||||||
|
frappe.throw(_("You need to enable <b>Send Acknowledge Email</b> in Membership Settings"))
|
||||||
|
|
||||||
|
member = frappe.get_doc("Member", self.member)
|
||||||
|
plan = frappe.get_doc("Membership Type", self.membership_type)
|
||||||
|
email = member.email_id if member.email_id else member.email
|
||||||
|
attachments = [frappe.attach_print("Membership", self.name, print_format=settings.membership_print_format)]
|
||||||
|
|
||||||
|
if self.invoice and settings.send_invoice:
|
||||||
|
attachments.append(frappe.attach_print("Sales Invoice", self.invoice, print_format=settings.inv_print_format))
|
||||||
|
|
||||||
|
email_args = {
|
||||||
|
"recipients": [email],
|
||||||
|
"message": settings.message,
|
||||||
|
"subject": _('Here is your invoice'),
|
||||||
|
"attachments": [frappe.attach_print("Sales Invoice", invoice.name, print_format=settings.inv_print_format)],
|
||||||
|
"reference_doctype": self.doctype,
|
||||||
|
"reference_name": self.name
|
||||||
|
}
|
||||||
|
|
||||||
|
if not frappe.flags.in_test:
|
||||||
|
frappe.enqueue(method=frappe.sendmail, queue='short', timeout=300, is_async=True, **email_args)
|
||||||
|
else:
|
||||||
|
frappe.sendmail(**email_args)
|
||||||
|
|
||||||
|
def generate_and_send_invoice(self):
|
||||||
|
invoice = self.generate_invoice(False)
|
||||||
|
self.send_acknowlement()
|
||||||
|
|
||||||
def make_invoice(membership, member, plan, settings):
|
def make_invoice(membership, member, plan, settings):
|
||||||
invoice = frappe.get_doc({
|
invoice = frappe.get_doc({
|
||||||
|
|||||||
Reference in New Issue
Block a user