Rewritten update_against_document function

This commit is contained in:
Nabin Hait 2011-09-26 18:57:43 +05:30
parent 5f2046496b
commit d223d12308
3 changed files with 98 additions and 36 deletions

View File

@ -5,18 +5,19 @@
{
'creation': '2010-08-08 17:08:56',
'docstatus': 0,
'modified': '2010-12-29 18:18:55',
'modified_by': 'umair@iwebnotes.com',
'modified': '2011-09-26 18:55:05',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all DocType
{
'_last_update': '1308741898',
'_last_update': '1316075905',
'allow_copy': 1,
'allow_trash': 1,
'autoname': 'field:cost_center_name',
'colour': 'White:FFF',
'default_print_format': 'Standard',
'doctype': 'DocType',
'document_type': 'Master',
'in_create': 1,
@ -26,7 +27,7 @@
'section_style': 'Simple',
'server_code_error': ' ',
'show_in_menu': 0,
'version': 104
'version': 107
},
# These values are common for all DocField
@ -60,7 +61,6 @@
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 1,
'permlevel': 1,
'role': 'Accounts Manager',
'submit': 0,
@ -73,7 +73,6 @@
'cancel': 1,
'create': 1,
'doctype': 'DocPerm',
'idx': 2,
'permlevel': 0,
'role': 'Accounts Manager',
'submit': 0,
@ -86,7 +85,6 @@
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 3,
'permlevel': 1,
'role': 'Accounts User',
'submit': 0,
@ -99,7 +97,6 @@
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 4,
'permlevel': 0,
'role': 'Accounts User',
'submit': 0,
@ -111,7 +108,6 @@
'cancel': 1,
'create': 1,
'doctype': 'DocPerm',
'idx': 5,
'permlevel': 0,
'role': 'System Manager',
'write': 1
@ -120,7 +116,6 @@
# DocPerm
{
'doctype': 'DocPerm',
'idx': 6,
'permlevel': 1,
'role': 'All'
},
@ -130,7 +125,6 @@
'doctype': 'DocField',
'fieldname': 'trash_reason',
'fieldtype': 'Small Text',
'idx': 1,
'label': 'Trash Reason',
'oldfieldname': 'trash_reason',
'oldfieldtype': 'Small Text',
@ -142,7 +136,6 @@
'doctype': 'DocField',
'fieldname': 'cost_center_name',
'fieldtype': 'Data',
'idx': 2,
'in_filter': 0,
'label': 'Cost Center Name',
'no_copy': 1,
@ -159,7 +152,6 @@
'doctype': 'DocField',
'fieldname': 'parent_cost_center',
'fieldtype': 'Link',
'idx': 3,
'label': 'Parent Cost Center',
'oldfieldname': 'parent_cost_center',
'oldfieldtype': 'Link',
@ -175,14 +167,12 @@
'doctype': 'DocField',
'fieldname': 'company_name',
'fieldtype': 'Link',
'idx': 4,
'label': 'Company',
'oldfieldname': 'company_name',
'oldfieldtype': 'Link',
'options': 'Company',
'permlevel': 0,
'reqd': 1,
'search_index': 0,
'trigger': 'Client'
},
@ -191,7 +181,6 @@
'doctype': 'DocField',
'fieldname': 'company_abbr',
'fieldtype': 'Data',
'idx': 5,
'label': 'Company Abbr',
'oldfieldname': 'company_abbr',
'oldfieldtype': 'Data',
@ -204,8 +193,7 @@
'doctype': 'DocField',
'fieldname': 'group_or_ledger',
'fieldtype': 'Select',
'hidden': 1,
'idx': 6,
'hidden': 0,
'label': 'Group or Ledger',
'no_copy': 1,
'oldfieldname': 'group_or_ledger',
@ -223,13 +211,11 @@
'doctype': 'DocField',
'fieldname': 'distribution_id',
'fieldtype': 'Link',
'idx': 7,
'label': 'Distribution Id',
'oldfieldname': 'distribution_id',
'oldfieldtype': 'Link',
'options': 'Budget Distribution',
'permlevel': 0,
'search_index': 0
'permlevel': 0
},
# DocField
@ -237,7 +223,6 @@
'doctype': 'DocField',
'fieldname': 'budget_details',
'fieldtype': 'Table',
'idx': 8,
'label': 'Budget Details',
'oldfieldname': 'budget_details',
'oldfieldtype': 'Table',
@ -251,7 +236,6 @@
'fieldname': 'lft',
'fieldtype': 'Int',
'hidden': 1,
'idx': 9,
'in_filter': 1,
'label': 'lft',
'no_copy': 1,
@ -269,7 +253,6 @@
'fieldname': 'rgt',
'fieldtype': 'Int',
'hidden': 1,
'idx': 10,
'in_filter': 1,
'label': 'rgt',
'no_copy': 1,
@ -286,13 +269,13 @@
{
'doctype': 'DocField',
'fieldname': 'old_parent',
'fieldtype': 'Data',
'fieldtype': 'Link',
'hidden': 1,
'idx': 11,
'label': 'old_parent',
'no_copy': 1,
'oldfieldname': 'old_parent',
'oldfieldtype': 'Data',
'options': 'Cost Center',
'permlevel': 0,
'print_hide': 1,
'report_hide': 1

View File

@ -191,6 +191,7 @@ class DocType:
else:
self.entries.append(le)
# Save GL Entries
# ----------------
def save_entries(self, cancel, adv_adj, update_outstanding):
@ -200,7 +201,6 @@ class DocType:
tmp=le.debit
le.debit, le.credit = abs(flt(le.credit)), abs(flt(tmp))
le_obj = get_obj(doc=le)
# validate except on_cancel
if not cancel:
@ -213,10 +213,12 @@ 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'):
self.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
@ -329,6 +331,7 @@ class DocType:
else:
msgprint("Allocation amount cannot be greater than advance amount")
raise Exception
# Add extra row in jv detail for unadjusted amount
#--------------------------------------------------
@ -351,7 +354,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):
@ -359,15 +362,92 @@ class DocType:
# 2. check if amount is same
# 3. check if is_advance is 'Yes'
# 4. check if jv is submitted
ret = sql("select t2.%s from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t1.name = t2.parent and (t2.against_voucher = '' or t2.against_voucher is null) and (t2.against_invoice = '' or t2.against_invoice is null) and t2.account = '%s' and t1.name = '%s' and t2.name = '%s' and t2.is_advance = 'Yes' and t1.docstatus=1 and t2.%s = %s" % ( dr_or_cr, account_head, d.journal_voucher, d.jv_detail_no, dr_or_cr, d.advance_amount))
ret = sql("select t2.%s from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t1.name = t2.parent and ifnull(t2.against_voucher, '') = '' and ifnull(t2.against_invoice, '') = '' and t2.account = '%s' and t1.name = '%s' and t2.name = '%s' and t2.is_advance = 'Yes' and t1.docstatus=1 and t2.%s = %s" % (dr_or_cr, account_head, d.journal_voucher, d.jv_detail_no, dr_or_cr, d.advance_amount))
if (not ret):
msgprint("Please click on 'Get Advances Paid' button as the advance entries have been changed.")
raise Exception
return
##############################################################################
# Repair Outstanding Amount
##############################################################################
######################################################################################################################
#------------------------------------------
def reconcile_against_document(self, args):
"""
Cancel JV, Update aginst document, split if required and resubmit jv
"""
for d in args:
self.check_if_jv_modified(d)
against_fld = {
'Journal Voucher' : 'against_jv',
'Receivable Voucher' : 'against_invoice',
'Payable Voucher' : 'against_voucher'
}
d['against_fld'] = against_fld[d['against_voucher_type']]
# cancel JV
jv_obj = get_obj('Journal Voucher', d['voucher_no'], with_children=1)
self.make_gl_entries(jv_obj.doc, jv_obj.doclist, cancel =1, adv_adj =1)
# update ref in JV Detail
self.update_against_doc(d, jv_obj)
# re-submit JV
jv_obj = get_obj('Journal Voucher', d['voucher_no'], with_children =1)
self.make_gl_entries(jv_obj.doc, jv_obj.doclist, cancel = 0, adv_adj =1)
#------------------------------------------
def update_against_doc(self, d, jv_obj):
"""
Updates against document, if partial amount splits into rows
"""
sql("""
update `tabJournal Voucher Detail` t1, `tabJournal Voucher` t2
set t1.%(dr_or_cr)s = '%(allocated_amt)s', t1.%(against_fld)s = '%(against_voucher)s', t2.modified = now()
where t1.name = '%(voucher_detail_no)s' and t1.parent = t2.name""" % d)
if d['allocated_amt'] < d['unadjusted_amt']:
jvd = sql("select cost_center, balance, against_account, is_advance from `tabJournal Voucher Detail` where name = '%s'" % d['voucher_detail_no'])
# new entry with balance amount
ch = addchild(jv_obj.doc, 'entries', 'Journal Voucher Detail', 1)
ch.account = d['account']
ch.cost_center = cstr(jvd[0][0])
ch.balance = cstr(jvd[0][1])
ch.fields[d['dr_or_cr']] = flt(d['unadjusted_amt']) - flt(d['allocated_amt'])
ch.fields[d['dr_or_cr']== 'debit' and 'credit' or 'debit'] = 0
ch.against_account = cstr(jvd[0][2])
ch.is_advance = cstr(jvd[0][3])
ch.docstatus = 1
ch.save(1)
#------------------------------------------
def check_if_jv_modified(self, args):
"""
check if there is already a voucher reference
check if amount is same
check if jv is submitted
"""
ret = sql("""
select t2.%(dr_or_cr)s from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2
where t1.name = t2.parent and t2.account = '%(account)s'
and ifnull(t2.against_voucher, '')='' and ifnull(t2.against_invoice, '')='' and ifnull(t2.against_jv, '')=''
and t1.name = '%(voucher_no)s' and t2.name = '%(voucher_detail_no)s'
and t1.docstatus=1 and t2.%(dr_or_cr)s = %(unadjusted_amt)s
""" % (args))
if not ret:
msgprint("Payment Entry has been modified after you pulled it. Please pull it again.", raise_exception=1)
######################################################################################################################
# Repair Outstanding Amount
#---------------------------------
def repair_voucher_outstanding(self, voucher_obj):
msg = []

View File

@ -35,7 +35,7 @@ class DocType:
if not (flt(self.doc.debit) or flt(self.doc.credit)):
msgprint("GL Entry: Debit or Credit amount is mandatory for %s" % self.doc.account)
raise Exception
# Debit and credit can not done at the same time
if flt(self.doc.credit) != 0 and flt(self.doc.debit) != 0:
msgprint("Sorry you cannot credit and debit under same account head.")
@ -185,7 +185,6 @@ class DocType:
bal = flt(sql("select sum(debit)-sum(credit) from `tabGL Entry` where against_voucher=%s and against_voucher_type=%s and ifnull(is_cancelled,'No') = 'No'", (self.doc.against_voucher, self.doc.against_voucher_type))[0][0] or 0.0)
tds = 0
if self.doc.against_voucher_type=='Payable Voucher':
# amount to debit
bal = -bal
@ -200,7 +199,7 @@ class DocType:
raise Exception
# Update outstanding amt on against voucher
sql("update `tab%s` set outstanding_amount=%s where name='%s'"% (self.doc.against_voucher_type,bal,self.doc.against_voucher))
sql("update `tab%s` set outstanding_amount=%s where name='%s'" % (self.doc.against_voucher_type, bal, self.doc.against_voucher))
# Total outstanding can not be greater than credit limit for any time for any customer