From fd20340576fb4e6f5eb004dd2fde3bf4e5b0b9e5 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 8 Dec 2011 17:49:40 +0530 Subject: [PATCH] Introduced C-form for Indian customer --- .../accounts/Module Def/Accounts/Accounts.txt | 11 +- erpnext/accounts/doctype/c_form/__init__.py | 0 erpnext/accounts/doctype/c_form/c_form.js | 10 + erpnext/accounts/doctype/c_form/c_form.py | 34 ++++ erpnext/accounts/doctype/c_form/c_form.txt | 190 ++++++++++++++++++ .../doctype/c_form_invoice_detail/__init__.py | 0 .../c_form_invoice_detail.txt | 91 +++++++++ .../receivable_voucher/receivable_voucher.py | 24 ++- .../receivable_voucher/receivable_voucher.txt | 31 ++- 9 files changed, 385 insertions(+), 6 deletions(-) create mode 100644 erpnext/accounts/doctype/c_form/__init__.py create mode 100644 erpnext/accounts/doctype/c_form/c_form.js create mode 100644 erpnext/accounts/doctype/c_form/c_form.py create mode 100644 erpnext/accounts/doctype/c_form/c_form.txt create mode 100644 erpnext/accounts/doctype/c_form_invoice_detail/__init__.py create mode 100644 erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.txt diff --git a/erpnext/accounts/Module Def/Accounts/Accounts.txt b/erpnext/accounts/Module Def/Accounts/Accounts.txt index 0a6921a13c..f9c36c823f 100644 --- a/erpnext/accounts/Module Def/Accounts/Accounts.txt +++ b/erpnext/accounts/Module Def/Accounts/Accounts.txt @@ -5,7 +5,7 @@ { 'creation': '2010-09-25 10:50:37', 'docstatus': 0, - 'modified': '2011-09-27 12:44:04', + 'modified': '2011-12-07 16:18:28', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -179,6 +179,15 @@ 'doctype': 'Module Def Item' }, + # Module Def Item + { + 'description': 'Track C-Form received from customers', + 'display_name': 'C-Form', + 'doc_name': 'C-Form', + 'doc_type': 'Setup Forms', + 'doctype': 'Module Def Item' + }, + # Module Def Item { 'display_name': 'General Ledger', diff --git a/erpnext/accounts/doctype/c_form/__init__.py b/erpnext/accounts/doctype/c_form/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/accounts/doctype/c_form/c_form.js b/erpnext/accounts/doctype/c_form/c_form.js new file mode 100644 index 0000000000..4a90a9d1d6 --- /dev/null +++ b/erpnext/accounts/doctype/c_form/c_form.js @@ -0,0 +1,10 @@ +//c-form js file +// ----------------------------- +cur_frm.fields_dict.invoice_details.grid.get_field("invoice_no").get_query = function(doc) { + return 'SELECT `tabReceivable Voucher`.`name` FROM `tabReceivable Voucher` WHERE `tabReceivable Voucher`.`company` = "' +doc.company+'" AND `tabReceivable Voucher`.%(key)s LIKE "%s" AND `tabReceivable Voucher`.`customer` = "' + doc.customer + '" AND `tabReceivable Voucher`.`docstatus` = 1 and `tabReceivable Voucher`.`c_form_applicable` = "Yes" ORDER BY `tabReceivable Voucher`.`name` ASC LIMIT 50'; +} + +cur_frm.cscript.invoice_no = function(doc, cdt, cdn) { + var d = locals[cdt][cdn]; + get_server_fields('get_invoice_details', d.invoice_no, 'invoice_details', doc, cdt, cdn, 1); +} diff --git a/erpnext/accounts/doctype/c_form/c_form.py b/erpnext/accounts/doctype/c_form/c_form.py new file mode 100644 index 0000000000..00016cb053 --- /dev/null +++ b/erpnext/accounts/doctype/c_form/c_form.py @@ -0,0 +1,34 @@ +# Please edit this list and import only required elements +import webnotes +from webnotes.utils import add_days, cint, cstr, date_diff, default_fields, flt, getdate, now, nowdate +from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType +from webnotes.model.doclist import getlist, copy_doclist +from webnotes.model.code import get_obj +from webnotes import msgprint, errprint + +sql = webnotes.conn.sql +# ----------------------------------------------------------------------------------------- + + +class DocType: + def __init__(self,d,dl): + self.doc, self.doclist = d,dl + + def autoname(self): + self.doc.name = make_autoname(self.doc.naming_series + '.#####') + + def on_update(self): + inv = "'" + "', '".join([d.invoice_no for d in getlist(self.doclist, 'invoice_details')]) + "'" + sql("""update `tabReceivable Voucher` set c_form_no = '%s', modified ='%s' + where name in (%s)"""%(self.doc.name, self.doc.modified, inv)) + + def get_invoice_details(self, invoice_no): + inv = sql("""select posting_date, territory, net_total, grand_total from + `tabReceivable Voucher` where name = %s""", invoice_no) + ret = { + 'invoice_date' : inv and getdate(inv[0][0]).strftime('%Y-%m-%d') or '', + 'territory' : inv and inv[0][1] or '', + 'net_total' : inv and flt(inv[0][2]) or '', + 'grand_total' : inv and flt(inv[0][3]) or '' + } + return ret diff --git a/erpnext/accounts/doctype/c_form/c_form.txt b/erpnext/accounts/doctype/c_form/c_form.txt new file mode 100644 index 0000000000..987bc9a7b3 --- /dev/null +++ b/erpnext/accounts/doctype/c_form/c_form.txt @@ -0,0 +1,190 @@ +# DocType, C-Form +[ + + # These values are common in all dictionaries + { + 'creation': '2011-12-07 16:16:16', + 'docstatus': 0, + 'modified': '2011-12-07 17:50:17', + 'modified_by': 'Administrator', + 'owner': 'Administrator' + }, + + # These values are common for all DocType + { + '_last_update': '1323255350', + 'colour': 'White:FFF', + 'doctype': 'DocType', + 'module': 'Accounts', + 'name': '__common__', + 'section_style': 'Simple', + 'show_in_menu': 0, + 'version': 11 + }, + + # These values are common for all DocField + { + 'doctype': 'DocField', + 'name': '__common__', + 'parent': 'C-Form', + 'parentfield': 'fields', + 'parenttype': 'DocType', + 'permlevel': 0 + }, + + # These values are common for all DocPerm + { + 'doctype': 'DocPerm', + 'name': '__common__', + 'parent': 'C-Form', + 'parentfield': 'permissions', + 'parenttype': 'DocType', + 'read': 1 + }, + + # DocType, C-Form + { + 'doctype': 'DocType', + 'name': 'C-Form' + }, + + # DocPerm + { + 'create': 1, + 'doctype': 'DocPerm', + 'permlevel': 0, + 'role': 'Accounts User', + 'write': 1 + }, + + # DocPerm + { + 'create': 1, + 'doctype': 'DocPerm', + 'permlevel': 0, + 'role': 'Accounts Manager', + 'submit': 0, + 'write': 1 + }, + + # DocPerm + { + 'doctype': 'DocPerm', + 'permlevel': 1, + 'role': 'All' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldtype': 'Column Break', + 'width': '50%' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'naming_series', + 'fieldtype': 'Select', + 'label': 'Series', + 'options': '\nC-FORM/', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'c_form_no', + 'fieldtype': 'Data', + 'label': 'C-Form No', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'received_date', + 'fieldtype': 'Date', + 'label': 'Received Date', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'customer', + 'fieldtype': 'Link', + 'label': 'Customer', + 'options': 'Customer', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldtype': 'Column Break', + 'width': '50%' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'company', + 'fieldtype': 'Select', + 'label': 'Company', + 'options': 'link:Company' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'fiscal_year', + 'fieldtype': 'Select', + 'label': 'Fiscal Year', + 'options': 'link:Fiscal Year', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'quarter', + 'fieldtype': 'Select', + 'label': 'Quarter', + 'options': '\nI\nII\nIII\nIV' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'total_amount', + 'fieldtype': 'Currency', + 'label': 'Total Amount', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'state', + 'fieldtype': 'Select', + 'label': 'State', + 'options': "link:State\ncountry='India'", + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldtype': 'Section Break' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'invoice_details', + 'fieldtype': 'Table', + 'label': 'Invoice Details', + 'options': 'C-Form Invoice Detail' + } +] \ No newline at end of file diff --git a/erpnext/accounts/doctype/c_form_invoice_detail/__init__.py b/erpnext/accounts/doctype/c_form_invoice_detail/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.txt b/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.txt new file mode 100644 index 0000000000..d6be6c0d4d --- /dev/null +++ b/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.txt @@ -0,0 +1,91 @@ +# DocType, C-Form Invoice Detail +[ + + # These values are common in all dictionaries + { + 'creation': '2011-12-07 16:15:39', + 'docstatus': 0, + 'modified': '2011-12-07 16:21:55', + 'modified_by': 'Administrator', + 'owner': 'Administrator' + }, + + # These values are common for all DocType + { + 'colour': 'White:FFF', + 'doctype': 'DocType', + 'istable': 1, + 'module': 'Accounts', + 'name': '__common__', + 'section_style': 'Simple', + 'show_in_menu': 0, + 'version': 5 + }, + + # These values are common for all DocField + { + 'doctype': 'DocField', + 'name': '__common__', + 'parent': 'C-Form Invoice Detail', + 'parentfield': 'fields', + 'parenttype': 'DocType' + }, + + # DocType, C-Form Invoice Detail + { + 'doctype': 'DocType', + 'name': 'C-Form Invoice Detail' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'invoice_no', + 'fieldtype': 'Link', + 'label': 'Invoice No', + 'options': 'Receivable Voucher', + 'permlevel': 0, + 'width': '160px' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'invoice_date', + 'fieldtype': 'Date', + 'label': 'Invoice Date', + 'permlevel': 1, + 'width': '120px' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'territory', + 'fieldtype': 'Link', + 'label': 'Territory', + 'options': 'Territory', + 'permlevel': 1, + 'width': '120px' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'net_total', + 'fieldtype': 'Currency', + 'label': 'Net Total', + 'permlevel': 1, + 'width': '120px' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'grand_total', + 'fieldtype': 'Currency', + 'label': 'Grand Total', + 'permlevel': 1, + 'width': '120px' + } +] \ No newline at end of file diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py index 13ed8d3c5e..57d8c55fac 100644 --- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py +++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py @@ -397,6 +397,14 @@ class DocType(TransactionBase): if flt(self.doc.write_off_amount) and not self.doc.write_off_account: msgprint("Please enter Write Off Account", raise_exception=1) + + def validate_c_form(self): + """ Blank C-form no if C-form applicable marked as 'No'""" + if self.doc.amended_from and self.doc.c_form_applicable == 'No' and self.doc.c_form_no: + sql("""delete from `tabC-Form Invoice Detail` where invoice_no = %s + and parent = %s""", (self.doc.amended_from, self.doc.c_form_no)) + + set(self.doc, 'c_form_no', '') # VALIDATE # ==================================================================================== @@ -432,6 +440,7 @@ class DocType(TransactionBase): self.clear_advances() # Set against account self.set_against_income_account() + self.validate_c_form() # *************************************************** ON SUBMIT ********************************************** @@ -554,10 +563,21 @@ class DocType(TransactionBase): if not cint(self.doc.is_pos) == 1: self.update_against_document_in_jv() - + + self.update_c_form() + # on submit notification # get_obj('Notification Control').notify_contact('Sales Invoice', self.doc.doctype,self.doc.name, self.doc.email_id, self.doc.contact_person) - + + + def update_c_form(self): + """Update amended id in C-form""" + if self.doc.c_form_no and self.doc.amended_from: + sql("""update `tabC-Form Invoice Detail` set invoice_no = %s, + invoice_date = %s, territory = %s, net_total = %s, + grand_total = %s where invoice_no = %s and parent = %s""", (self.doc.name, self.doc.amended_from, self.doc.c_form_no)) + + # *************************************************** ON CANCEL ********************************************** # Check Next Document's docstatus diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt index e2fc0c6416..eedb01c5dd 100644 --- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt +++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt @@ -5,7 +5,7 @@ { 'creation': '2010-08-08 17:09:18', 'docstatus': 0, - 'modified': '2011-12-06 13:17:26', + 'modified': '2011-12-08 16:28:22', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -21,7 +21,7 @@ # These values are common for all DocType { - '_last_update': '1323156733', + '_last_update': '1323341785', 'change_log': '1. Change in pull_details method dt.-26-06-2009', 'colour': 'White:FFF', 'default_print_format': 'Standard', @@ -34,7 +34,7 @@ 'server_code_error': ' ', 'show_in_menu': 0, 'subject': 'To %(customer_name)s worth %(currency)s %(grand_total_export)s due on %(due_date)s | %(outstanding_amount)s outstanding', - 'version': 383 + 'version': 388 }, # These values are common for all DocFormat @@ -971,6 +971,31 @@ 'permlevel': 0 }, + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'c_form_applicable', + 'fieldtype': 'Select', + 'label': 'C-Form Applicable', + 'no_copy': 1, + 'options': 'No\nYes', + 'permlevel': 0, + 'print_hide': 1, + 'report_hide': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'c_form_no', + 'fieldtype': 'Link', + 'label': 'C-Form No', + 'no_copy': 1, + 'options': 'C-Form', + 'permlevel': 1, + 'print_hide': 1 + }, + # DocField { 'doctype': 'DocField',