From 1bef6a530ccddf486b8cbc65fe21db1c8b97c391 Mon Sep 17 00:00:00 2001 From: Mangesh-Khairnar Date: Sun, 4 Oct 2020 13:01:11 +0530 Subject: [PATCH] fix: create payment entry against payment request --- .../doctype/payment_entry/payment_entry.py | 16 ++++++------ .../payment_request/payment_request.py | 8 +++--- .../doctype/pos_invoice/pos_invoice.py | 7 ++++- erpnext/erpnext_integrations/utils.py | 8 +++--- .../selling/page/point_of_sale/pos_payment.js | 26 +++++++++---------- 5 files changed, 35 insertions(+), 30 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 11ab02021b..b7d80ae608 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -950,12 +950,12 @@ def get_reference_details(reference_doctype, reference_name, party_account_curre @frappe.whitelist() -def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=None): +def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=None, mode_of_payment=None): doc = frappe.get_doc(dt, dn) if dt in ("Sales Order", "Purchase Order") and flt(doc.per_billed, 2) > 0: frappe.throw(_("Can only make payment against unbilled {0}").format(dt)) - if dt in ("Sales Invoice", "Sales Order", "Dunning"): + if dt in ("Sales Invoice", "Sales Order", "Dunning", "POS Invoice"): party_type = "Customer" elif dt in ("Purchase Invoice", "Purchase Order"): party_type = "Supplier" @@ -965,7 +965,7 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= party_type = "Student" # party account - if dt == "Sales Invoice": + if dt in ["Sales Invoice", "POS Invoice"]: party_account = get_party_account_based_on_invoice_discounting(dn) or doc.debit_to elif dt == "Purchase Invoice": party_account = doc.credit_to @@ -984,7 +984,7 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= party_account_currency = doc.get("party_account_currency") or get_account_currency(party_account) # payment type - if (dt == "Sales Order" or (dt in ("Sales Invoice", "Fees", "Dunning") and doc.outstanding_amount > 0)) \ + if (dt == "Sales Order" or (dt in ("Sales Invoice", "Fees", "Dunning", "POS Invoice") and doc.outstanding_amount > 0)) \ or (dt=="Purchase Invoice" and doc.outstanding_amount < 0): payment_type = "Receive" else: @@ -994,7 +994,7 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= grand_total = outstanding_amount = 0 if party_amount: grand_total = outstanding_amount = party_amount - elif dt in ("Sales Invoice", "Purchase Invoice"): + elif dt in ("Sales Invoice", "Purchase Invoice", "POS Invoice"): if party_account_currency == doc.company_currency: grand_total = doc.base_rounded_total or doc.base_grand_total else: @@ -1021,11 +1021,11 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= outstanding_amount = grand_total - flt(doc.advance_paid) # bank or cash - bank = get_default_bank_cash_account(doc.company, "Bank", mode_of_payment=doc.get("mode_of_payment"), + bank = get_default_bank_cash_account(doc.company, "Bank", mode_of_payment=doc.get("mode_of_payment", mode_of_payment), account=bank_account) if not bank: - bank = get_default_bank_cash_account(doc.company, "Cash", mode_of_payment=doc.get("mode_of_payment"), + bank = get_default_bank_cash_account(doc.company, "Cash", mode_of_payment=doc.get("mode_of_payment", mode_of_payment), account=bank_account) paid_amount = received_amount = 0 @@ -1050,7 +1050,7 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= pe.company = doc.company pe.cost_center = doc.get("cost_center") pe.posting_date = nowdate() - pe.mode_of_payment = doc.get("mode_of_payment") + pe.mode_of_payment = doc.get("mode_of_payment", mode_of_payment) pe.party_type = party_type pe.party = doc.get(scrub(party_type)) pe.contact_person = doc.get("contact_person") diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index 8eba647c59..d01f298445 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -165,7 +165,7 @@ class PaymentRequest(Document): ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name) - if self.reference_doctype == "Sales Invoice": + if self.reference_doctype in ["Sales Invoice", "POS Invoice"]: party_account = ref_doc.debit_to elif self.reference_doctype == "Purchase Invoice": party_account = ref_doc.credit_to @@ -180,8 +180,8 @@ class PaymentRequest(Document): else: party_amount = self.grand_total - payment_entry = get_payment_entry(self.reference_doctype, self.reference_name, - party_amount=party_amount, bank_account=self.payment_account, bank_amount=bank_amount) + payment_entry = get_payment_entry(self.reference_doctype, self.reference_name, party_amount=party_amount, + bank_account=self.payment_account, bank_amount=bank_amount, mode_of_payment=self.mode_of_payment) payment_entry.update({ "reference_no": self.name, @@ -269,7 +269,7 @@ class PaymentRequest(Document): # if shopping cart enabled and in session if (shopping_cart_settings.enabled and hasattr(frappe.local, "session") - and frappe.local.session.user != "Guest"): + and frappe.local.session.user != "Guest") and self.payment_channel != "Phone": success_url = shopping_cart_settings.payment_success_url if success_url: diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py index 155b95e9d9..73cf1188e2 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py @@ -316,8 +316,13 @@ class POSInvoice(SalesInvoice): def create_payment_request(self): for pay in self.payments: - if pay.type == "Phone": + if pay.amount <= 0: + frappe.throw(_("Payment amount cannot be less than or equal to 0")) + + if not self.contact_mobile: + frappe.throw(_("Please enter the phone number first")) + payment_gateway = frappe.db.get_value("Payment Gateway Account", { "payment_account": pay.account, }) diff --git a/erpnext/erpnext_integrations/utils.py b/erpnext/erpnext_integrations/utils.py index 78a5fced77..e278fd7807 100644 --- a/erpnext/erpnext_integrations/utils.py +++ b/erpnext/erpnext_integrations/utils.py @@ -43,7 +43,7 @@ def get_webhook_address(connector_name, method, exclude_uri=False): return server_url -def create_mode_of_payment(gateway): +def create_mode_of_payment(gateway, payment_type="General"): payment_gateway_account = frappe.db.get_value("Payment Gateway Account", { "payment_gateway": gateway }, ['payment_account']) @@ -53,11 +53,11 @@ def create_mode_of_payment(gateway): "doctype": "Mode of Payment", "mode_of_payment": gateway, "enabled": 1, - "type": "General", - "account": { + "type": payment_type, + "accounts": [{ "doctype": "Mode of Payment Account", "company": get_default_company(), "default_account": payment_gateway_account - } + }] }) mode_of_payment.insert(ignore_permissions=True) \ No newline at end of file diff --git a/erpnext/selling/page/point_of_sale/pos_payment.js b/erpnext/selling/page/point_of_sale/pos_payment.js index 35cd408b53..915564c029 100644 --- a/erpnext/selling/page/point_of_sale/pos_payment.js +++ b/erpnext/selling/page/point_of_sale/pos_payment.js @@ -175,21 +175,21 @@ erpnext.PointOfSale.Payment = class { }) frappe.realtime.on("process_phone_payments", function(data) { - frappe.msgprint({message: 'help', title:'now'}) - // frappe.dom.unfreeze(); - // let message = data["ResultDesc"]; - // let title = __("Payment Failed"); - // const frm = me.events.get_frm(); + frappe.dom.unfreeze(); + let message = data["ResultDesc"]; + let title = __("Payment Failed"); + const frm = me.events.get_frm(); - // if (data["ResultCode"] == 0) { - // title = __("Payment Received"); - // $('[data-fieldname=request_for_payment]').text("Paid") - // } + if (data["ResultCode"] == 0) { + title = __("Payment Received"); + $('[data-fieldname=request_for_payment]').text("Paid") + cur_pos.submit() + } - // frappe.msgprint({ - // "message": message, - // "title": title - // }); + frappe.msgprint({ + "message": message, + "title": title + }); }); this.$payment_modes.on('click', '.shortcut', function(e) {