loan file modification
This commit is contained in:
parent
5e1d504483
commit
62a7b3cd4a
@ -12,7 +12,7 @@ sql = webnotes.conn.sql
|
|||||||
get_value = webnotes.conn.get_value
|
get_value = webnotes.conn.get_value
|
||||||
in_transaction = webnotes.conn.in_transaction
|
in_transaction = webnotes.conn.in_transaction
|
||||||
convert_to_lists = webnotes.conn.convert_to_lists
|
convert_to_lists = webnotes.conn.convert_to_lists
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------------------
|
||||||
from utilities.transaction_base import TransactionBase
|
from utilities.transaction_base import TransactionBase
|
||||||
|
|
||||||
@ -30,11 +30,11 @@ class DocType:
|
|||||||
#for r in ret:
|
#for r in ret:
|
||||||
# inc = get_value('Account','Income - '+r[1], 'balance')
|
# inc = get_value('Account','Income - '+r[1], 'balance')
|
||||||
# exp = get_value('Account','Expenses - '+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}
|
return {'cl':[r[0] for r in ret]}#, 'pl':pl}
|
||||||
|
|
||||||
def get_company_currency(self,arg=''):
|
def get_company_currency(self,arg=''):
|
||||||
dcc = TransactionBase().get_company_currency(arg)
|
dcc = TransactionBase().get_company_currency(arg)
|
||||||
return dcc
|
return dcc
|
||||||
|
|
||||||
# Get current balance
|
# Get current balance
|
||||||
@ -91,7 +91,7 @@ class DocType:
|
|||||||
|
|
||||||
fy = get_defaults()['fiscal_year']
|
fy = get_defaults()['fiscal_year']
|
||||||
parent, parent_acc_name, company, type = arg.split(',')
|
parent, parent_acc_name, company, type = arg.split(',')
|
||||||
|
|
||||||
# get children account details
|
# get children account details
|
||||||
if type=='Account':
|
if type=='Account':
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ class DocType:
|
|||||||
|
|
||||||
# remove Decimals
|
# remove Decimals
|
||||||
for c in cl: c['balance'] = flt(c['balance'])
|
for c in cl: c['balance'] = flt(c['balance'])
|
||||||
|
|
||||||
# get children cost center details
|
# get children cost center details
|
||||||
elif type=='Cost Center':
|
elif type=='Cost Center':
|
||||||
if parent=='Root Node':
|
if parent=='Root Node':
|
||||||
@ -111,7 +111,7 @@ class DocType:
|
|||||||
else:
|
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)
|
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}
|
return {'parent':parent, 'parent_acc_name':parent_acc_name, 'cl':cl}
|
||||||
|
|
||||||
# Add a new account
|
# Add a new account
|
||||||
# -----------------
|
# -----------------
|
||||||
def add_ac(self,arg):
|
def add_ac(self,arg):
|
||||||
@ -119,14 +119,14 @@ class DocType:
|
|||||||
ac = Document('Account')
|
ac = Document('Account')
|
||||||
for d in arg.keys():
|
for d in arg.keys():
|
||||||
ac.fields[d] = arg[d]
|
ac.fields[d] = arg[d]
|
||||||
ac.old_parent = ''
|
ac.old_parent = ''
|
||||||
ac_obj = get_obj(doc=ac)
|
ac_obj = get_obj(doc=ac)
|
||||||
ac_obj.validate()
|
ac_obj.validate()
|
||||||
ac_obj.doc.save(1)
|
ac_obj.doc.save(1)
|
||||||
ac_obj.on_update()
|
ac_obj.on_update()
|
||||||
|
|
||||||
return ac_obj.doc.name
|
return ac_obj.doc.name
|
||||||
|
|
||||||
# Add a new cost center
|
# Add a new cost center
|
||||||
#----------------------
|
#----------------------
|
||||||
def add_cc(self,arg):
|
def add_cc(self,arg):
|
||||||
@ -138,33 +138,33 @@ class DocType:
|
|||||||
# map company abbr
|
# map company abbr
|
||||||
other_info = sql("select company_abbr from `tabCost Center` where name='%s'"%arg['parent_cost_center'])
|
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.company_abbr = other_info and other_info[0][0] or arg['company_abbr']
|
||||||
|
|
||||||
cc_obj = get_obj(doc=cc)
|
cc_obj = get_obj(doc=cc)
|
||||||
cc_obj.validate()
|
cc_obj.validate()
|
||||||
cc_obj.doc.save(1)
|
cc_obj.doc.save(1)
|
||||||
cc_obj.on_update()
|
cc_obj.on_update()
|
||||||
|
|
||||||
return cc_obj.doc.name
|
return cc_obj.doc.name
|
||||||
|
|
||||||
|
|
||||||
# Get field values from the voucher
|
# Get field values from the voucher
|
||||||
#------------------------------------------
|
#------------------------------------------
|
||||||
def get_val(self, src, d, parent=None):
|
def get_val(self, src, d, parent=None):
|
||||||
if not src:
|
if not src:
|
||||||
return None
|
return None
|
||||||
if src.startswith('parent:'):
|
if src.startswith('parent:'):
|
||||||
return parent.fields[src.split(':')[1]]
|
return parent.fields[src.split(':')[1]]
|
||||||
elif src.startswith('value:'):
|
elif src.startswith('value:'):
|
||||||
return eval(src.split(':')[1])
|
return eval(src.split(':')[1])
|
||||||
elif src:
|
elif src:
|
||||||
return d.fields.get(src)
|
return d.fields.get(src)
|
||||||
|
|
||||||
def check_if_in_list(self, le):
|
def check_if_in_list(self, le):
|
||||||
for e in self.entries:
|
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)):
|
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 [e]
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
# Make a dictionary(le) for every gl entry and append to a list(self.entries)
|
# 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):
|
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))
|
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):
|
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)
|
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
|
# Create new GL entry object and map values
|
||||||
le = Document('GL Entry')
|
le = Document('GL Entry')
|
||||||
for k in flist:
|
for k in flist:
|
||||||
le.fields[k] = self.get_val(le_map[k], d, parent)
|
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
|
# if there is already an entry in this account then just add it to that entry
|
||||||
same_head = self.check_if_in_list(le)
|
same_head = self.check_if_in_list(le)
|
||||||
if same_head and merge_entries:
|
if same_head and merge_entries:
|
||||||
@ -190,8 +190,8 @@ class DocType:
|
|||||||
same_head.credit = flt(same_head.credit) + flt(le.credit)
|
same_head.credit = flt(same_head.credit) + flt(le.credit)
|
||||||
else:
|
else:
|
||||||
self.entries.append(le)
|
self.entries.append(le)
|
||||||
|
|
||||||
# Save GL Entries
|
# Save GL Entries
|
||||||
# ----------------
|
# ----------------
|
||||||
def save_entries(self, cancel, adv_adj, update_outstanding):
|
def save_entries(self, cancel, adv_adj, update_outstanding):
|
||||||
for le in self.entries:
|
for le in self.entries:
|
||||||
@ -199,7 +199,7 @@ class DocType:
|
|||||||
if cancel or flt(le.debit) < 0 or flt(le.credit) < 0:
|
if cancel or flt(le.debit) < 0 or flt(le.credit) < 0:
|
||||||
tmp=le.debit
|
tmp=le.debit
|
||||||
le.debit, le.credit = abs(flt(le.credit)), abs(flt(tmp))
|
le.debit, le.credit = abs(flt(le.credit)), abs(flt(tmp))
|
||||||
|
|
||||||
|
|
||||||
le_obj = get_obj(doc=le)
|
le_obj = get_obj(doc=le)
|
||||||
# validate except on_cancel
|
# validate except on_cancel
|
||||||
@ -213,11 +213,11 @@ class DocType:
|
|||||||
# update total debit / credit
|
# update total debit / credit
|
||||||
self.td += flt(le.debit)
|
self.td += flt(le.debit)
|
||||||
self.tc += flt(le.credit)
|
self.tc += flt(le.credit)
|
||||||
|
|
||||||
# Make Multiple Entries
|
# Make Multiple Entries
|
||||||
# ---------------------
|
# ---------------------
|
||||||
def make_gl_entries(self, doc, doclist, cancel=0, adv_adj = 0, use_mapper='', merge_entries = 1, update_outstanding='Yes'):
|
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)
|
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
|
self.td, self.tc = 0.0, 0.0
|
||||||
for le_map in le_map_list:
|
for le_map in le_map_list:
|
||||||
@ -228,10 +228,10 @@ class DocType:
|
|||||||
self.make_single_entry(doc,d,le_map,cancel, merge_entries)
|
self.make_single_entry(doc,d,le_map,cancel, merge_entries)
|
||||||
else:
|
else:
|
||||||
self.make_single_entry(None,doc,le_map,cancel, merge_entries)
|
self.make_single_entry(None,doc,le_map,cancel, merge_entries)
|
||||||
|
|
||||||
# save entries
|
# save entries
|
||||||
self.save_entries(cancel, adv_adj, update_outstanding)
|
self.save_entries(cancel, adv_adj, update_outstanding)
|
||||||
|
|
||||||
# check total debit / credit
|
# check total debit / credit
|
||||||
# Due to old wrong entries (total debit != total credit) some voucher could be cancelled
|
# 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:
|
if abs(self.td - self.tc) > 0.001 and not cancel:
|
||||||
@ -289,7 +289,7 @@ class DocType:
|
|||||||
add.allocate_amount = 0
|
add.allocate_amount = 0
|
||||||
if table_name == 'Advance Allocation Detail':
|
if table_name == 'Advance Allocation Detail':
|
||||||
add.tds_amount = flt(d[4])
|
add.tds_amount = flt(d[4])
|
||||||
|
|
||||||
# Clear rows which is not adjusted
|
# Clear rows which is not adjusted
|
||||||
#-------------------------------------
|
#-------------------------------------
|
||||||
def clear_advances(self, obj,table_name,table_field_name):
|
def clear_advances(self, obj,table_name,table_field_name):
|
||||||
@ -297,7 +297,7 @@ class DocType:
|
|||||||
if not flt(d.allocated_amount):
|
if not flt(d.allocated_amount):
|
||||||
sql("update `tab%s` set parent = '' where name = '%s' and parent = '%s'" % (table_name, d.name, d.parent))
|
sql("update `tab%s` set parent = '' where name = '%s' and parent = '%s'" % (table_name, d.name, d.parent))
|
||||||
d.parent = ''
|
d.parent = ''
|
||||||
|
|
||||||
# Update aginst document in journal voucher
|
# 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):
|
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
|
# 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))
|
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
|
# re-submit JV
|
||||||
jv_obj = get_obj('Journal Voucher', d.journal_voucher, with_children =1)
|
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)
|
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
|
# cancel JV
|
||||||
jv_obj = get_obj('Journal Voucher', d.journal_voucher, with_children=1)
|
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)
|
get_obj(dt='GL Control').make_gl_entries(jv_obj.doc, jv_obj.doclist, cancel =1, adv_adj = 1)
|
||||||
|
|
||||||
# add extra entries
|
# 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)
|
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
|
# re-submit JV
|
||||||
jv_obj = get_obj('Journal Voucher', d.journal_voucher, with_children =1)
|
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)
|
get_obj(dt='GL Control').make_gl_entries(jv_obj.doc, jv_obj.doclist, cancel = 0, adv_adj = 1)
|
||||||
else:
|
else:
|
||||||
msgprint("Allocation amount cannot be greater than advance amount")
|
msgprint("Allocation amount cannot be greater than advance amount")
|
||||||
raise Exception
|
raise Exception
|
||||||
|
|
||||||
# Add extra row in jv detail for unadjusted amount
|
# 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):
|
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
|
# 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))
|
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
|
advance = jvd and flt(jvd[0][0]) or 0
|
||||||
balance = flt(advance) - flt(allocate)
|
balance = flt(advance) - flt(allocate)
|
||||||
@ -351,7 +351,7 @@ class DocType:
|
|||||||
add.against_account = cstr(jvd[0][3])
|
add.against_account = cstr(jvd[0][3])
|
||||||
add.is_advance = 'Yes'
|
add.is_advance = 'Yes'
|
||||||
add.save(1)
|
add.save(1)
|
||||||
|
|
||||||
# check if advance entries are still valid
|
# check if advance entries are still valid
|
||||||
# ----------------------------------------
|
# ----------------------------------------
|
||||||
def validate_jv_entry(self, d, account_head, dr_or_cr):
|
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("""
|
vl = sql("""
|
||||||
select voucher_type, voucher_no, account, sum(debit) as sum_debit, sum(credit) as sum_credit
|
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
|
where is_cancelled='Yes' and creation > %s
|
||||||
group by voucher_type, voucher_no, account
|
group by voucher_type, voucher_no, account
|
||||||
""", after_date, as_dict=1)
|
""", after_date, as_dict=1)
|
||||||
|
|
||||||
ac_list = []
|
ac_list = []
|
||||||
for v in vl:
|
for v in vl:
|
||||||
if v['sum_debit'] != 0 or v['sum_credit'] != 0:
|
if v['sum_debit'] != 0 or v['sum_credit'] != 0:
|
||||||
ac_list.append(v['account'])
|
ac_list.append(v['account'])
|
||||||
|
|
||||||
fy_list = sql("""select name from `tabFiscal Year`
|
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))
|
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
|
or year_start_date > %s
|
||||||
order by year_start_date ASC""", (after_date, after_date))
|
order by year_start_date ASC""", (after_date, after_date))
|
||||||
|
|
||||||
for fy in fy_list:
|
for fy in fy_list:
|
||||||
fy_obj = get_obj('Fiscal Year', fy[0])
|
fy_obj = get_obj('Fiscal Year', fy[0])
|
||||||
for a in set(ac_list):
|
for a in set(ac_list):
|
||||||
fy_obj.repost(a)
|
fy_obj.repost(a)
|
||||||
|
|
||||||
|
@ -8,19 +8,24 @@ $.extend(cur_frm.cscript, {
|
|||||||
}
|
}
|
||||||
cur_frm.refresh();
|
cur_frm.refresh();
|
||||||
},
|
},
|
||||||
|
/* submit:function(doc){
|
||||||
|
data=doc.get_values();
|
||||||
|
|
||||||
|
data['']=
|
||||||
|
$c_obj(make_doclist(dt,dn),'loan_post',data,function(){});
|
||||||
|
},*/
|
||||||
refresh: function(doc) {
|
refresh: function(doc) {
|
||||||
cur_frm.cscript.hide_show_buttons(doc);
|
cur_frm.cscript.hide_show_buttons(doc);
|
||||||
},
|
},
|
||||||
hide_show_buttons: function(doc) {
|
hide_show_buttons: function(doc) {
|
||||||
if(doc.docstatus==0) {
|
if(doc.docstatus==0) {
|
||||||
hide_field('Installment Reciept');// show_field('Generate');
|
hide_field('Installment Reciept'); show_field('Generate');
|
||||||
} else if (doc.docstatus==1) {
|
} else if (doc.docstatus==1) {
|
||||||
// show_field('Installment Reciept');
|
show_field('Installment Reciept');hide_field('Generate');
|
||||||
hide_field('Generate');
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
clear_installments: function(doc) {
|
clear_installments: function(doc) {
|
||||||
$.each(getchildren('Loan Installment', doc.name, 'installments', 'Loan'),
|
$.each(getchildren('Loan Installment', doc.name, 'installments', 'Loan'),
|
||||||
function(i, d) {
|
function(i, d) {
|
||||||
LocalDB.delete_doc('Loan Installment', d.name);
|
LocalDB.delete_doc('Loan Installment', d.name);
|
||||||
}
|
}
|
||||||
@ -40,9 +45,9 @@ hide_field('Generate');
|
|||||||
d.show();
|
d.show();
|
||||||
d.fields_dict.update.input.onclick = function() {
|
d.fields_dict.update.input.onclick = function() {
|
||||||
var data = d.get_values();
|
var data = d.get_values();
|
||||||
|
|
||||||
if(data) {
|
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();});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,49 +3,46 @@ from webnotes.model.doc import make_autoname, Document, addchild
|
|||||||
from webnotes import msgprint
|
from webnotes import msgprint
|
||||||
from webnotes.utils import get_defaults
|
from webnotes.utils import get_defaults
|
||||||
import json
|
import json
|
||||||
|
from accounts.utils import post_jv
|
||||||
sql = webnotes.conn.sql
|
sql = webnotes.conn.sql
|
||||||
|
|
||||||
class DocType:
|
class DocType:
|
||||||
def __init__(self, doc, doclist):
|
def __init__(self, doc, doclist):
|
||||||
self.doc, self.doclist = doc, doclist
|
self.doc, self.doclist = doc, doclist
|
||||||
|
|
||||||
def autoname(self):
|
def autoname(self):
|
||||||
"""
|
"""
|
||||||
Create Loan Id using naming_series pattern
|
Create Loan Id using naming_series pattern
|
||||||
"""
|
"""
|
||||||
self.doc.name = make_autoname(self.doc.naming_series+ '.#####')
|
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
|
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)
|
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)
|
data = json.loads(args)
|
||||||
jc.account = self.doc.account
|
data['voucher_type']='Loan Receipt'
|
||||||
jc.credit = next_inst[0][0]
|
data['naming_series']='JV'
|
||||||
jc.save()
|
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]
|
self.doclist = [Document(d.doctype, d.name) for d in self.doclist]
|
||||||
|
|
||||||
|
@ -5,21 +5,21 @@
|
|||||||
{
|
{
|
||||||
'creation': '2011-07-15 10:35:26',
|
'creation': '2011-07-15 10:35:26',
|
||||||
'docstatus': 0,
|
'docstatus': 0,
|
||||||
'modified': '2011-07-15 15:51:10',
|
'modified': '2011-07-18 12:12:19',
|
||||||
'modified_by': 'Administrator',
|
'modified_by': 'Administrator',
|
||||||
'owner': 'Administrator'
|
'owner': 'Administrator'
|
||||||
},
|
},
|
||||||
|
|
||||||
# These values are common for all DocType
|
# These values are common for all DocType
|
||||||
{
|
{
|
||||||
'_last_update': '1310706327',
|
'_last_update': '1310963215',
|
||||||
'colour': 'White:FFF',
|
'colour': 'White:FFF',
|
||||||
'doctype': 'DocType',
|
'doctype': 'DocType',
|
||||||
'module': 'Accounts',
|
'module': 'Accounts',
|
||||||
'name': '__common__',
|
'name': '__common__',
|
||||||
'section_style': 'Simple',
|
'section_style': 'Simple',
|
||||||
'show_in_menu': 0,
|
'show_in_menu': 0,
|
||||||
'version': 12
|
'version': 15
|
||||||
},
|
},
|
||||||
|
|
||||||
# These values are common for all DocField
|
# These values are common for all DocField
|
||||||
@ -89,12 +89,33 @@
|
|||||||
'reqd': 1
|
'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
|
# DocField
|
||||||
{
|
{
|
||||||
'doctype': 'DocField',
|
'doctype': 'DocField',
|
||||||
'fieldname': 'loan_amount',
|
'fieldname': 'loan_amount',
|
||||||
'fieldtype': 'Currency',
|
'fieldtype': 'Currency',
|
||||||
'idx': 3,
|
'idx': 5,
|
||||||
'label': 'Loan Amount',
|
'label': 'Loan Amount',
|
||||||
'reqd': 1
|
'reqd': 1
|
||||||
},
|
},
|
||||||
@ -104,7 +125,7 @@
|
|||||||
'doctype': 'DocField',
|
'doctype': 'DocField',
|
||||||
'fieldname': 'start_date',
|
'fieldname': 'start_date',
|
||||||
'fieldtype': 'Date',
|
'fieldtype': 'Date',
|
||||||
'idx': 4,
|
'idx': 6,
|
||||||
'label': 'Start Date',
|
'label': 'Start Date',
|
||||||
'reqd': 1
|
'reqd': 1
|
||||||
},
|
},
|
||||||
@ -114,7 +135,7 @@
|
|||||||
'doctype': 'DocField',
|
'doctype': 'DocField',
|
||||||
'fieldname': 'no_of_installments',
|
'fieldname': 'no_of_installments',
|
||||||
'fieldtype': 'Int',
|
'fieldtype': 'Int',
|
||||||
'idx': 5,
|
'idx': 7,
|
||||||
'label': 'No of Installments',
|
'label': 'No of Installments',
|
||||||
'reqd': 1
|
'reqd': 1
|
||||||
},
|
},
|
||||||
@ -124,7 +145,7 @@
|
|||||||
'colour': 'White:FFF',
|
'colour': 'White:FFF',
|
||||||
'doctype': 'DocField',
|
'doctype': 'DocField',
|
||||||
'fieldtype': 'Button',
|
'fieldtype': 'Button',
|
||||||
'idx': 6,
|
'idx': 8,
|
||||||
'label': 'Generate',
|
'label': 'Generate',
|
||||||
'trigger': 'Client'
|
'trigger': 'Client'
|
||||||
},
|
},
|
||||||
@ -134,7 +155,7 @@
|
|||||||
'doctype': 'DocField',
|
'doctype': 'DocField',
|
||||||
'fieldname': 'installments',
|
'fieldname': 'installments',
|
||||||
'fieldtype': 'Table',
|
'fieldtype': 'Table',
|
||||||
'idx': 7,
|
'idx': 9,
|
||||||
'label': 'Installments',
|
'label': 'Installments',
|
||||||
'options': 'Loan Installment'
|
'options': 'Loan Installment'
|
||||||
},
|
},
|
||||||
@ -145,7 +166,7 @@
|
|||||||
'colour': 'White:FFF',
|
'colour': 'White:FFF',
|
||||||
'doctype': 'DocField',
|
'doctype': 'DocField',
|
||||||
'fieldtype': 'Button',
|
'fieldtype': 'Button',
|
||||||
'idx': 8,
|
'idx': 10,
|
||||||
'label': 'Installment Reciept'
|
'label': 'Installment Reciept'
|
||||||
}
|
}
|
||||||
]
|
]
|
Loading…
x
Reference in New Issue
Block a user