| # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors |
| # License: GNU General Public License v3. See license.txt |
| |
| from __future__ import unicode_literals |
| |
| import webnotes |
| from webnotes import _ |
| |
| @webnotes.whitelist() |
| def get_party_details(party=None, account=None, party_type="Customer", company=None, posting_date=None): |
| if not webnotes.has_permission(party_type, "read", party): |
| webnotes.throw("No Permission") |
| |
| if party_type=="Customer": |
| get_party_details = webnotes.get_attr("erpnext.selling.doctype.customer.customer.get_customer_details") |
| else: |
| get_party_details = webnotes.get_attr("erpnext.buying.doctype.supplier.supplier.get_supplier_details") |
| |
| if party: |
| account = get_party_account(company, party, party_type) |
| elif account: |
| party = webnotes.conn.get_value('Account', account, 'master_name') |
| |
| account_fieldname = "debit_to" if party_type=="Customer" else "credit_to" |
| |
| out = { |
| party_type.lower(): party, |
| account_fieldname : account, |
| "due_date": get_due_date(posting_date, party, party_type, account, company) |
| } |
| out.update(get_party_details(party)) |
| return out |
| |
| def get_party_account(company, party, party_type): |
| if not company: |
| webnotes.throw(_("Please select company first.")) |
| |
| if party: |
| acc_head = webnotes.conn.get_value("Account", {"master_name":party, |
| "master_type": party_type, "company": company}) |
| |
| if not acc_head: |
| create_party_account(party, party_type, company) |
| |
| return acc_head |
| |
| def get_due_date(posting_date, party, party_type, account, company): |
| """Set Due Date = Posting Date + Credit Days""" |
| due_date = None |
| if posting_date: |
| credit_days = 0 |
| if account: |
| credit_days = webnotes.conn.get_value("Account", account, "credit_days") |
| if party and not credit_days: |
| credit_days = webnotes.conn.get_value(party_type, party, "credit_days") |
| if company and not credit_days: |
| credit_days = webnotes.conn.get_value("Company", company, "credit_days") |
| |
| due_date = add_days(posting_date, credit_days) if credit_days else posting_date |
| |
| return due_date |
| |
| def create_party_account(party, party_type, company): |
| if not company: |
| webnotes.throw(_("Company is required")) |
| |
| company_details = webnotes.conn.get_value("Company", company, |
| ["abbr", "receivables_group", "payables_group"], as_dict=True) |
| if not webnotes.conn.exists("Account", (party + " - " + company_details.abbr)): |
| parent_account = company_details.receivables_group \ |
| if party_type=="Customer" else company_details.payables_group |
| |
| # create |
| account = webnotes.bean({ |
| "doctype": "Account", |
| 'account_name': party, |
| 'parent_account': parent_account, |
| 'group_or_ledger':'Ledger', |
| 'company': company, |
| 'master_type': party_type, |
| 'master_name': party, |
| "freeze_account": "No" |
| }).insert(ignore_permissions=True) |
| |
| webnotes.msgprint(_("Account Created") + ": " + account.doc.name) |