From 276d3e60bd29ba2bd6bb616537c97dd6482b6dd4 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Thu, 31 Dec 2015 13:26:36 +0530 Subject: [PATCH] [enhance] pay via cart --- .../payment_request/payment_request.json | 27 +++++++++++++++- .../payment_request/payment_request.py | 32 +++++++++++++++---- erpnext/accounts/utils.py | 2 +- .../doctype/sales_order/sales_order.py | 5 +-- erpnext/templates/pages/order.html | 16 +++++++++- 5 files changed, 71 insertions(+), 11 deletions(-) diff --git a/erpnext/accounts/doctype/payment_request/payment_request.json b/erpnext/accounts/doctype/payment_request/payment_request.json index 0c0afdc265..d69454cb0d 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.json +++ b/erpnext/accounts/doctype/payment_request/payment_request.json @@ -82,6 +82,31 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "depends_on": "eval:doc.reference_doctype==\"Sales Order\"", + "fieldname": "make_sales_invoice", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Make Sales Invoice", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -484,7 +509,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2015-12-29 12:56:45.456546", + "modified": "2015-12-30 17:43:10.626907", "modified_by": "Administrator", "module": "Accounts", "name": "Payment Request", diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index 4086a3cb39..df431b26d8 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -44,6 +44,13 @@ class PaymentRequest(Document): def set_status(self): pass + def make_invoice(self): + if self.make_sales_invoice: + from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice + si = make_sales_invoice(self.reference_name, ignore_permissions=True) + si = frappe.get_doc(si).insert(ignore_permissions=True) + si.submit() + def send_payment_request(self): self.payment_url = get_url("/api/method/erpnext.accounts.doctype.payment_request.payment_request.gererate_payemnt_request?name={0}".format(self.name)) if self.payment_url: @@ -53,8 +60,11 @@ class PaymentRequest(Document): if frappe.session.user == "Guest": frappe.set_user("Administrator") - return self.create_journal_entry() - + jv = self.create_journal_entry() + self.make_invoice() + + return jv + def create_journal_entry(self): """create entry""" payment_details = { @@ -62,6 +72,8 @@ class PaymentRequest(Document): "return_obj": True, "bank_account": self.payment_account } + + frappe.flags.ignore_account_permission = True if self.reference_doctype == "Sales Order": jv = get_payment_entry_against_order(self.reference_doctype, self.reference_name, payment_details) @@ -73,7 +85,7 @@ class PaymentRequest(Document): "voucher_type": "Journal Entry", "posting_date": nowdate() }) - + jv.insert(ignore_permissions=True) jv.submit() #set status as paid for Payment Request @@ -109,9 +121,10 @@ class PaymentRequest(Document): }) comm.insert(ignore_permissions=True) -@frappe.whitelist() +@frappe.whitelist(allow_guest=True) def make_payment_request(**args): """Make payment request""" + args = frappe._dict(args) ref_doc = get_reference_doc_details(args.dt, args.dn) name, gateway, payment_account, message = get_gateway_details(args) @@ -122,6 +135,7 @@ def make_payment_request(**args): "gateway": gateway, "payment_account": payment_account, "currency": ref_doc.currency, + "make_sales_invoice": args.cart or 0, "amount": get_amount(ref_doc, args.dt), "mute_email": args.mute_email or 0, "email_to": args.recipient_id or "", @@ -137,8 +151,14 @@ def make_payment_request(**args): if args.submit_doc: pr.insert(ignore_permissions=True) pr.submit() - return pr - + + if args.cart: + gererate_payemnt_request(pr.name) + frappe.db.commit() + + if not args.cart: + return pr + return pr.as_dict() def get_reference_doc_details(dt, dn): diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index e7f2b8ab0e..6f02a54742 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -247,7 +247,7 @@ def update_against_doc(d, jv_obj): # will work as update after submit jv_obj.flags.ignore_validate_update_after_submit = True - jv_obj.save() + jv_obj.save(ignore_permissions=True) def remove_against_link_from_jv(ref_type, ref_no): linked_jv = frappe.db.sql_list("""select parent from `tabJournal Entry Account` diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 99e708d5b0..dc21bd58f0 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -401,7 +401,7 @@ def make_delivery_note(source_name, target_doc=None): return target_doc @frappe.whitelist() -def make_sales_invoice(source_name, target_doc=None): +def make_sales_invoice(source_name, target_doc=None, ignore_permissions=False): def postprocess(source, target): set_missing_values(source, target) #Get the advance paid Journal Entries in Sales Invoice Advance @@ -410,6 +410,7 @@ def make_sales_invoice(source_name, target_doc=None): def set_missing_values(source, target): target.is_pos = 0 target.ignore_pricing_rule = 1 + target.flags.ignore_permissions = True target.run_method("set_missing_values") target.run_method("calculate_taxes_and_totals") @@ -442,7 +443,7 @@ def make_sales_invoice(source_name, target_doc=None): "doctype": "Sales Team", "add_if_empty": True } - }, target_doc, postprocess) + }, target_doc, postprocess, ignore_permissions=ignore_permissions) return doclist diff --git a/erpnext/templates/pages/order.html b/erpnext/templates/pages/order.html index 26dbed6a3e..f3c91b1191 100644 --- a/erpnext/templates/pages/order.html +++ b/erpnext/templates/pages/order.html @@ -58,7 +58,7 @@ {% endif %}
- {{ d.get_formatted("amount") }} + {{ d.get_formatted("amount") }} {# output of get_formatted("rate") is unicode, to replace unicode use _("text {0}").decode("utf8").format(val) #}

{{ _("Rate: {0}").decode("utf8").format(d.get_formatted("rate")) }}

@@ -76,4 +76,18 @@
+
+
+
+ {% if doc.per_billed <= 0 %} + + {% endif %} +
+
+ {% endblock %}