[fixes] code cleanup

This commit is contained in:
Saurabh 2016-01-11 16:50:05 +05:30
parent 3ade883fd9
commit cbebb4b8ba
9 changed files with 162 additions and 58 deletions

View File

@ -540,7 +540,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, args=None):
def get_payment_entry_against_order(dt, dn, amount=None, journal_entry=False, bank_account=None):
ref_doc = frappe.get_doc(dt, dn)
if flt(ref_doc.per_billed, 2) > 0:
@ -558,13 +558,11 @@ def get_payment_entry_against_order(dt, dn, args=None):
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 args or not args["amount"]:
if not amount:
if party_account_currency == ref_doc.company_currency:
amount = flt(ref_doc.base_grand_total) - flt(ref_doc.advance_paid)
else:
amount = flt(ref_doc.grand_total) - flt(ref_doc.advance_paid)
else:
amount = args["amount"]
return get_payment_entry(ref_doc, {
"party_type": party_type,
@ -575,12 +573,12 @@ def get_payment_entry_against_order(dt, dn, args=None):
"amount": amount,
"remarks": 'Advance Payment received against {0} {1}'.format(dt, dn),
"is_advance": "Yes",
"bank_account": args["bank_account"] if args else None,
"return_obj": args["return_obj"] if args else None
"bank_account": bank_account,
"journal_entry": journal_entry
})
@frappe.whitelist()
def get_payment_entry_against_invoice(dt, dn, args=None):
def get_payment_entry_against_invoice(dt, dn, amount=None, journal_entry=False, bank_account=None):
ref_doc = frappe.get_doc(dt, dn)
if dt == "Sales Invoice":
party_type = "Customer"
@ -604,11 +602,11 @@ def get_payment_entry_against_invoice(dt, dn, args=None):
"party_account_currency": ref_doc.party_account_currency,
"amount_field_party": amount_field_party,
"amount_field_bank": amount_field_bank,
"amount": args["amount"] if args else abs(ref_doc.outstanding_amount),
"amount": amount if amount else abs(ref_doc.outstanding_amount),
"remarks": 'Payment received against {0} {1}. {2}'.format(dt, dn, ref_doc.remarks),
"is_advance": "No",
"bank_account": args["bank_account"] if args else None,
"return_obj": args["return_obj"] if args else None
"bank_account": bank_account,
"journal_entry": journal_entry
})
def get_payment_entry(ref_doc, args):
@ -616,14 +614,14 @@ def get_payment_entry(ref_doc, args):
exchange_rate = get_exchange_rate(args.get("party_account"), args.get("party_account_currency"),
ref_doc.company, ref_doc.doctype, ref_doc.name)
jv = frappe.new_doc("Journal Entry")
jv.update({
je = frappe.new_doc("Journal Entry")
je.update({
"voucher_type": "Bank Entry",
"company": ref_doc.company,
"remark": args.get("remarks")
})
party_row = jv.append("accounts", {
party_row = je.append("accounts", {
"account": args.get("party_account"),
"party_type": args.get("party_type"),
"party": ref_doc.get(args.get("party_type").lower()),
@ -640,7 +638,7 @@ def get_payment_entry(ref_doc, args):
"reference_name": ref_doc.name
})
bank_row = jv.append("accounts")
bank_row = je.append("accounts")
#make it bank_details
bank_account = get_default_bank_cash_account(ref_doc.company, "Bank Entry", account=args.get("bank_account"))
@ -659,12 +657,12 @@ def get_payment_entry(ref_doc, args):
# set multi currency check
if party_row.account_currency != ref_doc.company_currency \
or (bank_row.account_currency and bank_row.account_currency != ref_doc.company_currency):
jv.multi_currency = 1
je.multi_currency = 1
jv.set_amounts_in_company_currency()
jv.set_total_debit_credit()
je.set_amounts_in_company_currency()
je.set_total_debit_credit()
return jv if args.get("return_obj") else jv.as_dict()
return je if args.get("journal_entry") else je.as_dict()
@frappe.whitelist()
def get_opening_accounts(company):

View File

@ -7,5 +7,4 @@ import frappe
from frappe.model.document import Document
class PaymentGateway(Document):
pass
pass

View File

@ -177,6 +177,54 @@
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "payment_url_message",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Payment URL Message",
"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_success_url",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Payment Success URL",
"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
}
],
"hide_heading": 0,
@ -188,8 +236,8 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2015-12-30 15:08:47.042197",
"modified_by": "saurabh6790@gmail.com",
"modified": "2016-01-11 05:55:41.117089",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Gateway Account",
"name_case": "",

View File

@ -12,13 +12,13 @@ class PaymentGatewayAccount(Document):
def validate(self):
self.update_default_payment_gateway()
self.set_as_default()
self.set_as_default_if_not_set()
def update_default_payment_gateway(self):
if self.is_default:
frappe.db.sql("""update `tabPayment Gateway Account` set is_default = 0
where is_default = 1 """)
def set_as_default(self):
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

View File

@ -1,6 +1,8 @@
cur_frm.add_fetch("payment_gateway", "payment_account", "payment_account")
cur_frm.add_fetch("payment_gateway", "gateway", "gateway")
cur_frm.add_fetch("payment_gateway", "message", "message")
cur_frm.add_fetch("payment_gateway", "payment_url_message", "payment_url_message")
cur_frm.add_fetch("payment_gateway", "payment_success_url", "payment_success_url")
frappe.ui.form.on("Payment Request", "onload", function(frm, dt, dn){
if (frm.doc.reference_doctype) {
@ -28,5 +30,14 @@ frappe.ui.form.on("Payment Request", "refresh", function(frm) {
}
})
})
frm.add_custom_button(__("Show Paypal Express Payment"), function() {
frappe.route_options = {
"Paypal Express Payment.reference_doctype": frm.doc.doctype,
"Paypal Express Payment.reference_docname": frm.doc.name
};
frappe.set_route("List", "Paypal Express Payment");
});
})

View File

@ -204,6 +204,30 @@
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "payment_success_url",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Payment Success URL",
"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,
@ -423,6 +447,30 @@
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "payment_url_message",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Payment URL Message",
"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,
@ -555,7 +603,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-01-08 05:25:06.056398",
"modified": "2016-01-11 05:49:28.342786",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Request",

View File

@ -23,12 +23,12 @@ class PaymentRequest(Document):
def validate_payment_request(self):
if frappe.db.get_value("Payment Request", {"reference_name": self.reference_name,
"name": ("!=", self.name), "status": ("not in", ["Initiated", "Paid"]), "docstatus": 1}, "name"):
frappe.throw(_("Payment Request already exist"))
frappe.throw(_("Payment Request already exists {0}".fomart(self.reference_name)))
def validate_currency(self):
ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
if ref_doc.currency != frappe.db.get_value("Account", self.payment_account, "account_currency"):
frappe.throw(_("Transaction currency is not similar to Gateway Currency"))
frappe.throw(_("Transaction currency must be same as Payment Gateway currency"))
def validate_payment_gateway_account(self):
if not self.payment_gateway:
@ -49,7 +49,7 @@ class PaymentRequest(Document):
self.make_communication_entry()
def on_cancel(self):
self.set_cancelled()
self.set_as_cancelled()
def on_update_after_submit(self):
pass
@ -57,6 +57,9 @@ class PaymentRequest(Document):
def set_status(self):
pass
def get_payment_url(self):
pass
def make_invoice(self):
if self.make_sales_invoice:
from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice
@ -69,7 +72,7 @@ class PaymentRequest(Document):
if self.payment_url:
frappe.db.set_value(self.doctype, self.name, "status", "Initiated")
def set_paid(self):
def set_as_paid(self):
if frappe.session.user == "Guest":
frappe.set_user("Administrator")
@ -82,17 +85,19 @@ class PaymentRequest(Document):
"""create entry"""
payment_details = {
"amount": self.amount,
"return_obj": True,
"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, payment_details)
jv = get_payment_entry_against_order(self.reference_doctype, self.reference_name,\
amount=self.amount, 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, payment_details)
jv = get_payment_entry_against_invoice(self.reference_doctype, self.reference_name,\
amount=self.amount, journal_entry=True, bank_account=self.payment_account)
jv.update({
"voucher_type": "Journal Entry",
@ -114,12 +119,13 @@ class PaymentRequest(Document):
def get_message(self):
"""return message with payment gateway link"""
return cstr(self.message) + """ <a href="%s"> Click here to pay </a>"""%self.payment_url
return cstr(self.message) + " <a href='{0}'>{1}</a>".format(self.payment_url, \
self.payment_url_message or _(" Click here to pay"))
def set_failed(self):
pass
def set_cancelled(self):
def set_as_cancelled(self):
frappe.db.set_value(self.doctype, self.name, "status", "Cancelled")
def make_communication_entry(self):
@ -133,13 +139,16 @@ class PaymentRequest(Document):
"reference_name": self.reference_name
})
comm.insert(ignore_permissions=True)
def get_payment_success_url(self):
return self.payment_success_url
@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)
ref_doc = frappe.get_doc(args.dt, args.dn)
gateway_account = get_gateway_details(args)
pr = frappe.new_doc("Payment Request")
@ -154,6 +163,8 @@ def make_payment_request(**args):
"email_to": args.recipient_id or "",
"subject": "Payment Request for %s"%args.dn,
"message": gateway_account.message,
"payment_url_message": gateway_account.payment_url_message,
"payment_success_url": gateway_account.payment_success_url,
"reference_doctype": args.dt,
"reference_name": args.dn
})
@ -174,10 +185,6 @@ def make_payment_request(**args):
return pr.as_dict()
def get_reference_doc_details(dt, dn):
""" return reference doc Sales Order/Sales Invoice"""
return frappe.get_doc(dt, dn)
def get_amount(ref_doc, dt):
"""get amount based on doctype"""
if dt == "Sales Order":
@ -195,10 +202,12 @@ def get_gateway_details(args):
"""return gateway and payment account of default payment gateway"""
if args.payemnt_gateway:
gateway_account = frappe.db.get_value("Payment Gateway Account", args.payemnt_gateway,
["name", "gateway", "payment_account", "message"], as_dict=1)
["name", "gateway", "payment_account", "message", "payment_url_message", "payment_success_url"],
as_dict=1)
gateway_account = frappe.db.get_value("Payment Gateway Account", {"is_default": 1},
["name", "gateway", "payment_account", "message"], as_dict=1)
["name", "gateway", "payment_account", "message", "payment_url_message", "payment_success_url"],
as_dict=1)
if not gateway_account:
frappe.throw(_("Payment Gateway Account is not configured"))
@ -209,29 +218,20 @@ def get_gateway_details(args):
def get_print_format_list(ref_doctype):
print_format_list = ["Standard"]
print_format_list.extend(list(chain.from_iterable(frappe.db.sql("""select name from `tabPrint Format`
where doc_type=%s""", ref_doctype, as_list=1))))
print_format_list.extend([p.name for p in frappe.get_all("Print Format",
filters={"doc_type": ref_doctype})])
return {
"print_format": print_format_list
}
@frappe.whitelist(allow_guest=True)
def generate_payment_request(name):
doc = frappe.get_doc("Payment Request", name)
if doc.docstatus not in [0, 2]:
if doc.gateway == "PayPal":
from paypal_integration.express_checkout import set_express_checkout
payment_url = set_express_checkout(doc.amount, doc.currency, {"doctype": doc.doctype,
"docname": doc.name})
payment_url = frappe.get_doc("Payment Request", name).run_method("get_payment_url")
if payment_url:
frappe.local.response["type"] = "redirect"
frappe.local.response["location"] = payment_url
else:
frappe.respond_as_web_page(_("Invalid Payment Request"),
_("Payment Request has been canceled by vendor"), success=False,
http_status_code=frappe.ValidationError.http_status_code)
@frappe.whitelist(allow_guest=True)
def resend_payment_email(docname):
return frappe.get_doc("Payment Request", docname).send_email()

View File

@ -62,7 +62,7 @@ class TestPaymentRequest(unittest.TestCase):
SO_INR = make_sales_order(currency="INR")
pr = make_payment_request(dt="Sales Order", dn=SO_INR.name, recipient_id="saurabh@erpnext.com",
mute_email=1, submit_doc=1)
jv = pr.set_paid()
jv = pr.set_as_paid()
SO_INR = frappe.get_doc("Sales Order", SO_INR.name)

View File

@ -124,7 +124,7 @@ def create_bank_account(args):
"account_type": "Bank",
})
try:
bank_account.insert()
return bank_account.insert()
except RootNotEditable:
frappe.throw(_("Bank account cannot be named as {0}").format(args.get("bank_account")))