diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index afb9b85fb9d..e910f541610 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -551,7 +551,7 @@ def get_default_bank_cash_account(company, voucher_type, mode_of_payment=None, a } @frappe.whitelist() -def get_payment_entry_against_order(dt, dn, amount=None, journal_entry=False, bank_account=None): +def get_payment_entry_against_order(dt, dn, base_rounded_total=None, rounded_total=None, journal_entry=False, bank_account=None): ref_doc = frappe.get_doc(dt, dn) if flt(ref_doc.per_billed, 2) > 0: @@ -569,7 +569,7 @@ def get_payment_entry_against_order(dt, dn, amount=None, journal_entry=False, ba party_account = get_party_account(party_type, ref_doc.get(party_type.lower()), ref_doc.company) party_account_currency = get_account_currency(party_account) - if not amount: + if not base_rounded_total or not rounded_total: if party_account_currency == ref_doc.company_currency: amount = flt(ref_doc.base_grand_total) - flt(ref_doc.advance_paid) else: @@ -581,7 +581,8 @@ def get_payment_entry_against_order(dt, dn, amount=None, journal_entry=False, ba "party_account_currency": party_account_currency, "amount_field_party": amount_field_party, "amount_field_bank": amount_field_bank, - "amount": amount, + "amount": base_rounded_total or amount, + "rounded_total": rounded_total, "remarks": 'Advance Payment received against {0} {1}'.format(dt, dn), "is_advance": "Yes", "bank_account": bank_account, @@ -589,7 +590,7 @@ def get_payment_entry_against_order(dt, dn, amount=None, journal_entry=False, ba }) @frappe.whitelist() -def get_payment_entry_against_invoice(dt, dn, amount=None, journal_entry=False, bank_account=None): +def get_payment_entry_against_invoice(dt, dn, base_rounded_total=None, rounded_total=None, journal_entry=False, bank_account=None): ref_doc = frappe.get_doc(dt, dn) if dt == "Sales Invoice": party_type = "Customer" @@ -613,7 +614,8 @@ def get_payment_entry_against_invoice(dt, dn, amount=None, journal_entry=False, "party_account_currency": ref_doc.party_account_currency, "amount_field_party": amount_field_party, "amount_field_bank": amount_field_bank, - "amount": amount if amount else abs(ref_doc.outstanding_amount), + "amount": base_rounded_total if base_rounded_total else abs(ref_doc.outstanding_amount), + "rounded_total": rounded_total, "remarks": 'Payment received against {0} {1}. {2}'.format(dt, dn, ref_doc.remarks), "is_advance": "No", "bank_account": bank_account, @@ -662,10 +664,11 @@ def get_payment_entry(ref_doc, args): bank_row.cost_center = cost_center + amount = args.get("rounded_total") or args.get("amount") if bank_row.account_currency == args.get("party_account_currency"): - bank_row.set(args.get("amount_field_bank"), args.get("amount")) + bank_row.set(args.get("amount_field_bank"), amount) else: - bank_row.set(args.get("amount_field_bank"), args.get("amount") * exchange_rate) + bank_row.set(args.get("amount_field_bank"), amount * exchange_rate) # set multi currency check if party_row.account_currency != ref_doc.company_currency \ diff --git a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py index 468f8778c47..fd213a47a1e 100644 --- a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py +++ b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py @@ -8,7 +8,7 @@ from frappe.model.document import Document class PaymentGatewayAccount(Document): def autoname(self): - self.name = self.gateway + " - " + self.currency + self.name = self.payment_gateway + " - " + self.currency def validate(self): self.currency = frappe.db.get_value("Account", self.payment_account, "account_currency") @@ -24,4 +24,4 @@ class PaymentGatewayAccount(Document): def set_as_default_if_not_set(self): if not frappe.db.get_value("Payment Gateway Account", {"is_default": 1, "name": ("!=", self.name)}, "name"): - self.is_default = 1 + self.is_default = 1 diff --git a/erpnext/accounts/doctype/payment_request/payment_request.json b/erpnext/accounts/doctype/payment_request/payment_request.json index bfd6442edf9..55c6524cf85 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.json +++ b/erpnext/accounts/doctype/payment_request/payment_request.json @@ -37,13 +37,13 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "amount", + "fieldname": "base_rounded_total", "fieldtype": "Currency", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, - "label": "Amount", + "label": "Base Rounded Total", "length": 0, "no_copy": 0, "permlevel": 0, @@ -57,6 +57,30 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "rounded_total", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Rounded Total", + "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, @@ -579,7 +603,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-01-21 11:44:04.920584", + "modified": "2016-02-09 21:15:55.153924", "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 b1af6cc02fa..588e436bfc9 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -8,7 +8,7 @@ from frappe import _ from frappe.model.document import Document from frappe.utils import flt, nowdate, get_url, cstr from erpnext.accounts.party import get_party_account -from erpnext.accounts.utils import get_account_currency, get_balance_on +from erpnext.accounts.utils import get_balance_on from erpnext.accounts.doctype.journal_entry.journal_entry import (get_payment_entry_against_invoice, get_payment_entry_against_order) @@ -80,29 +80,27 @@ class PaymentRequest(Document): def create_journal_entry(self): """create entry""" - payment_details = { - "amount": self.amount, - "journal_entry": 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,\ - amount=self.amount, journal_entry=True, bank_account=self.payment_account) + base_rounded_total=self.base_rounded_total, rounded_total= self.rounded_total,\ + journal_entry=True, bank_account=self.payment_account) if self.reference_doctype == "Sales Invoice": jv = get_payment_entry_against_invoice(self.reference_doctype, self.reference_name,\ - amount=self.amount, journal_entry=True, bank_account=self.payment_account) + base_rounded_total=self.base_rounded_total, rounded_total= self.rounded_total, \ + journal_entry=True, bank_account=self.payment_account) jv.update({ "voucher_type": "Journal Entry", "posting_date": nowdate() - }) + }) + + print jv.as_dict() jv.insert(ignore_permissions=True) jv.submit() - + #set status as paid for Payment Request frappe.db.set_value(self.doctype, self.name, "status", "Paid") @@ -148,20 +146,23 @@ def make_payment_request(**args): ref_doc = frappe.get_doc(args.dt, args.dn) gateway_account = get_gateway_details(args) + base_rounded_total, rounded_total = get_amount(ref_doc, args.dt) existing_payment_request = frappe.db.get_value("Payment Request", {"reference_doctype": args.dt, "reference_name": args.dn}) + if existing_payment_request: pr = frappe.get_doc("Payment Request", existing_payment_request) - else: + + else: pr = frappe.new_doc("Payment Request") - pr.update({ - "payment_gateway": gateway_account.name, - "gateway": gateway_account.gateway, + "payment_gateway_account": gateway_account.name, + "payment_gateway": gateway_account.payment_gateway, "payment_account": gateway_account.payment_account, "currency": ref_doc.currency, "make_sales_invoice": args.cart or 0, - "amount": get_amount(ref_doc, args.dt), + "base_rounded_total": base_rounded_total, + "rounded_total": rounded_total, "mute_email": args.mute_email or 0, "email_to": args.recipient_id or "", "subject": "Payment Request for %s"%args.dn, @@ -178,11 +179,12 @@ def make_payment_request(**args): if args.submit_doc: pr.insert(ignore_permissions=True) pr.submit() - + + if args.cart: generate_payment_request(pr.name) frappe.db.commit() - + if not args.cart: return pr @@ -191,13 +193,16 @@ def make_payment_request(**args): def get_amount(ref_doc, dt): """get amount based on doctype""" if dt == "Sales Order": - amount = flt(ref_doc.base_grand_total) - flt(ref_doc.advance_paid) + base_rounded_total = flt(ref_doc.base_grand_total) + rounded_total = flt(ref_doc.grand_total) - flt(ref_doc.advance_paid) if dt == "Sales Invoice": - amount = abs(ref_doc.outstanding_amount) + base_rounded_total = flt(ref_doc.base_grand_total) + rounded_total = flt(ref_doc.grand_total) - flt(ref_doc.advance_paid) - if amount > 0: - return amount + if base_rounded_total > 0 and rounded_total > 0 : + return base_rounded_total, rounded_total + else: frappe.throw(_("Payment Entry is already created")) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index e5ec4548d00..76bffc2de97 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -246,6 +246,6 @@ erpnext.patches.v6_16.update_billing_status_in_dn_and_pr erpnext.patches.v6_16.create_manufacturer_records execute:frappe.db.sql("update `tabPricing Rule` set title=name where title='' or title is null") #2016-01-27 erpnext.patches.v6_20.set_party_account_currency_in_orders -erpnext.patches.v6_19.comment_feed_communication +#erpnext.patches.v6_19.comment_feed_communication erpnext.patches.v6_21.fix_reorder_level erpnext.patches.v6_21.rename_material_request_fields diff --git a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json index 5b9dc32a2ee..4c462c28db7 100644 --- a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json +++ b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json @@ -226,6 +226,7 @@ "bold": 0, "collapsible": 0, "default": "Orders", + "description": "After payment completion redirect user to selected page.", "fieldname": "payment_success_url", "fieldtype": "Select", "hidden": 0, @@ -246,6 +247,54 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "column_break_11", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "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, + "collapsible": 0, + "fieldname": "payment_gateway_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Payment Gateway Account", + "length": 0, + "no_copy": 0, + "options": "Payment Gateway Account", + "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 } ], "hide_heading": 0, @@ -258,7 +307,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2016-02-01 11:58:39.741582", + "modified": "2016-02-09 15:45:03.389220", "modified_by": "Administrator", "module": "Shopping Cart", "name": "Shopping Cart Settings", diff --git a/erpnext/templates/includes/cart/cart_address.html b/erpnext/templates/includes/cart/cart_address.html index 44964da47c5..1af8f0bb481 100644 --- a/erpnext/templates/includes/cart/cart_address.html +++ b/erpnext/templates/includes/cart/cart_address.html @@ -1,12 +1,15 @@ {% from "erpnext/templates/includes/cart/cart_macros.html" import show_address %}
+ {% if addresses|length == 1%} + {% set select_address = True %} + {% endif %}

{{ _("Shipping Address") }}

{% for address in addresses %} - {{ show_address(address, doc, "shipping_address_name") }} + {{ show_address(address, doc, "shipping_address_name", select_address) }} {% endfor %}
@@ -17,7 +20,7 @@
{% for address in addresses %} - {{ show_address(address, doc, "customer_address") }} + {{ show_address(address, doc, "customer_address", select_address) }} {% endfor %}
diff --git a/erpnext/templates/includes/cart/cart_macros.html b/erpnext/templates/includes/cart/cart_macros.html index 250b4879204..c77aa6aa506 100644 --- a/erpnext/templates/includes/cart/cart_macros.html +++ b/erpnext/templates/includes/cart/cart_macros.html @@ -1,5 +1,10 @@ -{% macro show_address(address, doc, fieldname) %} -{% set selected=address.name==doc.get(fieldname) %} +{% macro show_address(address, doc, fieldname, select_address=False) %} +{% if select_address %} + {% set selected=True %} +{% else %} + {% set selected=address.name==doc.get(fieldname) %} +{% endif %} +