From 81aa8a075676f5b2d74f6be33e73b42e1722f38b Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 13 Jul 2011 13:53:06 +0530 Subject: [PATCH 01/12] added loan and loan installment --- accounts/doctype/loan/__init__.py | 0 accounts/doctype/loan/loan.js | 18 ++++++++++++++++++ accounts/doctype/loan/loan.py | 13 +++++++++++++ accounts/doctype/loan/test_loan.py | 17 +++++++++++++++++ accounts/doctype/loan_installment/__init__.py | 0 5 files changed, 48 insertions(+) create mode 100644 accounts/doctype/loan/__init__.py create mode 100644 accounts/doctype/loan/loan.js create mode 100644 accounts/doctype/loan/loan.py create mode 100644 accounts/doctype/loan/test_loan.py create mode 100644 accounts/doctype/loan_installment/__init__.py diff --git a/accounts/doctype/loan/__init__.py b/accounts/doctype/loan/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/accounts/doctype/loan/loan.js b/accounts/doctype/loan/loan.js new file mode 100644 index 0000000000..37e49dc857 --- /dev/null +++ b/accounts/doctype/loan/loan.js @@ -0,0 +1,18 @@ +$.extend(cur_frm.cscript, { + Generate: function(doc, dt, dn) { + cur_frm.cscript.clear_installments(doc); + for(var i=0; i< doc.no_of_installments; i++) { + d = LocalDB.add_child(doc, 'Loan Installment', 'installments'); + d.amount = doc.loan_amount / doc.no_of_installments; + d.due_date = dateutil.add_months(doc.start_date, i+1); + } + cur_frm.refresh(); + }, + clear_installments: function(doc) { + $.each(getchildren('Loan Installment', doc.name, 'installments', 'Loan'), + function(i, d) { + LocalDB.delete_doc('Loan Installment', d.name); + } + ) + } +}) \ No newline at end of file diff --git a/accounts/doctype/loan/loan.py b/accounts/doctype/loan/loan.py new file mode 100644 index 0000000000..4a6427dffa --- /dev/null +++ b/accounts/doctype/loan/loan.py @@ -0,0 +1,13 @@ +import webnotes +from webnotes.model.doc import make_autoname, Document + +class DocType: + def __init__(self, doc, doclist): + self.doc, self.doclist = doc, doclist + + def autoname(self): + """ + Create Loan Id using naming_series pattern + """ + self.doc.name = make_autoname(self.doc.naming_series+ '.#####') + diff --git a/accounts/doctype/loan/test_loan.py b/accounts/doctype/loan/test_loan.py new file mode 100644 index 0000000000..4e72559d6e --- /dev/null +++ b/accounts/doctype/loan/test_loan.py @@ -0,0 +1,17 @@ +import unittest +import webnotes +from webnotes.model.code import get_obj + +class TestScheduleGeneartion(unittest.TestCase): + def setUp(self): + webnotes.conn.begin() + # create a mock loan + self.loan = get_obj('Loan', 'LOAN00001') + + def test_generation(self): + "test the genaration of loan installments" + self.loan.generate() + self.assertEqual(self.loan.get_installment_total(), self.loan.doc.loan_amount) + + def tearDown(self): + webnotes.conn.rollback() diff --git a/accounts/doctype/loan_installment/__init__.py b/accounts/doctype/loan_installment/__init__.py new file mode 100644 index 0000000000..e69de29bb2 From 62e77f536bacf69662513aed6ed480d8bae80d57 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 14 Jul 2011 12:41:39 +0530 Subject: [PATCH 02/12] added more features to loan --- accounts/doctype/loan/loan.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/accounts/doctype/loan/loan.js b/accounts/doctype/loan/loan.js index 37e49dc857..d4e063d7be 100644 --- a/accounts/doctype/loan/loan.js +++ b/accounts/doctype/loan/loan.js @@ -8,11 +8,39 @@ $.extend(cur_frm.cscript, { } cur_frm.refresh(); }, + refresh: function(doc) { + cur_frm.cscript.hide_show_buttons(doc); + }, + hide_show_buttons: function(doc) { + if(doc.docstatus==0) { + hide_field('Installment Reciept'); show_field('Generate'); + } else if (doc.docstatus==1) { + show_field('Installment Reciept'); hide_field('Generate'); + } + }, clear_installments: function(doc) { $.each(getchildren('Loan Installment', doc.name, 'installments', 'Loan'), function(i, d) { LocalDB.delete_doc('Loan Installment', d.name); } ) + }, + 'Installment Reciept': function(doc, dt, dn) { + var d = new wn.widgets.Dialog({ + width: 500, + title: 'Add a new payment installment', + fields: [ + {fieldtype:'Data', label:'Check Number', fieldname:'check_number', reqd:1}, + {fieldtype:'Date', label:'Check Date', fieldname:'check_date', reqd:1}, + {fieldtype:'Button', label:'Update',fieldname:'update'} + ] + }) + d.show(); + d.fields_dict.update.input.onclick = function() { + var data = d.get_values(); + if(data) { + $c_obj() + } + } } }) \ No newline at end of file From fd84f5ce903ae272fce84d8fc10459539fe7dcb1 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 14 Jul 2011 12:42:27 +0530 Subject: [PATCH 03/12] added loan, loan_installment txts --- accounts/doctype/loan/loan.txt | 144 ++++++++++++++++++ .../loan_installment/loan_installment.txt | 94 ++++++++++++ 2 files changed, 238 insertions(+) create mode 100644 accounts/doctype/loan/loan.txt create mode 100644 accounts/doctype/loan_installment/loan_installment.txt diff --git a/accounts/doctype/loan/loan.txt b/accounts/doctype/loan/loan.txt new file mode 100644 index 0000000000..90c0db2077 --- /dev/null +++ b/accounts/doctype/loan/loan.txt @@ -0,0 +1,144 @@ +# DocType, Loan +[ + + # These values are common in all dictionaries + { + 'creation': '2011-07-12 10:50:19', + 'docstatus': 0, + 'modified': '2011-07-14 11:22:32', + 'modified_by': 'Administrator', + 'owner': 'Administrator' + }, + + # These values are common for all DocType + { + '_last_update': '1310622631', + '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': 'Loan', + 'parentfield': 'fields', + 'parenttype': 'DocType', + 'permlevel': 0 + }, + + # These values are common for all DocPerm + { + 'cancel': 1, + 'create': 1, + 'doctype': 'DocPerm', + 'idx': 1, + 'name': '__common__', + 'parent': 'Loan', + 'parentfield': 'permissions', + 'parenttype': 'DocType', + 'permlevel': 0, + 'read': 1, + 'role': 'Accounts User', + 'submit': 1, + 'write': 1 + }, + + # DocType, Loan + { + 'doctype': 'DocType', + 'name': 'Loan' + }, + + # DocPerm + { + 'doctype': 'DocPerm' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'naming_series', + 'fieldtype': 'Select', + 'idx': 1, + 'label': 'Naming Series', + 'options': '\nLOAN', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'account', + 'fieldtype': 'Link', + 'idx': 2, + 'label': 'Account', + 'options': 'Account', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'loan_amount', + 'fieldtype': 'Currency', + 'idx': 3, + 'label': 'Loan Amount', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'start_date', + 'fieldtype': 'Date', + 'idx': 4, + 'label': 'Start Date', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'no_of_installments', + 'fieldtype': 'Int', + 'idx': 5, + 'label': 'No of Installments', + 'reqd': 1 + }, + + # DocField + { + 'colour': 'White:FFF', + 'doctype': 'DocField', + 'fieldtype': 'Button', + 'idx': 6, + 'label': 'Generate', + 'trigger': 'Client' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'installments', + 'fieldtype': 'Table', + 'idx': 7, + 'label': 'Installments', + 'options': 'Loan Installment' + }, + + # DocField + { + 'allow_on_submit': 1, + 'colour': 'White:FFF', + 'doctype': 'DocField', + 'fieldtype': 'Button', + 'idx': 8, + 'label': 'Installment Reciept' + } +] \ No newline at end of file diff --git a/accounts/doctype/loan_installment/loan_installment.txt b/accounts/doctype/loan_installment/loan_installment.txt new file mode 100644 index 0000000000..dd65939869 --- /dev/null +++ b/accounts/doctype/loan_installment/loan_installment.txt @@ -0,0 +1,94 @@ +# DocType, Loan Installment +[ + + # These values are common in all dictionaries + { + 'creation': '2011-07-12 10:53:58', + 'docstatus': 0, + 'modified': '2011-07-12 10:53:58', + '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': 1 + }, + + # These values are common for all DocField + { + 'doctype': 'DocField', + 'name': '__common__', + 'parent': 'Loan Installment', + 'parentfield': 'fields', + 'parenttype': 'DocType', + 'permlevel': 0 + }, + + # DocType, Loan Installment + { + 'doctype': 'DocType', + 'name': 'Loan Installment' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'amount', + 'fieldtype': 'Currency', + 'idx': 1, + 'label': 'Amount' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'due_date', + 'fieldtype': 'Date', + 'idx': 2, + 'label': 'Due Date' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'check_number', + 'fieldtype': 'Int', + 'idx': 3, + 'label': 'Check Number' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'check_date', + 'fieldtype': 'Date', + 'idx': 4, + 'label': 'Check Date' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'deposit_date', + 'fieldtype': 'Date', + 'idx': 5, + 'label': 'Deposit Date' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'realized_date', + 'fieldtype': 'Date', + 'idx': 6, + 'label': 'Realized Date' + } +] \ No newline at end of file From d0692860580c16c4845ad725268a9e468aab53dd Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 14 Jul 2011 13:15:37 +0530 Subject: [PATCH 04/12] fix to my company --- home/page/my_company/my_company.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/home/page/my_company/my_company.js b/home/page/my_company/my_company.js index 0384788b29..8b1b44ff9a 100644 --- a/home/page/my_company/my_company.js +++ b/home/page/my_company/my_company.js @@ -2,6 +2,7 @@ pscript['onload_My Company'] = function() { var wrapper = page_body.pages['My Company']; // body + wrapper.className = 'layout_wrapper'; wrapper.head = new PageHeader(wrapper, 'People'); wrapper.body = $a(wrapper, 'div', '', {marginRight:'11px', marginTop:'11px'}); @@ -91,7 +92,10 @@ MemberList = function(parent) { this.cur_profile = null; this.list_wrapper = $a($td(parent.tab,0,0), 'div', '', {marginLeft:'11px'}); - this.profile_wrapper = $a($td(parent.tab,0,1), 'div', 'layout_wrapper', {marginLeft:'0px', height:'100%'}); + var cell = $td(parent.tab,0,1); + $y(cell, { border: '1px solid #aaa' }); + cell.className = 'layout_wrapper'; + this.profile_wrapper = $a(cell, 'div'); this.no_user_selected = $a(this.profile_wrapper, 'div', 'help_box', null, 'Please select a user to view profile'); @@ -213,7 +217,7 @@ MemberItem = function(parent, det, mlist) { this.fullname = det[1] ? det[1] : det[0]; var div = $a($td(this.tab, 0, 1), 'div', '', {fontWeight: 'bold',padding:'2px 0px'}); this.name_link = $a(div,'span','link_type'); - this.name_link.innerHTML = this.fullname; + this.name_link.innerHTML = crop(this.fullname, 15); this.name_link.onclick = function() { mlist.show_profile(me.det[0], me); } From 37fec6e219fd2994be8f37c0f38922832b02bd8a Mon Sep 17 00:00:00 2001 From: Brahma K Date: Fri, 15 Jul 2011 11:20:04 +0530 Subject: [PATCH 05/12] Added Loan in Module Def --- accounts/Module Def/Accounts/Accounts.txt | 641 ++++-------------- accounts/doctype/loan/loan.txt | 4 +- .../loan_installment/loan_installment.txt | 4 +- hr/doctype/salary_slip/salary_slip.txt | 58 +- 4 files changed, 182 insertions(+), 525 deletions(-) diff --git a/accounts/Module Def/Accounts/Accounts.txt b/accounts/Module Def/Accounts/Accounts.txt index 3d70ff8701..708a2c942f 100644 --- a/accounts/Module Def/Accounts/Accounts.txt +++ b/accounts/Module Def/Accounts/Accounts.txt @@ -1,722 +1,377 @@ +# Module Def, Accounts [ + + # These values are common in all dictionaries { - '_last_update': None, - 'creation': '2010-09-25 10:50:37', - 'disabled': 'No', + 'creation': '2010-09-25 10:50:34', 'docstatus': 0, - 'doctype': u'Module Def', + 'modified': '2011-07-15 10:43:04', + 'modified_by': 'Administrator', + 'owner': 'Administrator' + }, + + # These values are common for all Module Def Role + { + 'doctype': 'Module Def Role', + 'name': '__common__', + 'parent': 'Accounts', + 'parentfield': 'roles', + 'parenttype': 'Module Def' + }, + + # These values are common for all Module Def Item + { + 'doctype': 'Module Def Item', + 'name': '__common__', + 'parent': 'Accounts', + 'parentfield': 'items', + 'parenttype': 'Module Def' + }, + + # These values are common for all Module Def + { + 'disabled': 'No', + 'doctype': 'Module Def', 'doctype_list': 'GL Mapper, Journal Voucher\nGL Mapper, Payable Voucher\nGL Mapper, Receivable Voucher\nDocType Label, Receivable Voucher\nDocType Label, Payable Voucher', 'file_list': 'finance.gif,FileData/00210', - 'idx': None, 'is_hidden': 'No', 'last_updated_date': '2010-12-08 10:13:30', - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', 'module_desc': 'Data about your payables, receivables and books of accounts', 'module_icon': 'Accounts.gif', 'module_label': 'Accounts', 'module_name': 'Accounts', - 'module_page': None, - 'module_seq': 6, - 'name': 'Accounts', - 'owner': 'Administrator', - 'parent': None, - 'parentfield': None, - 'parenttype': None, - 'trash_reason': None, - 'widget_code': "" + 'module_seq': 5, + 'name': '__common__' }, + + # Module Def, Accounts + { + 'doctype': 'Module Def', + 'name': 'Accounts' + }, + + # Module Def Item { 'click_function': "show_chart_browser('Accounts Browser','Account')", - 'creation': '2010-10-04 17:16:24', 'description': 'Manage your accounts', 'display_name': 'Chart of Accounts', 'doc_name': 'Accounts Browser', 'doc_type': 'Pages', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 1, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01178', - 'owner': 'harshada@webnotestech.com', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 1 }, + + # Module Def Item { 'click_function': "show_chart_browser('Accounts Browser','Cost Center')", - 'creation': '2010-10-05 12:51:20', 'description': 'Manage your cost centers', 'display_name': 'Chart of Cost Centers', 'doc_name': 'Accounts Browser', 'doc_type': 'Pages', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 2, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01183', - 'owner': 'harshada@webnotestech.com', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 2 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', 'description': 'Regular journal entry', 'display_name': 'Journal Voucher', 'doc_name': 'Journal Voucher', 'doc_type': 'Forms', - 'docstatus': 0, 'doctype': 'Module Def Item', 'fields': 'voucher_type\nvoucher_date\nfiscal_year\ntotal_debit\ntotal_credit', - 'hide': None, - 'icon': None, - 'idx': 3, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01012', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 3 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', 'description': 'Outgoing Invoice to your customers', 'display_name': 'Sales Invoice', 'doc_name': 'Receivable Voucher', 'doc_type': 'Forms', - 'docstatus': 0, 'doctype': 'Module Def Item', 'fields': 'voucher_date\ndue_date\ndebit_to\ngrand_total\noutstanding_amount', - 'hide': None, - 'icon': None, - 'idx': 4, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01013', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 4 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', 'description': 'Incoming invoice from your service providers', 'display_name': 'Purchase Invoice', 'doc_name': 'Payable Voucher', 'doc_type': 'Forms', - 'docstatus': 0, 'doctype': 'Module Def Item', 'fields': 'voucher_date\ncredit_to\nbill_no\ngrand_total\noutstanding_amount', - 'hide': None, - 'icon': None, - 'idx': 5, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01014', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 5 }, + + # Module Def Item + { + 'display_name': 'Loan', + 'doc_name': 'Loan', + 'doc_type': 'Forms', + 'doctype': 'Module Def Item', + 'idx': 6 + }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', 'description': 'Profit & Loss and Balance Sheet builder', 'display_name': 'Financial Statements', 'doc_name': 'Financial Statements', 'doc_type': 'Pages', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, 'icon': 'table.gif', - 'idx': 6, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01015', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 7 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', 'description': 'Update your actual clearance dates and find out if bank ledger tallies with your bank statement.', 'display_name': 'Bank Reconciliation', 'doc_name': 'Bank Reconciliation', 'doc_type': 'Single DocType', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 7, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01016', - 'owner': 'saumil@webnotestech.com', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 8 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'TDS Payment', 'doc_name': 'TDS Payment', 'doc_type': 'Setup Forms', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 8, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01017', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 9 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'TDS Return Acknowledgement', 'doc_name': 'TDS Return Acknowledgement', 'doc_type': 'Setup Forms', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 9, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01018', - 'owner': 'nabin@webnotestech.com', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 10 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Form 16A', 'doc_name': 'Form 16A', 'doc_type': 'Setup Forms', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 10, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01019', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 11 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-10-25 17:25:22', 'description': 'Account closing entry (Profit Booking) on any date', 'display_name': 'Period Closing Voucher', 'doc_name': 'Period Closing Voucher', 'doc_type': 'Setup Forms', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 11, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01188', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 12 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2011-05-24 14:47:53', 'description': 'You can export balance of selected ledgers within a specific period', 'display_name': 'Ledger Balance Export', 'doc_name': 'Ledger Balance Export', 'doc_type': 'Single DocType', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 12, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01283', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 13 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'General Ledger', 'doc_name': 'GL Entry', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 13, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01021', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 14 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Accounts Receivable', 'doc_name': 'GL Entry', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 14, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01022', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 15 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Accounts Payable', 'doc_name': 'GL Entry', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 15, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01023', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 16 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Bank Reconciliation Statement', 'doc_name': 'Journal Voucher Detail', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 16, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01024', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 17 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Trial Balance', 'doc_name': 'Account', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 17, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01025', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 18 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Sales Register', 'doc_name': 'Receivable Voucher', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 18, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01026', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 19 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Purchase Register', 'doc_name': 'Payable Voucher', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 19, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01027', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 20 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Bank Clearance report', 'doc_name': 'Journal Voucher Detail', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 20, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01028', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 21 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Monthly Ledger Summary Report', 'doc_name': 'GL Entry', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 21, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01031', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 22 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Collection Report', 'doc_name': 'Journal Voucher Detail', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 22, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01032', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 23 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Total amout collection for a period - Customerwise', 'doc_name': 'Account', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 23, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01033', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 24 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Payment Report', 'doc_name': 'Journal Voucher Detail', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 24, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01034', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 25 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2011-01-19 17:41:27', - 'description': None, 'display_name': 'Itemwise Sales Register', 'doc_name': 'RV Detail', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 25, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01267', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 26 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Itemwise Purchase Register', 'doc_name': 'PV Detail', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 26, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01035', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 27 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Cost Center wise Expense', 'doc_name': 'GL Entry', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 27, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01036', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 28 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'TDS Return', 'doc_name': 'TDS Payment Detail', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 28, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01038', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 29 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Budget Variance Report', 'doc_name': 'Budget Detail', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 29, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01039', - 'owner': 'jai@webnotestech.com', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 30 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', - 'description': None, 'display_name': 'Payment Receipt Report', 'doc_name': 'GL Entry', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 30, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01040', - 'owner': 'jai@webnotestech.com', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 31 }, + + # Module Def Item { - 'click_function': None, - 'creation': '2010-09-25 10:50:37', 'description': 'Track total commission given to your Business Associate', 'display_name': 'Business Associate Commission Report', 'doc_name': 'Receivable Voucher', 'doc_type': 'Reports', - 'docstatus': 0, 'doctype': 'Module Def Item', - 'fields': None, - 'hide': None, - 'icon': None, - 'idx': 31, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDI01041', - 'owner': 'saumil@webnotestech.com', - 'parent': 'Accounts', - 'parentfield': 'items', - 'parenttype': 'Module Def' + 'idx': 32 }, + + # Module Def Role { - 'creation': '2010-09-25 10:50:37', - 'docstatus': 0, 'doctype': 'Module Def Role', 'idx': 1, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDR00302', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'roles', - 'parenttype': 'Module Def', 'role': 'Accounts Manager' }, + + # Module Def Role { - 'creation': '2010-09-25 10:50:37', - 'docstatus': 0, 'doctype': 'Module Def Role', 'idx': 2, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDR00303', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'roles', - 'parenttype': 'Module Def', 'role': 'Accounts User' }, + + # Module Def Role { - 'creation': '2010-09-25 10:50:37', - 'docstatus': 0, 'doctype': 'Module Def Role', 'idx': 3, - 'modified': '2011-07-01 09:36:04', - 'modified_by': 'Administrator', - 'name': 'MDR00304', - 'owner': 'Administrator', - 'parent': 'Accounts', - 'parentfield': 'roles', - 'parenttype': 'Module Def', 'role': 'Administrator' } -] +] \ No newline at end of file diff --git a/accounts/doctype/loan/loan.txt b/accounts/doctype/loan/loan.txt index 90c0db2077..df936129fe 100644 --- a/accounts/doctype/loan/loan.txt +++ b/accounts/doctype/loan/loan.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-07-12 10:50:19', + 'creation': '2011-07-15 10:35:26', 'docstatus': 0, - 'modified': '2011-07-14 11:22:32', + 'modified': '2011-07-15 10:35:26', 'modified_by': 'Administrator', 'owner': 'Administrator' }, diff --git a/accounts/doctype/loan_installment/loan_installment.txt b/accounts/doctype/loan_installment/loan_installment.txt index dd65939869..bdb8bb3570 100644 --- a/accounts/doctype/loan_installment/loan_installment.txt +++ b/accounts/doctype/loan_installment/loan_installment.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-07-12 10:53:58', + 'creation': '2011-07-15 10:36:42', 'docstatus': 0, - 'modified': '2011-07-12 10:53:58', + 'modified': '2011-07-15 10:36:42', 'modified_by': 'Administrator', 'owner': 'Administrator' }, diff --git a/hr/doctype/salary_slip/salary_slip.txt b/hr/doctype/salary_slip/salary_slip.txt index d2ce4e3fb3..2886e424b5 100644 --- a/hr/doctype/salary_slip/salary_slip.txt +++ b/hr/doctype/salary_slip/salary_slip.txt @@ -5,7 +5,7 @@ { 'creation': '2010-08-08 17:09:20', 'docstatus': 0, - 'modified': '2011-07-13 17:38:55', + 'modified': '2011-07-14 16:07:20', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -51,38 +51,50 @@ # DocPerm { - 'amend': 1, - 'cancel': 1, - 'create': 1, + 'amend': 0, + 'cancel': 0, + 'create': 0, 'doctype': 'DocPerm', - 'idx': 1, + 'match': 'owner', 'permlevel': 0, - 'role': 'System Manager', - 'submit': 1, - 'write': 1 + 'role': 'Employee', + 'submit': 0, + 'write': 0 }, # DocPerm { 'amend': 0, 'cancel': 0, - 'create': 1, + 'create': 0, 'doctype': 'DocPerm', - 'idx': 2, + 'match': 'owner', 'permlevel': 0, - 'role': 'HR User', - 'submit': 1, - 'write': 1 + 'role': 'Employee', + 'submit': 0, + 'write': 0 }, # DocPerm { 'amend': 0, - 'cancel': 0, 'create': 1, 'doctype': 'DocPerm', 'idx': 3, 'permlevel': 0, + 'role': 'HR User', + 'submit': 1, + 'write': 1 + }, + + # DocPerm + { + 'amend': 1, + 'cancel': 1, + 'create': 1, + 'doctype': 'DocPerm', + 'idx': 4, + 'permlevel': 0, 'role': 'HR Manager', 'submit': 1, 'write': 1 @@ -90,28 +102,18 @@ # DocPerm { - 'amend': 0, - 'cancel': 0, - 'create': 0, 'doctype': 'DocPerm', - 'idx': 4, + 'idx': 5, 'permlevel': 1, - 'role': 'HR User', - 'submit': 0, - 'write': 0 + 'role': 'HR User' }, # DocPerm { - 'amend': 0, - 'cancel': 0, - 'create': 0, 'doctype': 'DocPerm', - 'idx': 5, + 'idx': 6, 'permlevel': 1, - 'role': 'HR Manager', - 'submit': 0, - 'write': 0 + 'role': 'HR Manager' }, # DocField From 5e1d504483c756ebc6fbed09df76590c5e2e5e83 Mon Sep 17 00:00:00 2001 From: Brahma K Date: Fri, 15 Jul 2011 19:35:24 +0530 Subject: [PATCH 06/12] Implemented the Auto JV posting upon Loan Installment posting --- .../journal_voucher/journal_voucher.txt | 37 +++------------- accounts/doctype/loan/loan.js | 15 ++++--- accounts/doctype/loan/loan.py | 40 ++++++++++++++++- accounts/doctype/loan/loan.txt | 29 ++++++++----- .../loan_installment/loan_installment.txt | 43 +++++++++++++------ 5 files changed, 103 insertions(+), 61 deletions(-) diff --git a/accounts/doctype/journal_voucher/journal_voucher.txt b/accounts/doctype/journal_voucher/journal_voucher.txt index 43ec61437a..c40be8f728 100644 --- a/accounts/doctype/journal_voucher/journal_voucher.txt +++ b/accounts/doctype/journal_voucher/journal_voucher.txt @@ -5,23 +5,14 @@ { 'creation': '2010-08-08 17:09:06', 'docstatus': 0, - 'modified': '2011-04-06 14:41:47', + 'modified': '2011-07-15 14:37:05', 'modified_by': 'Administrator', 'owner': 'Administrator' }, - # These values are common for all DocField - { - 'doctype': 'DocField', - 'name': '__common__', - 'parent': 'Journal Voucher', - 'parentfield': 'fields', - 'parenttype': 'DocType' - }, - # These values are common for all DocType { - '_last_update': '1305714002', + '_last_update': '1310533805', 'colour': 'White:FFF', 'doctype': 'DocType', 'module': 'Accounts', @@ -32,15 +23,15 @@ 'show_in_menu': 0, 'subject': ' ', 'tag_fields': 'voucher_type', - 'version': 307 + 'version': 308 }, - # These values are common for all DocFormat + # These values are common for all DocField { - 'doctype': 'DocFormat', + 'doctype': 'DocField', 'name': '__common__', 'parent': 'Journal Voucher', - 'parentfield': 'formats', + 'parentfield': 'fields', 'parenttype': 'DocType' }, @@ -112,20 +103,6 @@ 'write': 0 }, - # DocFormat - { - 'doctype': 'DocFormat', - 'format': 'Payment Receipt Voucher', - 'idx': 1 - }, - - # DocFormat - { - 'doctype': 'DocFormat', - 'format': 'Cheque Printing Format', - 'idx': 2 - }, - # DocField { 'doctype': 'DocField', @@ -167,7 +144,7 @@ 'label': 'Voucher Type', 'oldfieldname': 'voucher_type', 'oldfieldtype': 'Select', - 'options': '\nJournal Entry\nBank Voucher\nCash Voucher\nCredit Card Voucher\nDebit Note\nCredit Note\nContra Voucher\nExcise Voucher\nWrite Off Voucher', + 'options': '\nJournal Entry\nBank Voucher\nCash Voucher\nCredit Card Voucher\nDebit Note\nCredit Note\nContra Voucher\nExcise Voucher\nWrite Off Voucher\nLoan Receipt', 'permlevel': 0, 'print_hide': 0, 'search_index': 1 diff --git a/accounts/doctype/loan/loan.js b/accounts/doctype/loan/loan.js index d4e063d7be..a26df3f73f 100644 --- a/accounts/doctype/loan/loan.js +++ b/accounts/doctype/loan/loan.js @@ -13,9 +13,10 @@ $.extend(cur_frm.cscript, { }, hide_show_buttons: function(doc) { if(doc.docstatus==0) { - hide_field('Installment Reciept'); show_field('Generate'); + hide_field('Installment Reciept');// show_field('Generate'); } else if (doc.docstatus==1) { - show_field('Installment Reciept'); hide_field('Generate'); +// show_field('Installment Reciept'); +hide_field('Generate'); } }, clear_installments: function(doc) { @@ -30,17 +31,19 @@ $.extend(cur_frm.cscript, { width: 500, title: 'Add a new payment installment', fields: [ - {fieldtype:'Data', label:'Check Number', fieldname:'check_number', reqd:1}, - {fieldtype:'Date', label:'Check Date', fieldname:'check_date', reqd:1}, + {fieldtype:'Data', label:'Cheque Number', fieldname:'cheque_number', reqd:1}, + {fieldtype:'Date', label:'Cheque Date', fieldname:'cheque_date', reqd:1}, + {fieldtype:'Link', label:'Bank Account', fieldname:'bank_account', reqd:1, options:'Account'}, {fieldtype:'Button', label:'Update',fieldname:'update'} ] }) d.show(); d.fields_dict.update.input.onclick = function() { var data = d.get_values(); + if(data) { - $c_obj() + $c_obj(make_doclist(dt,dn),'loan_post',data,function(){cur_frm.refresh(); d.hide();}); } } } -}) \ No newline at end of file +}) diff --git a/accounts/doctype/loan/loan.py b/accounts/doctype/loan/loan.py index 4a6427dffa..adddbc57c7 100644 --- a/accounts/doctype/loan/loan.py +++ b/accounts/doctype/loan/loan.py @@ -1,5 +1,9 @@ import webnotes -from webnotes.model.doc import make_autoname, Document +from webnotes.model.doc import make_autoname, Document, addchild +from webnotes import msgprint +from webnotes.utils import get_defaults +import json +sql = webnotes.conn.sql class DocType: def __init__(self, doc, doclist): @@ -10,4 +14,38 @@ class DocType: Create Loan Id using naming_series pattern """ self.doc.name = make_autoname(self.doc.naming_series+ '.#####') + + def loan_post(self, args): + """ + Posts the loan receipt into Journal Voucher + """ + data = json.loads(args) + + jv = Document('Journal Voucher') + jv.voucher_type = 'Loan Receipt' + jv.naming_series = 'JV' + jv.voucher_date = data.get('cheque_date') + jv.posting_date = data.get('cheque_date') + jv.cheque_no = data.get('cheque_number') + jv.cheque_date = data.get('cheque_date') + jv.fiscal_year = get_defaults()['fiscal_year'] # To be modified to take care + jv.company = get_defaults()['company'] + + jv.save(1) + + next_inst = sql("select amount,name from `tabLoan Installment` where parent=%s and ifnull(cheque_number,'')='' order by due_date limit 1",self.doc.name) + jc = addchild(jv,'entries','Journal Voucher Detail',0) + jc.account = data.get('bank_account') + jc.debit = next_inst[0][0] + jc.save() + + jc = addchild(jv,'entries','Journal Voucher Detail',0) + jc.account = self.doc.account + jc.credit = next_inst[0][0] + jc.save() + + sql("update `tabLoan Installment` set cheque_number=%s, cheque_date=%s, jv_number=%s where name=%s",(data.get('cheque_number'),data.get('cheque_date'),jv.name,next_inst[0][1])) + + self.doclist = [Document(d.doctype, d.name) for d in self.doclist] + diff --git a/accounts/doctype/loan/loan.txt b/accounts/doctype/loan/loan.txt index df936129fe..3be82fbedc 100644 --- a/accounts/doctype/loan/loan.txt +++ b/accounts/doctype/loan/loan.txt @@ -5,21 +5,21 @@ { 'creation': '2011-07-15 10:35:26', 'docstatus': 0, - 'modified': '2011-07-15 10:35:26', + 'modified': '2011-07-15 15:51:10', 'modified_by': 'Administrator', 'owner': 'Administrator' }, # These values are common for all DocType { - '_last_update': '1310622631', + '_last_update': '1310706327', 'colour': 'White:FFF', 'doctype': 'DocType', 'module': 'Accounts', 'name': '__common__', 'section_style': 'Simple', 'show_in_menu': 0, - 'version': 11 + 'version': 12 }, # These values are common for all DocField @@ -34,19 +34,13 @@ # These values are common for all DocPerm { - 'cancel': 1, - 'create': 1, 'doctype': 'DocPerm', - 'idx': 1, 'name': '__common__', 'parent': 'Loan', 'parentfield': 'permissions', 'parenttype': 'DocType', - 'permlevel': 0, 'read': 1, - 'role': 'Accounts User', - 'submit': 1, - 'write': 1 + 'role': 'Accounts User' }, # DocType, Loan @@ -57,7 +51,20 @@ # DocPerm { - 'doctype': 'DocPerm' + 'cancel': 1, + 'create': 1, + 'doctype': 'DocPerm', + 'idx': 1, + 'permlevel': 0, + 'submit': 1, + 'write': 1 + }, + + # DocPerm + { + 'doctype': 'DocPerm', + 'idx': 2, + 'permlevel': 1 }, # DocField diff --git a/accounts/doctype/loan_installment/loan_installment.txt b/accounts/doctype/loan_installment/loan_installment.txt index bdb8bb3570..f729e3434b 100644 --- a/accounts/doctype/loan_installment/loan_installment.txt +++ b/accounts/doctype/loan_installment/loan_installment.txt @@ -5,7 +5,7 @@ { 'creation': '2011-07-15 10:36:42', 'docstatus': 0, - 'modified': '2011-07-15 10:36:42', + 'modified': '2011-07-15 15:48:34', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -19,7 +19,7 @@ 'name': '__common__', 'section_style': 'Simple', 'show_in_menu': 0, - 'version': 1 + 'version': 4 }, # These values are common for all DocField @@ -28,8 +28,7 @@ 'name': '__common__', 'parent': 'Loan Installment', 'parentfield': 'fields', - 'parenttype': 'DocType', - 'permlevel': 0 + 'parenttype': 'DocType' }, # DocType, Loan Installment @@ -44,7 +43,8 @@ 'fieldname': 'amount', 'fieldtype': 'Currency', 'idx': 1, - 'label': 'Amount' + 'label': 'Amount', + 'permlevel': 0 }, # DocField @@ -53,25 +53,28 @@ 'fieldname': 'due_date', 'fieldtype': 'Date', 'idx': 2, - 'label': 'Due Date' + 'label': 'Due Date', + 'permlevel': 0 }, # DocField { 'doctype': 'DocField', - 'fieldname': 'check_number', - 'fieldtype': 'Int', + 'fieldname': 'cheque_number', + 'fieldtype': 'Data', 'idx': 3, - 'label': 'Check Number' + 'label': 'Cheque Number', + 'permlevel': 0 }, # DocField { 'doctype': 'DocField', - 'fieldname': 'check_date', + 'fieldname': 'cheque_date', 'fieldtype': 'Date', 'idx': 4, - 'label': 'Check Date' + 'label': 'Cheque Date', + 'permlevel': 0 }, # DocField @@ -80,7 +83,8 @@ 'fieldname': 'deposit_date', 'fieldtype': 'Date', 'idx': 5, - 'label': 'Deposit Date' + 'label': 'Deposit Date', + 'permlevel': 0 }, # DocField @@ -89,6 +93,19 @@ 'fieldname': 'realized_date', 'fieldtype': 'Date', 'idx': 6, - 'label': 'Realized Date' + 'label': 'Realized Date', + 'permlevel': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'jv_number', + 'fieldtype': 'Link', + 'hidden': 0, + 'idx': 7, + 'label': 'JV Number', + 'options': 'Journal Voucher', + 'permlevel': 1 } ] \ No newline at end of file From 62a7b3cd4a3bb7d7b5f8e64c647f73da8b92b5c7 Mon Sep 17 00:00:00 2001 From: Brahma K Date: Thu, 21 Jul 2011 17:51:13 +0530 Subject: [PATCH 07/12] loan file modification --- accounts/doctype/gl_control/gl_control.py | 81 ++++++++++++----------- accounts/doctype/loan/loan.js | 17 +++-- accounts/doctype/loan/loan.py | 49 +++++++------- accounts/doctype/loan/loan.txt | 39 ++++++++--- 4 files changed, 105 insertions(+), 81 deletions(-) diff --git a/accounts/doctype/gl_control/gl_control.py b/accounts/doctype/gl_control/gl_control.py index 5ec8ecd22c..a346b65a57 100644 --- a/accounts/doctype/gl_control/gl_control.py +++ b/accounts/doctype/gl_control/gl_control.py @@ -12,7 +12,7 @@ sql = webnotes.conn.sql get_value = webnotes.conn.get_value in_transaction = webnotes.conn.in_transaction convert_to_lists = webnotes.conn.convert_to_lists - + # ----------------------------------------------------------------------------------------- from utilities.transaction_base import TransactionBase @@ -30,11 +30,11 @@ class DocType: #for r in ret: # inc = get_value('Account','Income - '+r[1], 'balance') # exp = get_value('Account','Expenses - '+r[1], 'balance') - # pl[r[0]] = flt(flt(inc) - flt(exp)) + # pl[r[0]] = flt(flt(inc) - flt(exp)) return {'cl':[r[0] for r in ret]}#, 'pl':pl} - - def get_company_currency(self,arg=''): - dcc = TransactionBase().get_company_currency(arg) + + def get_company_currency(self,arg=''): + dcc = TransactionBase().get_company_currency(arg) return dcc # Get current balance @@ -91,7 +91,7 @@ class DocType: fy = get_defaults()['fiscal_year'] parent, parent_acc_name, company, type = arg.split(',') - + # get children account details if type=='Account': @@ -103,7 +103,7 @@ class DocType: # remove Decimals for c in cl: c['balance'] = flt(c['balance']) - + # get children cost center details elif type=='Cost Center': if parent=='Root Node': @@ -111,7 +111,7 @@ class DocType: else: cl = sql("select name,group_or_ledger,cost_center_name from `tabCost Center` where ifnull(parent_cost_center, '')=%s and docstatus != 2 and company_name=%s order by name asc",(parent,company),as_dict=1) return {'parent':parent, 'parent_acc_name':parent_acc_name, 'cl':cl} - + # Add a new account # ----------------- def add_ac(self,arg): @@ -119,14 +119,14 @@ class DocType: ac = Document('Account') for d in arg.keys(): ac.fields[d] = arg[d] - ac.old_parent = '' + ac.old_parent = '' ac_obj = get_obj(doc=ac) ac_obj.validate() ac_obj.doc.save(1) ac_obj.on_update() return ac_obj.doc.name - + # Add a new cost center #---------------------- def add_cc(self,arg): @@ -138,33 +138,33 @@ class DocType: # map company abbr other_info = sql("select company_abbr from `tabCost Center` where name='%s'"%arg['parent_cost_center']) cc.company_abbr = other_info and other_info[0][0] or arg['company_abbr'] - + cc_obj = get_obj(doc=cc) cc_obj.validate() cc_obj.doc.save(1) cc_obj.on_update() return cc_obj.doc.name - - + + # Get field values from the voucher #------------------------------------------ def get_val(self, src, d, parent=None): - if not src: + if not src: return None if src.startswith('parent:'): return parent.fields[src.split(':')[1]] elif src.startswith('value:'): return eval(src.split(':')[1]) elif src: - return d.fields.get(src) - + return d.fields.get(src) + def check_if_in_list(self, le): for e in self.entries: if e.account == le.account and (cstr(e.against_voucher)==cstr(le.against_voucher)) and (cstr(e.against_voucher_type)==cstr(le.against_voucher_type)) and (cstr(e.cost_center)==cstr(le.cost_center)): return [e] return 0 - + # Make a dictionary(le) for every gl entry and append to a list(self.entries) #---------------------------------------------------------------------------- def make_single_entry(self,parent,d,le_map,cancel, merge_entries): @@ -176,12 +176,12 @@ class DocType: is_expense_acct = sql("select name from tabAccount where is_pl_account='Yes' and debit_or_credit='Debit' and name=%s",self.get_val(le_map['account'], d, parent)) if is_expense_acct and self.get_val(le_map['cost_center'], d, parent): get_obj('Budget Control').check_budget([self.get_val(le_map[k], d, parent) for k in flist if k in ['account','cost_center','debit','credit','posting_date','fiscal_year','company']],cancel) - + # Create new GL entry object and map values le = Document('GL Entry') for k in flist: le.fields[k] = self.get_val(le_map[k], d, parent) - + # if there is already an entry in this account then just add it to that entry same_head = self.check_if_in_list(le) if same_head and merge_entries: @@ -190,8 +190,8 @@ class DocType: same_head.credit = flt(same_head.credit) + flt(le.credit) else: self.entries.append(le) - - # Save GL Entries + + # Save GL Entries # ---------------- def save_entries(self, cancel, adv_adj, update_outstanding): for le in self.entries: @@ -199,7 +199,7 @@ class DocType: if cancel or flt(le.debit) < 0 or flt(le.credit) < 0: tmp=le.debit le.debit, le.credit = abs(flt(le.credit)), abs(flt(tmp)) - + le_obj = get_obj(doc=le) # validate except on_cancel @@ -213,11 +213,11 @@ class DocType: # update total debit / credit self.td += flt(le.debit) self.tc += flt(le.credit) - + # Make Multiple Entries # --------------------- def make_gl_entries(self, doc, doclist, cancel=0, adv_adj = 0, use_mapper='', merge_entries = 1, update_outstanding='Yes'): - # get entries + # get entries le_map_list = sql("select * from `tabGL Mapper Detail` where parent = %s", use_mapper or doc.doctype, as_dict=1) self.td, self.tc = 0.0, 0.0 for le_map in le_map_list: @@ -228,10 +228,10 @@ class DocType: self.make_single_entry(doc,d,le_map,cancel, merge_entries) else: self.make_single_entry(None,doc,le_map,cancel, merge_entries) - + # save entries self.save_entries(cancel, adv_adj, update_outstanding) - + # check total debit / credit # Due to old wrong entries (total debit != total credit) some voucher could be cancelled if abs(self.td - self.tc) > 0.001 and not cancel: @@ -289,7 +289,7 @@ class DocType: add.allocate_amount = 0 if table_name == 'Advance Allocation Detail': add.tds_amount = flt(d[4]) - + # Clear rows which is not adjusted #------------------------------------- def clear_advances(self, obj,table_name,table_field_name): @@ -297,7 +297,7 @@ class DocType: if not flt(d.allocated_amount): sql("update `tab%s` set parent = '' where name = '%s' and parent = '%s'" % (table_name, d.name, d.parent)) d.parent = '' - + # Update aginst document in journal voucher #------------------------------------------ def update_against_document_in_jv(self, obj, table_field_name, against_document_no, against_document_doctype, account_head, dr_or_cr,doctype): @@ -310,7 +310,7 @@ class DocType: # update ref in JV Detail sql("update `tabJournal Voucher Detail` set %s = '%s' where name = '%s'" % (doctype=='Payable Voucher' and 'against_voucher' or 'against_invoice', cstr(against_document_no), d.jv_detail_no)) - + # re-submit JV jv_obj = get_obj('Journal Voucher', d.journal_voucher, with_children =1) get_obj(dt='GL Control').make_gl_entries(jv_obj.doc, jv_obj.doclist, cancel = 0, adv_adj =1) @@ -319,22 +319,22 @@ class DocType: # cancel JV jv_obj = get_obj('Journal Voucher', d.journal_voucher, with_children=1) get_obj(dt='GL Control').make_gl_entries(jv_obj.doc, jv_obj.doclist, cancel =1, adv_adj = 1) - + # add extra entries self.add_extra_entry(jv_obj, d.journal_voucher, d.jv_detail_no, flt(d.allocated_amount), account_head, doctype, dr_or_cr, against_document_no) - + # re-submit JV jv_obj = get_obj('Journal Voucher', d.journal_voucher, with_children =1) get_obj(dt='GL Control').make_gl_entries(jv_obj.doc, jv_obj.doclist, cancel = 0, adv_adj = 1) else: msgprint("Allocation amount cannot be greater than advance amount") raise Exception - + # Add extra row in jv detail for unadjusted amount #-------------------------------------------------- def add_extra_entry(self,jv_obj,jv,jv_detail_no, allocate, account_head, doctype, dr_or_cr, against_document_no): # get old entry details - + jvd = sql("select %s, cost_center, balance, against_account from `tabJournal Voucher Detail` where name = '%s'" % (dr_or_cr,jv_detail_no)) advance = jvd and flt(jvd[0][0]) or 0 balance = flt(advance) - flt(allocate) @@ -351,7 +351,7 @@ class DocType: add.against_account = cstr(jvd[0][3]) add.is_advance = 'Yes' add.save(1) - + # check if advance entries are still valid # ---------------------------------------- def validate_jv_entry(self, d, account_head, dr_or_cr): @@ -406,22 +406,23 @@ In Account := %s User := %s has Repaired Outstanding Amount For %s : %s and foll """ vl = sql(""" select voucher_type, voucher_no, account, sum(debit) as sum_debit, sum(credit) as sum_credit - from `tabGL Entry` + from `tabGL Entry` where is_cancelled='Yes' and creation > %s group by voucher_type, voucher_no, account """, after_date, as_dict=1) - + ac_list = [] for v in vl: if v['sum_debit'] != 0 or v['sum_credit'] != 0: ac_list.append(v['account']) - - fy_list = sql("""select name from `tabFiscal Year` - where (%s between year_start_date and date_sub(date_add(year_start_date,interval 1 year), interval 1 day)) - or year_start_date > %s + + fy_list = sql("""select name from `tabFiscal Year` + where (%s between year_start_date and date_sub(date_add(year_start_date,interval 1 year), interval 1 day)) + or year_start_date > %s order by year_start_date ASC""", (after_date, after_date)) for fy in fy_list: fy_obj = get_obj('Fiscal Year', fy[0]) for a in set(ac_list): fy_obj.repost(a) + diff --git a/accounts/doctype/loan/loan.js b/accounts/doctype/loan/loan.js index a26df3f73f..1851a84866 100644 --- a/accounts/doctype/loan/loan.js +++ b/accounts/doctype/loan/loan.js @@ -8,19 +8,24 @@ $.extend(cur_frm.cscript, { } cur_frm.refresh(); }, +/* submit:function(doc){ + data=doc.get_values(); + + data['']= + $c_obj(make_doclist(dt,dn),'loan_post',data,function(){}); + },*/ refresh: function(doc) { cur_frm.cscript.hide_show_buttons(doc); }, hide_show_buttons: function(doc) { if(doc.docstatus==0) { - hide_field('Installment Reciept');// show_field('Generate'); + hide_field('Installment Reciept'); show_field('Generate'); } else if (doc.docstatus==1) { -// show_field('Installment Reciept'); -hide_field('Generate'); + show_field('Installment Reciept');hide_field('Generate'); } }, clear_installments: function(doc) { - $.each(getchildren('Loan Installment', doc.name, 'installments', 'Loan'), + $.each(getchildren('Loan Installment', doc.name, 'installments', 'Loan'), function(i, d) { LocalDB.delete_doc('Loan Installment', d.name); } @@ -40,9 +45,9 @@ hide_field('Generate'); d.show(); d.fields_dict.update.input.onclick = function() { var data = d.get_values(); - + if(data) { - $c_obj(make_doclist(dt,dn),'loan_post',data,function(){cur_frm.refresh(); d.hide();}); + $c_obj(make_doclist(dt,dn),'loan_installment_post',data,function(){cur_frm.refresh(); d.hide();}); } } } diff --git a/accounts/doctype/loan/loan.py b/accounts/doctype/loan/loan.py index adddbc57c7..9f0bcb53a0 100644 --- a/accounts/doctype/loan/loan.py +++ b/accounts/doctype/loan/loan.py @@ -3,49 +3,46 @@ from webnotes.model.doc import make_autoname, Document, addchild from webnotes import msgprint from webnotes.utils import get_defaults import json +from accounts.utils import post_jv sql = webnotes.conn.sql class DocType: def __init__(self, doc, doclist): self.doc, self.doclist = doc, doclist - + def autoname(self): """ Create Loan Id using naming_series pattern """ self.doc.name = make_autoname(self.doc.naming_series+ '.#####') - def loan_post(self, args): + def loan_post(self): + data['voucher_type']='Loan Issue' + data['naming_series']='JV' + data['fiscal_year'] = get_defaults()['fiscal_year'] # To be modified to take care + data['company'] = get_defaults()['company'] + data['debit_account'] = self.doc['receivable_account'] + data['credit_account'] = self.doc['account'] + data['amount'] = self.doc.loan_amount + jv_name=post_jv(data) + + def loan_installment_post(self, args): """ Posts the loan receipt into Journal Voucher """ - data = json.loads(args) - - jv = Document('Journal Voucher') - jv.voucher_type = 'Loan Receipt' - jv.naming_series = 'JV' - jv.voucher_date = data.get('cheque_date') - jv.posting_date = data.get('cheque_date') - jv.cheque_no = data.get('cheque_number') - jv.cheque_date = data.get('cheque_date') - jv.fiscal_year = get_defaults()['fiscal_year'] # To be modified to take care - jv.company = get_defaults()['company'] - - jv.save(1) - next_inst = sql("select amount,name from `tabLoan Installment` where parent=%s and ifnull(cheque_number,'')='' order by due_date limit 1",self.doc.name) - - jc = addchild(jv,'entries','Journal Voucher Detail',0) - jc.account = data.get('bank_account') - jc.debit = next_inst[0][0] - jc.save() - jc = addchild(jv,'entries','Journal Voucher Detail',0) - jc.account = self.doc.account - jc.credit = next_inst[0][0] - jc.save() + data = json.loads(args) + data['voucher_type']='Loan Receipt' + data['naming_series']='JV' + data['amount']=next_inst[0][0] + data['debit_account']=data.get('bank_account') + data['credit_account']=self.doc.account + data['fiscal_year']=get_defaults()['fiscal_year'] + data['company']=get_defaults()['company'] + jv_name=post_jv(data) - sql("update `tabLoan Installment` set cheque_number=%s, cheque_date=%s, jv_number=%s where name=%s",(data.get('cheque_number'),data.get('cheque_date'),jv.name,next_inst[0][1])) + sql("update `tabLoan Installment` set cheque_number=%s, cheque_date=%s, jv_number=%s where name=%s",(data.get('cheque_number'),data.get('cheque_date'),jv_name,next_inst[0][1])) self.doclist = [Document(d.doctype, d.name) for d in self.doclist] diff --git a/accounts/doctype/loan/loan.txt b/accounts/doctype/loan/loan.txt index 3be82fbedc..001e1d3845 100644 --- a/accounts/doctype/loan/loan.txt +++ b/accounts/doctype/loan/loan.txt @@ -5,21 +5,21 @@ { 'creation': '2011-07-15 10:35:26', 'docstatus': 0, - 'modified': '2011-07-15 15:51:10', + 'modified': '2011-07-18 12:12:19', 'modified_by': 'Administrator', 'owner': 'Administrator' }, # These values are common for all DocType { - '_last_update': '1310706327', + '_last_update': '1310963215', 'colour': 'White:FFF', 'doctype': 'DocType', 'module': 'Accounts', 'name': '__common__', 'section_style': 'Simple', 'show_in_menu': 0, - 'version': 12 + 'version': 15 }, # These values are common for all DocField @@ -89,12 +89,33 @@ 'reqd': 1 }, + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'receivable_account', + 'fieldtype': 'Link', + 'idx': 3, + 'label': 'Receivable Account', + 'options': 'Account' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'invoice', + 'fieldtype': 'Link', + 'idx': 4, + 'label': 'Invoice', + 'options': 'Receivable Voucher', + 'reqd': 1 + }, + # DocField { 'doctype': 'DocField', 'fieldname': 'loan_amount', 'fieldtype': 'Currency', - 'idx': 3, + 'idx': 5, 'label': 'Loan Amount', 'reqd': 1 }, @@ -104,7 +125,7 @@ 'doctype': 'DocField', 'fieldname': 'start_date', 'fieldtype': 'Date', - 'idx': 4, + 'idx': 6, 'label': 'Start Date', 'reqd': 1 }, @@ -114,7 +135,7 @@ 'doctype': 'DocField', 'fieldname': 'no_of_installments', 'fieldtype': 'Int', - 'idx': 5, + 'idx': 7, 'label': 'No of Installments', 'reqd': 1 }, @@ -124,7 +145,7 @@ 'colour': 'White:FFF', 'doctype': 'DocField', 'fieldtype': 'Button', - 'idx': 6, + 'idx': 8, 'label': 'Generate', 'trigger': 'Client' }, @@ -134,7 +155,7 @@ 'doctype': 'DocField', 'fieldname': 'installments', 'fieldtype': 'Table', - 'idx': 7, + 'idx': 9, 'label': 'Installments', 'options': 'Loan Installment' }, @@ -145,7 +166,7 @@ 'colour': 'White:FFF', 'doctype': 'DocField', 'fieldtype': 'Button', - 'idx': 8, + 'idx': 10, 'label': 'Installment Reciept' } ] \ No newline at end of file From 7cd48f1d5984aaf1f3a6dcfb7c2e290aa88c6573 Mon Sep 17 00:00:00 2001 From: Brahma K Date: Thu, 21 Jul 2011 17:57:32 +0530 Subject: [PATCH 08/12] payable report in a single query --- .../accounts_payable/accounts_payable.sql | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/accounts/search_criteria/accounts_payable/accounts_payable.sql b/accounts/search_criteria/accounts_payable/accounts_payable.sql index d2dba06391..520535f51f 100644 --- a/accounts/search_criteria/accounts_payable/accounts_payable.sql +++ b/accounts/search_criteria/accounts_payable/accounts_payable.sql @@ -1,11 +1,26 @@ -SELECT DISTINCT `tabGL Entry`.`Aging_date`,`tabGL Entry`.`transaction_date`,`tabGL Entry`.`account`, `tabGL Entry`.`against_voucher_type`, `tabGL Entry`.`against_voucher`,`tabGL Entry`.`voucher_type`,`tabGL Entry`.`voucher_no`, `tabGL Entry`.remarks -FROM `tabGL Entry`,`tabAccount` -WHERE `tabGL Entry`.`posting_date`>= '%(posting_date)s' - AND `tabGL Entry`.`posting_date`<= '%(posting_date1)s' - AND `tabGL Entry`.`account` LIKE '%(account)s%%' - AND `tabGL Entry`.`company` LIKE '%(company)s%%' - AND ((ifnull(`tabGL Entry`.voucher_type,'') = 'Payable Voucher' and `tabGL Entry`.credit>0) OR `tabGL Entry`.voucher_type = 'Journal Voucher') - AND `tabGL Entry`.`is_cancelled` = 'No' - AND `tabAccount`.master_type = 'Supplier' - AND `tabAccount`.name = `tabGL Entry`.account - ORDER BY `tabGL Entry`.`posting_date` +SELECT * +FROM ( + +SELECT a.posting_date, a.voucher_no, a.account, a.credit AS inv_amount, ifnull( a.credit, 0 ) - ifnull( b.debit, 0 ) AS outstanding +FROM ( + +SELECT gl . * +FROM `tabGL Entry` gl, `tabAccount` acc +WHERE gl.account = acc.name +AND acc.master_type = 'Supplier' +AND ifnull( gl.is_cancelled, 'No' ) = 'No' +AND gl.credit >0 +AND gl.posting_date <= current_date +)a +LEFT JOIN ( + +SELECT against_voucher, account, sum( debit ) AS debit +FROM `tabGL Entry` +WHERE ifnull( is_cancelled, 'No' ) = 'No' +AND posting_date <= current_date +GROUP BY against_voucher, account +)b ON a.voucher_no = b.against_voucher +AND a.account = b.account +)c +WHERE outstanding !=0 +ORDER BY posting_date, voucher_no \ No newline at end of file From f817672bb6cdb200ac1e3037b9e9df54f4ceca84 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 25 Jul 2011 14:09:15 +0530 Subject: [PATCH 09/12] fix to sms control --- utilities/doctype/sms_control/sms_control.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utilities/doctype/sms_control/sms_control.py b/utilities/doctype/sms_control/sms_control.py index c218ab8b81..a1edf83bf3 100644 --- a/utilities/doctype/sms_control/sms_control.py +++ b/utilities/doctype/sms_control/sms_control.py @@ -58,7 +58,7 @@ class DocType: def connect_gateway(self): "login to gateway" from webnotes.utils.webservice import FrameworkServer - fw = FrameworkServer('www.erpnext.com', '/', '__system@webnotestech.com', 'password') + fw = FrameworkServer('www.erpnext.com', '/', '__system@webnotestech.com', 'password', https=1) return fw def get_sender_name(self): From 5de4e4ae1a4a833db79e548e64ab14db1052d3a3 Mon Sep 17 00:00:00 2001 From: Brahma K Date: Mon, 25 Jul 2011 14:53:03 +0530 Subject: [PATCH 10/12] PO Items to receive fixed --- .../pending_po_items_to_receive/pending_po_items_to_receive.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buying/search_criteria/pending_po_items_to_receive/pending_po_items_to_receive.txt b/buying/search_criteria/pending_po_items_to_receive/pending_po_items_to_receive.txt index 062e385825..9708db2835 100644 --- a/buying/search_criteria/pending_po_items_to_receive/pending_po_items_to_receive.txt +++ b/buying/search_criteria/pending_po_items_to_receive/pending_po_items_to_receive.txt @@ -12,7 +12,7 @@ # These values are common for all Search Criteria { - 'add_col': '`tabPO Detail`.qty - ifnull(`tabPO Detail`.received_qty, 0) AS "Pending Quantity To Receive"\n(`tabPO Detail`.qty - ifnull(`tabPO Detail`.received_qty, 0)) * `tabPO Detail`.purchase_rate AS "Pending Amount To Receive\'"', + 'add_col': '`tabPO Detail`.qty - ifnull(`tabPO Detail`.received_qty, 0) AS "Pending Quantity To Receive"\n(`tabPO Detail`.qty - ifnull(`tabPO Detail`.received_qty, 0)) * `tabPO Detail`.purchase_rate AS "Pending Amount To Receive"', 'add_cond': '`tabPO Detail`.qty - ifnull(`tabPO Detail`.received_qty, 0) > 0 \n`tabPurchase Order`.status != "Stopped"', 'columns': 'Purchase Order\x01ID,Purchase Order\x01Supplier,Purchase Order\x01Supplier Name,Purchase Order\x01Status,Purchase Order\x01PO Date,Purchase Order\x01Fiscal Year,PO Detail\x01Indent No,PO Detail\x01Item Code,PO Detail\x01Item Name,PO Detail\x01Description,PO Detail\x01Quantity,PO Detail\x01UOM,PO Detail\x01Received Qty', 'criteria_name': 'Pending PO Items To Receive', From 8a76466d7c11b51f7442f65af676edd7a1360c0b Mon Sep 17 00:00:00 2001 From: Brahma K Date: Tue, 26 Jul 2011 18:43:53 +0530 Subject: [PATCH 11/12] Lease Agreement Used by leasing and loan agents, who needs to followup their receipts against lease agreements Contains leasing related reports with prefix "Lease" Upload Account Transactions Added a file to upload account transactions from csv file, which passes Journal Voucher and submits automatically --- accounts/Module Def/Accounts/Accounts.txt | 18 ++++++++++++++---- .../accounts_receivable/accounts_receivable.js | 6 +++--- .../pending_po_items_to_receive.py | 1 + 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/accounts/Module Def/Accounts/Accounts.txt b/accounts/Module Def/Accounts/Accounts.txt index 708a2c942f..bd3cbbf7fd 100644 --- a/accounts/Module Def/Accounts/Accounts.txt +++ b/accounts/Module Def/Accounts/Accounts.txt @@ -5,7 +5,7 @@ { 'creation': '2010-09-25 10:50:34', 'docstatus': 0, - 'modified': '2011-07-15 10:43:04', + 'modified': '2011-07-26 18:14:48', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -40,7 +40,7 @@ 'module_icon': 'Accounts.gif', 'module_label': 'Accounts', 'module_name': 'Accounts', - 'module_seq': 5, + 'module_seq': 3, 'name': '__common__' }, @@ -107,8 +107,9 @@ # Module Def Item { - 'display_name': 'Loan', - 'doc_name': 'Loan', + 'description': 'Lease Agreement for Vehicles', + 'display_name': 'Lease Agreement', + 'doc_name': 'Lease Agreement', 'doc_type': 'Forms', 'doctype': 'Module Def Item', 'idx': 6 @@ -354,6 +355,15 @@ 'idx': 32 }, + # Module Def Item + { + 'display_name': 'Lease Agreement List', + 'doc_name': 'Lease Agreement List', + 'doc_type': 'Reports', + 'doctype': 'Module Def Item', + 'idx': 33 + }, + # Module Def Role { 'doctype': 'Module Def Role', diff --git a/accounts/search_criteria/accounts_receivable/accounts_receivable.js b/accounts/search_criteria/accounts_receivable/accounts_receivable.js index a51b8fb9c9..f31dc762a8 100644 --- a/accounts/search_criteria/accounts_receivable/accounts_receivable.js +++ b/accounts/search_criteria/accounts_receivable/accounts_receivable.js @@ -5,8 +5,8 @@ report.customize_filters = function() { this.filter_fields_dict['GL Entry'+FILTER_SEP +'From Posting Date'].df.filter_hide = 0; this.filter_fields_dict['GL Entry'+FILTER_SEP +'To Posting Date'].df.filter_hide = 0; this.filter_fields_dict['GL Entry'+FILTER_SEP +'Account'].df.filter_hide = 0; - - this.add_filter({fieldname:'aging_based_on', label:'Aging Based On', fieldtype:'Select', options:NEWLINE+'Transaction Date'+NEWLINE+'Aging Date'+NEWLINE+'Due Date',ignore : 1, parent:'Receivable Voucher', report_default:'Aging Date'}); + + this.add_filter({fieldname:'aging_based_on', label:'Aging Based On', fieldtype:'Select', options:NEWLINE+'Transaction Date'+NEWLINE+'Aging Date'+NEWLINE+'Due Date',ignore : 1, parent:'Receivable Voucher', report_default:'Aging Date'}); this.add_filter({fieldname:'range_1', label:'Range 1', fieldtype:'Data', ignore : 1, parent:'GL Entry'}); this.add_filter({fieldname:'range_2', label:'Range 2', fieldtype:'Data', ignore : 1, parent:'GL Entry'}); this.add_filter({fieldname:'range_3', label:'Range 3', fieldtype:'Data', ignore : 1, parent:'GL Entry'}); @@ -19,4 +19,4 @@ report.customize_filters = function() { this.dt.set_no_limit(1); } -this.mytabs.items['Select Columns'].hide() \ No newline at end of file +//this.mytabs.items['Select Columns'].hide() \ No newline at end of file diff --git a/buying/search_criteria/pending_po_items_to_receive/pending_po_items_to_receive.py b/buying/search_criteria/pending_po_items_to_receive/pending_po_items_to_receive.py index 486cc6df85..159d3930b9 100644 --- a/buying/search_criteria/pending_po_items_to_receive/pending_po_items_to_receive.py +++ b/buying/search_criteria/pending_po_items_to_receive/pending_po_items_to_receive.py @@ -1,2 +1,3 @@ +msgprint(colwidths) colwidths[col_idx['Pending Quantity To Receive']] = '200px' colwidths[col_idx['Pending Amount To Receive']] = '200px' \ No newline at end of file From d7db2ea20fdd84817bf1dc2ad71e2a5232206543 Mon Sep 17 00:00:00 2001 From: Brahma K Date: Tue, 26 Jul 2011 19:04:13 +0530 Subject: [PATCH 12/12] Lease Agreement Used by leasing and loan agents (i.e. Automobile leasing etc) for receipt follow up and reporting Account Transactions Upload Uploads transactions from a csv files, creates Journal Vouchers and submits --- accounts/doctype/lease_agreement/__init__.py | 0 .../lease_agreement/lease_agreement.js | 66 +++++++++++ .../lease_agreement/lease_agreement.py | 37 +++++++ .../doctype/lease_installment/__init__.py | 0 .../lease_agreement_list/__init__.py | 0 .../__init__.py | 0 .../lease_over_due_list/__init__.py | 0 .../lease_overdue_age_wise/__init__.py | 0 .../__init__.py | 0 .../lease_receipts_client_wise/__init__.py | 0 .../__init__.py | 0 accounts/utils/__init__.py | 27 +++++ .../upload_accounts_transactions/__init__.py | 0 .../upload_accounts_transactions.js | 18 +++ .../upload_accounts_transactions.py | 103 ++++++++++++++++++ 15 files changed, 251 insertions(+) create mode 100644 accounts/doctype/lease_agreement/__init__.py create mode 100644 accounts/doctype/lease_agreement/lease_agreement.js create mode 100644 accounts/doctype/lease_agreement/lease_agreement.py create mode 100644 accounts/doctype/lease_installment/__init__.py create mode 100644 accounts/search_criteria/lease_agreement_list/__init__.py create mode 100644 accounts/search_criteria/lease_monthly_future_installment_inflows/__init__.py create mode 100644 accounts/search_criteria/lease_over_due_list/__init__.py create mode 100644 accounts/search_criteria/lease_overdue_age_wise/__init__.py create mode 100644 accounts/search_criteria/lease_receipt_summary_year_to_date/__init__.py create mode 100644 accounts/search_criteria/lease_receipts_client_wise/__init__.py create mode 100644 accounts/search_criteria/lease_yearly_future_installment_inflows/__init__.py create mode 100644 accounts/utils/__init__.py create mode 100644 setup/doctype/upload_accounts_transactions/__init__.py create mode 100644 setup/doctype/upload_accounts_transactions/upload_accounts_transactions.js create mode 100644 setup/doctype/upload_accounts_transactions/upload_accounts_transactions.py diff --git a/accounts/doctype/lease_agreement/__init__.py b/accounts/doctype/lease_agreement/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/accounts/doctype/lease_agreement/lease_agreement.js b/accounts/doctype/lease_agreement/lease_agreement.js new file mode 100644 index 0000000000..8c681a11b2 --- /dev/null +++ b/accounts/doctype/lease_agreement/lease_agreement.js @@ -0,0 +1,66 @@ +$.extend(cur_frm.cscript, { + Generate: function(doc, dt, dn) { + cur_frm.cscript.clear_installments(doc); + tot=0;i=0; + while(totTo upload transactions, please attach a (.csv) file with 5 columns - Date, Transaction Number, Account, Debit Amount, Credit Amount (no headings necessary). See attachments box in the right column') + } else { + set_field_options('Upload Accounts Transactions Help', '
To update transactions from the attachment, please click on "Upload Accounts Transactions"
') + } +} + +cur_frm.cscript['Upload Accounts Transactions'] = function(doc, cdt, cdn) { + if(confirm("This action will append all transactions and cannot be un-done. Are you sure you want to continue?")) { + $c_obj([doc], 'upload_accounts_transactions', '', function(r, rt) { }); + } +} diff --git a/setup/doctype/upload_accounts_transactions/upload_accounts_transactions.py b/setup/doctype/upload_accounts_transactions/upload_accounts_transactions.py new file mode 100644 index 0000000000..2028e5fe60 --- /dev/null +++ b/setup/doctype/upload_accounts_transactions/upload_accounts_transactions.py @@ -0,0 +1,103 @@ +# Please edit this list and import only required elements +import webnotes + +from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add +from webnotes.model import db_exists +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, get_server_obj, run_server_obj, updatedb, check_syntax +from webnotes import session, form, is_testing, msgprint, errprint + +set = webnotes.conn.set +sql = webnotes.conn.sql +get_value = webnotes.conn.get_value +in_transaction = webnotes.conn.in_transaction +convert_to_lists = webnotes.conn.convert_to_lists + +# ----------------------------------------------------------------------------------------- + +class DocType: + def __init__(self, d, dl): + self.doc, self.doclist = d, dl + self.cl = [] + + # upload transactions + def upload_accounts_transactions(self): + import csv + data = csv.reader(self.get_csv_data().splitlines()) + + abbr = sql("select concat(' - ',abbr) as abbr from tabCompany where name=%s",self.doc.company) + updated = 0 + jv_name='' +# jv = Document('Journal Voucher') + global line,jv,name,jv_go + for line in data: + if len(line)>=7: #Minimum no of fields + if line[3]!=jv_name: #Create JV + if jv_name!='': + jv_go = get_obj('Journal Voucher',name, with_children=1) + jv_go.validate() + jv_go.on_submit() + + jv_name=line[3] + jv = Document('Journal Voucher') + jv.voucher_type = line[0] + jv.naming_series = line[1] + jv.voucher_date = formatdate(line[2]) + jv.posting_date = formatdate(line[2]) +# jv.name = line[3] + jv.fiscal_year = self.doc.fiscal_year + jv.company = self.doc.company + jv.remark = len(line)==8 and line[3]+' '+line[7] or line[3]+' Uploaded Record' + jv.docstatus=1 + jv.save(1) + name=jv.name + + jc = addchild(jv,'entries','Journal Voucher Detail',0) + jc.account = line[4]+abbr[0][0] + jc.cost_center=len(line)==9 and line[8] or self.doc.default_cost_center + if line[5]!='': + jc.debit = line[5] + else: + jc.credit = line[6] + jc.save() + + else: #Create JV Child + jc = addchild(jv,'entries','Journal Voucher Detail',0) + jc.account = line[4]+abbr[0][0] + jc.cost_center=len(line)==9 and line[8] or self.doc.default_cost_center + if line[5]!='': + jc.debit = line[5] + else: + jc.credit = line[6] + jc.save() + else: + msgprint("[Ignored] Incorrect format: %s" % str(line)) + if jv_name!='': + jv_go = get_obj('Journal Voucher',name, with_children=1) + jv_go.validate() + jv_go.on_submit() + + msgprint("%s items updated" % updated) + + # clear prices + def clear_prices(self): + cnt = sql("select count(*) from `tabRef Rate Detail` where price_list_name = %s", self.doc.name) + sql("delete from `tabRef Rate Detail` where price_list_name = %s", self.doc.name) + msgprint("%s prices cleared" % cnt[0][0]) + + # Update CSV data + def get_csv_data(self): + if not self.doc.file_list: + msgprint("File not attached!") + raise Exception + + fid = self.doc.file_list.split(',')[1] + + from webnotes.utils import file_manager + fn, content = file_manager.get_file(fid) + + if not type(content) == str: + content = content.tostring() + + return content