deprecated gl_control and some rewrites
This commit is contained in:
parent
c6a86535ef
commit
fb3fd6e3e5
@ -74,7 +74,7 @@ class DocType:
|
|||||||
end_date = webnotes.conn.sql("select LAST_DAY('%s')" % gle['posting_date'])
|
end_date = webnotes.conn.sql("select LAST_DAY('%s')" % gle['posting_date'])
|
||||||
|
|
||||||
# get Actual
|
# get Actual
|
||||||
actual = webnotes.get_obj('GL Control').get_period_difference(gle['account'] +
|
actual = self.get_period_difference(gle['account'] +
|
||||||
'~~~' + cstr(start_date) + '~~~' + cstr(end_date[0][0]), gle['cost_center'])
|
'~~~' + cstr(start_date) + '~~~' + cstr(end_date[0][0]), gle['cost_center'])
|
||||||
|
|
||||||
# Get Monthly budget
|
# Get Monthly budget
|
||||||
@ -89,3 +89,22 @@ class DocType:
|
|||||||
webnotes.conn.sql("""update `tabBudget Detail` set actual = ifnull(actual,0) + %s
|
webnotes.conn.sql("""update `tabBudget Detail` set actual = ifnull(actual,0) + %s
|
||||||
where account = '%s' and fiscal_year = '%s' and parent = '%s'""" %
|
where account = '%s' and fiscal_year = '%s' and parent = '%s'""" %
|
||||||
(curr_amt, gle['account'],gle['fiscal_year'], gle['cost_center']))
|
(curr_amt, gle['account'],gle['fiscal_year'], gle['cost_center']))
|
||||||
|
|
||||||
|
|
||||||
|
def get_period_difference(self, arg, cost_center =''):
|
||||||
|
# used in General Ledger Page Report
|
||||||
|
# used for Budget where cost center passed as extra argument
|
||||||
|
acc, f, t = arg.split('~~~')
|
||||||
|
c, fy = '', get_defaults()['fiscal_year']
|
||||||
|
|
||||||
|
det = webnotes.conn.sql("select debit_or_credit, lft, rgt, is_pl_account from tabAccount where name=%s", acc)
|
||||||
|
if f: c += (' and t1.posting_date >= "%s"' % f)
|
||||||
|
if t: c += (' and t1.posting_date <= "%s"' % t)
|
||||||
|
if cost_center: c += (' and t1.cost_center = "%s"' % cost_center)
|
||||||
|
bal = webnotes.conn.sql("select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) from `tabGL Entry` t1 where t1.account='%s' %s" % (acc, c))
|
||||||
|
bal = bal and flt(bal[0][0]) or 0
|
||||||
|
|
||||||
|
if det[0][0] != 'Debit':
|
||||||
|
bal = (-1) * bal
|
||||||
|
|
||||||
|
return flt(bal)
|
||||||
@ -1 +0,0 @@
|
|||||||
from __future__ import unicode_literals
|
|
||||||
@ -1,164 +0,0 @@
|
|||||||
# ERPNext - web based ERP (http://erpnext.com)
|
|
||||||
# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
import webnotes
|
|
||||||
|
|
||||||
from webnotes.utils import cstr, flt, get_defaults
|
|
||||||
from webnotes.model.doc import addchild
|
|
||||||
from webnotes.model.wrapper import getlist
|
|
||||||
from webnotes.model.code import get_obj
|
|
||||||
from webnotes import msgprint
|
|
||||||
|
|
||||||
class DocType:
|
|
||||||
def __init__(self,d,dl):
|
|
||||||
self.doc, self.doclist = d, dl
|
|
||||||
self.entries = []
|
|
||||||
|
|
||||||
def get_period_difference(self,arg, cost_center =''):
|
|
||||||
# used in General Ledger Page Report
|
|
||||||
# used for Budget where cost center passed as extra argument
|
|
||||||
acc, f, t = arg.split('~~~')
|
|
||||||
c, fy = '', get_defaults()['fiscal_year']
|
|
||||||
|
|
||||||
det = webnotes.conn.sql("select debit_or_credit, lft, rgt, is_pl_account from tabAccount where name=%s", acc)
|
|
||||||
if f: c += (' and t1.posting_date >= "%s"' % f)
|
|
||||||
if t: c += (' and t1.posting_date <= "%s"' % t)
|
|
||||||
if cost_center: c += (' and t1.cost_center = "%s"' % cost_center)
|
|
||||||
bal = webnotes.conn.sql("select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) from `tabGL Entry` t1 where t1.account='%s' %s" % (acc, c))
|
|
||||||
bal = bal and flt(bal[0][0]) or 0
|
|
||||||
|
|
||||||
if det[0][0] != 'Debit':
|
|
||||||
bal = (-1) * bal
|
|
||||||
|
|
||||||
return flt(bal)
|
|
||||||
|
|
||||||
def add_ac(self,arg):
|
|
||||||
ac = webnotes.model_wrapper(eval(arg))
|
|
||||||
ac.doc.doctype = "Account"
|
|
||||||
ac.doc.old_parent = ""
|
|
||||||
ac.doc.freeze_account = "No"
|
|
||||||
ac.ignore_permissions = 1
|
|
||||||
ac.insert()
|
|
||||||
|
|
||||||
return ac.doc.name
|
|
||||||
|
|
||||||
def add_cc(self,arg):
|
|
||||||
cc = webnotes.model_wrapper(eval(arg))
|
|
||||||
cc.doc.doctype = "Cost Center"
|
|
||||||
cc.doc.old_parent = ""
|
|
||||||
cc.ignore_permissions = 1
|
|
||||||
cc.insert()
|
|
||||||
|
|
||||||
return cc.doc.name
|
|
||||||
|
|
||||||
def get_advances(self, obj, account_head, table_name,table_field_name, dr_or_cr):
|
|
||||||
jv_detail = webnotes.conn.sql("""select t1.name, t1.remark, t2.%s, t2.name
|
|
||||||
from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2
|
|
||||||
where t1.name = t2.parent
|
|
||||||
and (t2.against_voucher is null or t2.against_voucher = '')
|
|
||||||
and (t2.against_invoice is null or t2.against_invoice = '')
|
|
||||||
and (t2.against_jv is null or t2.against_jv = '')
|
|
||||||
and t2.account = '%s' and t2.is_advance = 'Yes' and t1.docstatus = 1
|
|
||||||
order by t1.posting_date""" % (dr_or_cr,account_head))
|
|
||||||
# clear advance table
|
|
||||||
obj.doclist = obj.doc.clear_table(obj.doclist,table_field_name)
|
|
||||||
# Create advance table
|
|
||||||
for d in jv_detail:
|
|
||||||
add = addchild(obj.doc, table_field_name, table_name, obj.doclist)
|
|
||||||
add.journal_voucher = d[0]
|
|
||||||
add.jv_detail_no = d[3]
|
|
||||||
add.remarks = d[1]
|
|
||||||
add.advance_amount = flt(d[2])
|
|
||||||
add.allocate_amount = 0
|
|
||||||
|
|
||||||
return obj.doclist
|
|
||||||
|
|
||||||
def clear_advances(self, obj,table_name,table_field_name):
|
|
||||||
for d in getlist(obj.doclist,table_field_name):
|
|
||||||
if not flt(d.allocated_amount):
|
|
||||||
webnotes.conn.sql("update `tab%s` set parent = '' where name = '%s' \
|
|
||||||
and parent = '%s'" % (table_name, d.name, d.parent))
|
|
||||||
d.parent = ''
|
|
||||||
|
|
||||||
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',
|
|
||||||
'Sales Invoice' : 'against_invoice',
|
|
||||||
'Purchase Invoice' : '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
|
|
||||||
"""
|
|
||||||
|
|
||||||
webnotes.conn.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 = webnotes.conn.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')
|
|
||||||
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 = webnotes.conn.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)
|
|
||||||
@ -1,24 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"owner": "Administrator",
|
|
||||||
"docstatus": 0,
|
|
||||||
"creation": "2012-03-27 14:35:42",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"modified": "2012-03-27 14:35:42"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"section_style": "Simple",
|
|
||||||
"name": "__common__",
|
|
||||||
"colour": "White:FFF",
|
|
||||||
"module": "Accounts",
|
|
||||||
"show_in_menu": 0,
|
|
||||||
"version": 288,
|
|
||||||
"server_code_error": " ",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"issingle": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "GL Control",
|
|
||||||
"doctype": "DocType"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
[
|
|
||||||
"GL Control",
|
|
||||||
"Accounts"
|
|
||||||
]
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"Accounts": "\u062d\u0633\u0627\u0628\u0627\u062a",
|
|
||||||
"GL Control": "GL \u0627\u0644\u062a\u062d\u0643\u0645"
|
|
||||||
}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"Accounts": "Cuentas",
|
|
||||||
"GL Control": "GL control"
|
|
||||||
}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"Accounts": "Comptes",
|
|
||||||
"GL Control": "GL contr\u00f4le"
|
|
||||||
}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"Accounts": "\u0932\u0947\u0916\u093e",
|
|
||||||
"GL Control": "\u091c\u0940\u090f\u0932 \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923"
|
|
||||||
}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"Accounts": "Accounts",
|
|
||||||
"GL Control": "GL Controle"
|
|
||||||
}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"Accounts": "Contas",
|
|
||||||
"GL Control": "GL Controle"
|
|
||||||
}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"Accounts": "\u0420\u0430\u0447\u0443\u043d\u0438",
|
|
||||||
"GL Control": "\u0413\u041b \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0430"
|
|
||||||
}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"Accounts": "\u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bc1\u0b95\u0bb3\u0bcd",
|
|
||||||
"GL Control": "\u0b9c\u0bc0 \u0b95\u0b9f\u0bcd\u0b9f\u0bc1\u0baa\u0bcd\u0baa\u0bbe\u0b9f\u0bc1"
|
|
||||||
}
|
|
||||||
@ -245,7 +245,7 @@ class DocType(AccountsController):
|
|||||||
d.against_voucher, "debit_to") != d.account:
|
d.against_voucher, "debit_to") != d.account:
|
||||||
msgprint("Credit account is not matching with Purchase Invoice", raise_exception=1)
|
msgprint("Credit account is not matching with Purchase Invoice", raise_exception=1)
|
||||||
|
|
||||||
def make_gl_entries(self, cancel=0):
|
def make_gl_entries(self, cancel=0, adv_adj=0):
|
||||||
from accounts.general_ledger import make_gl_entries
|
from accounts.general_ledger import make_gl_entries
|
||||||
gl_map = []
|
gl_map = []
|
||||||
for d in self.doclist.get({"parentfield": "entries"}):
|
for d in self.doclist.get({"parentfield": "entries"}):
|
||||||
@ -264,7 +264,7 @@ class DocType(AccountsController):
|
|||||||
}, cancel)
|
}, cancel)
|
||||||
)
|
)
|
||||||
|
|
||||||
make_gl_entries(gl_map, cancel=cancel)
|
make_gl_entries(gl_map, cancel=cancel, adv_adj=adv_adj)
|
||||||
|
|
||||||
def get_outstanding(self, args):
|
def get_outstanding(self, args):
|
||||||
args = eval(args)
|
args = eval(args)
|
||||||
|
|||||||
@ -20,7 +20,6 @@ import webnotes
|
|||||||
from webnotes.utils import flt
|
from webnotes.utils import flt
|
||||||
from webnotes.model.doc import addchild
|
from webnotes.model.doc import addchild
|
||||||
from webnotes.model.wrapper import getlist
|
from webnotes.model.wrapper import getlist
|
||||||
from webnotes.model.code import get_obj
|
|
||||||
from webnotes import msgprint
|
from webnotes import msgprint
|
||||||
|
|
||||||
class DocType:
|
class DocType:
|
||||||
@ -137,7 +136,8 @@ class DocType:
|
|||||||
lst.append(args)
|
lst.append(args)
|
||||||
|
|
||||||
if lst:
|
if lst:
|
||||||
get_obj('GL Control').reconcile_against_document(lst)
|
from accounts.utils import reconcile_against_document
|
||||||
|
reconcile_against_document(lst)
|
||||||
msgprint("Successfully allocated.")
|
msgprint("Successfully allocated.")
|
||||||
else:
|
else:
|
||||||
msgprint("No amount allocated.", raise_exception=1)
|
msgprint("No amount allocated.", raise_exception=1)
|
||||||
|
|||||||
@ -20,7 +20,7 @@ import webnotes
|
|||||||
from webnotes.utils import add_days, cint, cstr, flt, formatdate, get_defaults
|
from webnotes.utils import add_days, cint, cstr, flt, formatdate, get_defaults
|
||||||
from webnotes.model.wrapper import getlist
|
from webnotes.model.wrapper import getlist
|
||||||
from webnotes.model.code import get_obj
|
from webnotes.model.code import get_obj
|
||||||
from webnotes import msgprint
|
from webnotes import msgprint, _
|
||||||
from setup.utils import get_company_currency
|
from setup.utils import get_company_currency
|
||||||
|
|
||||||
sql = webnotes.conn.sql
|
sql = webnotes.conn.sql
|
||||||
@ -99,11 +99,9 @@ class DocType(BuyingController):
|
|||||||
d.expense_head = item and item[0]['purchase_account'] or ''
|
d.expense_head = item and item[0]['purchase_account'] or ''
|
||||||
d.cost_center = item and item[0]['cost_center'] or ''
|
d.cost_center = item and item[0]['cost_center'] or ''
|
||||||
|
|
||||||
# Advance Allocation
|
|
||||||
# -------------------
|
|
||||||
def get_advances(self):
|
def get_advances(self):
|
||||||
self.doclist = get_obj('GL Control').get_advances(self, self.doc.credit_to, 'Purchase Invoice Advance','advance_allocation_details','debit')
|
super(DocType, self).get_advances(self.doc.credit_to,
|
||||||
|
"Purchase Invoice Advance", "advance_allocation_details", "debit")
|
||||||
|
|
||||||
def get_rate(self,arg):
|
def get_rate(self,arg):
|
||||||
return get_obj('Purchase Common').get_rate(arg,self)
|
return get_obj('Purchase Common').get_rate(arg,self)
|
||||||
@ -187,16 +185,7 @@ class DocType(BuyingController):
|
|||||||
# ---------------------
|
# ---------------------
|
||||||
def validate_bill_no_date(self):
|
def validate_bill_no_date(self):
|
||||||
if self.doc.bill_no and not self.doc.bill_date and self.doc.bill_no.lower().strip() not in ['na', 'not applicable', 'none']:
|
if self.doc.bill_no and not self.doc.bill_date and self.doc.bill_no.lower().strip() not in ['na', 'not applicable', 'none']:
|
||||||
msgprint("Please enter Bill Date")
|
msgprint(_("Please enter Bill Date"), raise_exception=1)
|
||||||
raise Exception
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Clear Advances
|
|
||||||
# ---------------
|
|
||||||
def clear_advances(self):
|
|
||||||
get_obj('GL Control').clear_advances( self, 'Purchase Invoice Advance','advance_allocation_details')
|
|
||||||
|
|
||||||
|
|
||||||
# 1. Credit To Account Exists
|
# 1. Credit To Account Exists
|
||||||
# 2. Is a Credit Account
|
# 2. Is a Credit Account
|
||||||
@ -326,8 +315,6 @@ class DocType(BuyingController):
|
|||||||
if self.doc.write_off_amount and not self.doc.write_off_account:
|
if self.doc.write_off_amount and not self.doc.write_off_account:
|
||||||
msgprint("Please enter Write Off Account", raise_exception=1)
|
msgprint("Please enter Write Off Account", raise_exception=1)
|
||||||
|
|
||||||
# VALIDATE
|
|
||||||
# ====================================================================================
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
super(DocType, self).validate()
|
super(DocType, self).validate()
|
||||||
|
|
||||||
@ -338,8 +325,8 @@ class DocType(BuyingController):
|
|||||||
self.validate_bill_no_date()
|
self.validate_bill_no_date()
|
||||||
self.validate_bill_no()
|
self.validate_bill_no()
|
||||||
self.validate_reference_value()
|
self.validate_reference_value()
|
||||||
self.clear_advances()
|
|
||||||
self.validate_credit_acc()
|
self.validate_credit_acc()
|
||||||
|
self.clear_unallocated_advances("Purchase Invoice Advance", "advance_allocation_details")
|
||||||
self.check_for_acc_head_of_supplier()
|
self.check_for_acc_head_of_supplier()
|
||||||
self.check_for_stopped_status()
|
self.check_for_stopped_status()
|
||||||
|
|
||||||
@ -406,8 +393,8 @@ class DocType(BuyingController):
|
|||||||
lst.append(args)
|
lst.append(args)
|
||||||
|
|
||||||
if lst:
|
if lst:
|
||||||
get_obj('GL Control').reconcile_against_document(lst)
|
from accounts.utils import reconcile_against_document
|
||||||
|
reconcile_against_document(lst)
|
||||||
|
|
||||||
def on_submit(self):
|
def on_submit(self):
|
||||||
purchase_controller = webnotes.get_obj("Purchase Common")
|
purchase_controller = webnotes.get_obj("Purchase Common")
|
||||||
|
|||||||
@ -50,13 +50,15 @@ class DocType(SellingController):
|
|||||||
sales_com_obj.check_stop_sales_order(self)
|
sales_com_obj.check_stop_sales_order(self)
|
||||||
sales_com_obj.check_active_sales_items(self)
|
sales_com_obj.check_active_sales_items(self)
|
||||||
sales_com_obj.check_conversion_rate(self)
|
sales_com_obj.check_conversion_rate(self)
|
||||||
sales_com_obj.validate_max_discount(self, 'entries') #verify whether rate is not greater than tolerance
|
sales_com_obj.validate_max_discount(self, 'entries')
|
||||||
sales_com_obj.get_allocated_sum(self) # this is to verify that the allocated % of sales persons is 100%
|
sales_com_obj.get_allocated_sum(self)
|
||||||
sales_com_obj.validate_fiscal_year(self.doc.fiscal_year,self.doc.posting_date,'Posting Date')
|
sales_com_obj.validate_fiscal_year(self.doc.fiscal_year,
|
||||||
|
self.doc.posting_date,'Posting Date')
|
||||||
self.validate_customer()
|
self.validate_customer()
|
||||||
self.validate_customer_account()
|
self.validate_customer_account()
|
||||||
self.validate_debit_acc()
|
self.validate_debit_acc()
|
||||||
self.validate_fixed_asset_account()
|
self.validate_fixed_asset_account()
|
||||||
|
self.clear_unallocated_advances("Sales Invoice Advance", "advance_adjustment_details")
|
||||||
self.add_remarks()
|
self.add_remarks()
|
||||||
if cint(self.doc.is_pos):
|
if cint(self.doc.is_pos):
|
||||||
self.validate_pos()
|
self.validate_pos()
|
||||||
@ -71,7 +73,6 @@ class DocType(SellingController):
|
|||||||
if not self.doc.is_opening:
|
if not self.doc.is_opening:
|
||||||
self.doc.is_opening = 'No'
|
self.doc.is_opening = 'No'
|
||||||
self.set_aging_date()
|
self.set_aging_date()
|
||||||
self.clear_advances()
|
|
||||||
self.set_against_income_account()
|
self.set_against_income_account()
|
||||||
self.validate_c_form()
|
self.validate_c_form()
|
||||||
self.validate_recurring_invoice()
|
self.validate_recurring_invoice()
|
||||||
@ -90,12 +91,13 @@ class DocType(SellingController):
|
|||||||
else:
|
else:
|
||||||
# Check for Approving Authority
|
# Check for Approving Authority
|
||||||
if not self.doc.recurring_id:
|
if not self.doc.recurring_id:
|
||||||
get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.company, self.doc.grand_total, self)
|
get_obj('Authorization Control').validate_approving_authority(self.doc.doctype,
|
||||||
|
self.doc.company, self.doc.grand_total, self)
|
||||||
|
|
||||||
self.check_prev_docstatus()
|
self.check_prev_docstatus()
|
||||||
get_obj("Sales Common").update_prevdoc_detail(1,self)
|
get_obj("Sales Common").update_prevdoc_detail(1,self)
|
||||||
|
|
||||||
# this sequence because outstanding may get -ve
|
# this sequence because outstanding may get -ve
|
||||||
self.make_gl_entries()
|
self.make_gl_entries()
|
||||||
|
|
||||||
if not cint(self.doc.is_pos) == 1:
|
if not cint(self.doc.is_pos) == 1:
|
||||||
@ -194,13 +196,17 @@ class DocType(SellingController):
|
|||||||
|
|
||||||
def get_cust_and_due_date(self):
|
def get_cust_and_due_date(self):
|
||||||
"""Set Due Date = Posting Date + Credit Days"""
|
"""Set Due Date = Posting Date + Credit Days"""
|
||||||
credit_days = 0
|
if self.doc.posting_date:
|
||||||
if self.doc.debit_to:
|
credit_days = 0
|
||||||
credit_days = webnotes.conn.get_value("Account", self.doc.debit_to, "credit_days")
|
if self.doc.debit_to:
|
||||||
if self.doc.company and not credit_days:
|
credit_days = webnotes.conn.get_value("Account", self.doc.debit_to, "credit_days")
|
||||||
credit_days = webnotes.conn.get_value("Company", self.doc.company, "credit_days")
|
if self.doc.company and not credit_days:
|
||||||
|
credit_days = webnotes.conn.get_value("Company", self.doc.company, "credit_days")
|
||||||
self.doc.due_date = add_days(cstr(self.doc.posting_date), credit_days)
|
|
||||||
|
if credit_days:
|
||||||
|
self.doc.due_date = add_days(self.doc.posting_date, credit_days)
|
||||||
|
else:
|
||||||
|
self.doc.due_date = self.doc.posting_date
|
||||||
|
|
||||||
if self.doc.debit_to:
|
if self.doc.debit_to:
|
||||||
self.doc.customer = webnotes.conn.get_value('Account',self.doc.debit_to,'master_name')
|
self.doc.customer = webnotes.conn.get_value('Account',self.doc.debit_to,'master_name')
|
||||||
@ -326,8 +332,9 @@ class DocType(SellingController):
|
|||||||
|
|
||||||
|
|
||||||
def get_advances(self):
|
def get_advances(self):
|
||||||
self.doclist = get_obj('GL Control').get_advances(self, self.doc.debit_to, 'Sales Invoice Advance', 'advance_adjustment_details', 'credit')
|
super(DocType, self).get_advances(self.doc.debit_to,
|
||||||
|
"Sales Invoice Advance", "advance_adjustment_details", "credit")
|
||||||
|
|
||||||
def get_company_abbr(self):
|
def get_company_abbr(self):
|
||||||
return webnotes.conn.sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0]
|
return webnotes.conn.sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0]
|
||||||
|
|
||||||
@ -368,7 +375,8 @@ class DocType(SellingController):
|
|||||||
lst.append(args)
|
lst.append(args)
|
||||||
|
|
||||||
if lst:
|
if lst:
|
||||||
get_obj('GL Control').reconcile_against_document(lst)
|
from accounts.utils import reconcile_against_document
|
||||||
|
reconcile_against_document(lst)
|
||||||
|
|
||||||
|
|
||||||
def validate_customer(self):
|
def validate_customer(self):
|
||||||
@ -418,10 +426,6 @@ class DocType(SellingController):
|
|||||||
msgprint("Please select income head with account type 'Fixed Asset Account' as Item %s is an asset item" % d.item_code)
|
msgprint("Please select income head with account type 'Fixed Asset Account' as Item %s is an asset item" % d.item_code)
|
||||||
raise Exception
|
raise Exception
|
||||||
|
|
||||||
def clear_advances(self):
|
|
||||||
get_obj('GL Control').clear_advances(self, 'Sales Invoice Advance','advance_adjustment_details')
|
|
||||||
|
|
||||||
|
|
||||||
def set_aging_date(self):
|
def set_aging_date(self):
|
||||||
if self.doc.is_opening != 'Yes':
|
if self.doc.is_opening != 'Yes':
|
||||||
self.doc.aging_date = self.doc.posting_date
|
self.doc.aging_date = self.doc.posting_date
|
||||||
|
|||||||
@ -236,12 +236,15 @@ erpnext.AccountsChart = Class.extend({
|
|||||||
v.master_type = '';
|
v.master_type = '';
|
||||||
v.company = me.company;
|
v.company = me.company;
|
||||||
|
|
||||||
$c_obj('GL Control', 'add_ac', v,
|
wn.call({
|
||||||
function(r,rt) {
|
args: v,
|
||||||
|
method:'accounts.utils.add_ac',
|
||||||
|
callback: function(r) {
|
||||||
$(btn).done_working();
|
$(btn).done_working();
|
||||||
d.hide();
|
d.hide();
|
||||||
node.trigger('reload');
|
node.trigger('reload');
|
||||||
});
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// show
|
// show
|
||||||
@ -280,12 +283,15 @@ erpnext.AccountsChart = Class.extend({
|
|||||||
v.parent_cost_center = node.data('label');
|
v.parent_cost_center = node.data('label');
|
||||||
v.company_name = me.company;
|
v.company_name = me.company;
|
||||||
|
|
||||||
$c_obj('GL Control', 'add_cc', v,
|
wn.call({
|
||||||
function(r,rt) {
|
args: v,
|
||||||
|
method:'accounts.utils.add_cc',
|
||||||
|
callback: function(r) {
|
||||||
$(btn).done_working();
|
$(btn).done_working();
|
||||||
d.hide();
|
d.hide();
|
||||||
node.trigger('reload');
|
node.trigger('reload');
|
||||||
});
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
d.show();
|
d.show();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,7 +17,9 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import webnotes
|
import webnotes
|
||||||
from webnotes.utils import nowdate
|
from webnotes.utils import nowdate, cstr, flt
|
||||||
|
from webnotes.model.doc import addchild
|
||||||
|
from webnotes import msgprint, _
|
||||||
|
|
||||||
class FiscalYearError(webnotes.ValidationError): pass
|
class FiscalYearError(webnotes.ValidationError): pass
|
||||||
|
|
||||||
@ -96,4 +98,102 @@ def get_balance_on(account=None, date=None):
|
|||||||
bal = -bal
|
bal = -bal
|
||||||
|
|
||||||
# if bal is None, return 0
|
# if bal is None, return 0
|
||||||
return bal or 0
|
return bal or 0
|
||||||
|
|
||||||
|
@webnotes.whitelist()
|
||||||
|
def add_ac(args=None):
|
||||||
|
if not args:
|
||||||
|
args = webnotes.form_dict
|
||||||
|
args.pop("cmd")
|
||||||
|
|
||||||
|
ac = webnotes.model_wrapper(args)
|
||||||
|
ac.doc.doctype = "Account"
|
||||||
|
ac.doc.old_parent = ""
|
||||||
|
ac.doc.freeze_account = "No"
|
||||||
|
ac.ignore_permissions = 1
|
||||||
|
ac.insert()
|
||||||
|
return ac.doc.name
|
||||||
|
|
||||||
|
@webnotes.whitelist()
|
||||||
|
def add_cc(args=None):
|
||||||
|
if not args:
|
||||||
|
args = webnotes.form_dict
|
||||||
|
args.pop("cmd")
|
||||||
|
|
||||||
|
cc = webnotes.model_wrapper(args)
|
||||||
|
cc.doc.doctype = "Cost Center"
|
||||||
|
cc.doc.old_parent = ""
|
||||||
|
cc.ignore_permissions = 1
|
||||||
|
cc.insert()
|
||||||
|
return cc.doc.name
|
||||||
|
|
||||||
|
def reconcile_against_document(args):
|
||||||
|
"""
|
||||||
|
Cancel JV, Update aginst document, split if required and resubmit jv
|
||||||
|
"""
|
||||||
|
for d in args:
|
||||||
|
check_if_jv_modified(d)
|
||||||
|
|
||||||
|
against_fld = {
|
||||||
|
'Journal Voucher' : 'against_jv',
|
||||||
|
'Sales Invoice' : 'against_invoice',
|
||||||
|
'Purchase Invoice' : 'against_voucher'
|
||||||
|
}
|
||||||
|
|
||||||
|
d['against_fld'] = against_fld[d['against_voucher_type']]
|
||||||
|
|
||||||
|
# cancel JV
|
||||||
|
jv_obj = webnotes.get_obj('Journal Voucher', d['voucher_no'], with_children=1)
|
||||||
|
jv_obj.make_gl_entries(cancel=1, adv_adj=1)
|
||||||
|
|
||||||
|
# update ref in JV Detail
|
||||||
|
update_against_doc(d, jv_obj)
|
||||||
|
|
||||||
|
# re-submit JV
|
||||||
|
jv_obj = webnotes.get_obj('Journal Voucher', d['voucher_no'], with_children =1)
|
||||||
|
jv_obj.make_gl_entries(cancel = 0, adv_adj =1)
|
||||||
|
|
||||||
|
|
||||||
|
def check_if_jv_modified(args):
|
||||||
|
"""
|
||||||
|
check if there is already a voucher reference
|
||||||
|
check if amount is same
|
||||||
|
check if jv is submitted
|
||||||
|
"""
|
||||||
|
ret = webnotes.conn.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)
|
||||||
|
|
||||||
|
def update_against_doc(d, jv_obj):
|
||||||
|
"""
|
||||||
|
Updates against document, if partial amount splits into rows
|
||||||
|
"""
|
||||||
|
|
||||||
|
webnotes.conn.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 = webnotes.conn.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')
|
||||||
|
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)
|
||||||
@ -17,13 +17,13 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import webnotes
|
import webnotes
|
||||||
|
|
||||||
from webnotes.utils import cstr, cint, get_defaults
|
from webnotes.utils import cint, get_defaults
|
||||||
from webnotes.model.code import get_obj
|
|
||||||
from webnotes import msgprint, _
|
from webnotes import msgprint, _
|
||||||
from webnotes.model.doc import make_autoname
|
from webnotes.model.doc import make_autoname
|
||||||
|
|
||||||
sql = webnotes.conn.sql
|
sql = webnotes.conn.sql
|
||||||
|
|
||||||
|
from accounts.utils import add_ac
|
||||||
from utilities.transaction_base import TransactionBase
|
from utilities.transaction_base import TransactionBase
|
||||||
|
|
||||||
class DocType(TransactionBase):
|
class DocType(TransactionBase):
|
||||||
@ -70,16 +70,16 @@ class DocType(TransactionBase):
|
|||||||
return g
|
return g
|
||||||
|
|
||||||
def add_account(self, ac, par, abbr):
|
def add_account(self, ac, par, abbr):
|
||||||
arg = {
|
ac = add_ac({
|
||||||
'account_name':ac,
|
'account_name':ac,
|
||||||
'parent_account':par,
|
'parent_account':par,
|
||||||
'group_or_ledger':'Group',
|
'group_or_ledger':'Group',
|
||||||
'company':self.doc.company,
|
'company':self.doc.company,
|
||||||
'account_type':'',
|
'account_type':'',
|
||||||
'tax_rate':'0'
|
'tax_rate':'0'
|
||||||
}
|
})
|
||||||
t = get_obj('GL Control').add_ac(cstr(arg))
|
|
||||||
msgprint("Created Group " + t)
|
msgprint(_("Created Group ") + ac)
|
||||||
|
|
||||||
def get_company_abbr(self):
|
def get_company_abbr(self):
|
||||||
return sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0]
|
return sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0]
|
||||||
@ -109,7 +109,7 @@ class DocType(TransactionBase):
|
|||||||
if not sql("select name from tabAccount where name=%s", (self.doc.name + " - " + abbr)):
|
if not sql("select name from tabAccount where name=%s", (self.doc.name + " - " + abbr)):
|
||||||
parent_account = self.get_parent_account(abbr)
|
parent_account = self.get_parent_account(abbr)
|
||||||
|
|
||||||
arg = {
|
ac = add_ac({
|
||||||
'account_name': self.doc.name,
|
'account_name': self.doc.name,
|
||||||
'parent_account': parent_account,
|
'parent_account': parent_account,
|
||||||
'group_or_ledger':'Ledger',
|
'group_or_ledger':'Ledger',
|
||||||
@ -118,10 +118,8 @@ class DocType(TransactionBase):
|
|||||||
'tax_rate': '0',
|
'tax_rate': '0',
|
||||||
'master_type': 'Supplier',
|
'master_type': 'Supplier',
|
||||||
'master_name': self.doc.name,
|
'master_name': self.doc.name,
|
||||||
}
|
})
|
||||||
# create
|
msgprint(_("Created Account Head: ") + ac)
|
||||||
ac = get_obj('GL Control').add_ac(cstr(arg))
|
|
||||||
msgprint("Created Account Head: "+ac)
|
|
||||||
|
|
||||||
else :
|
else :
|
||||||
msgprint("Please select Company under which you want to create account head")
|
msgprint("Please select Company under which you want to create account head")
|
||||||
|
|||||||
@ -16,7 +16,8 @@
|
|||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import webnotes
|
import webnotes
|
||||||
|
from webnotes.utils import flt
|
||||||
|
from webnotes.model.doc import addchild
|
||||||
from utilities.transaction_base import TransactionBase
|
from utilities.transaction_base import TransactionBase
|
||||||
|
|
||||||
class AccountsController(TransactionBase):
|
class AccountsController(TransactionBase):
|
||||||
@ -37,15 +38,39 @@ class AccountsController(TransactionBase):
|
|||||||
}
|
}
|
||||||
gl_dict.update(args)
|
gl_dict.update(args)
|
||||||
return gl_dict
|
return gl_dict
|
||||||
|
|
||||||
def get_company_abbr(self):
|
|
||||||
return webnotes.conn.get_value("Company", self.doc.company, "abbr")
|
|
||||||
|
|
||||||
def get_stock_in_hand_account(self):
|
def get_stock_in_hand_account(self):
|
||||||
stock_in_hand = webnotes.conn.get_value("Company", self.doc.company, "stock_in_hand")
|
stock_in_hand = webnotes.conn.get_value("Company", self.doc.company, "stock_in_hand")
|
||||||
|
|
||||||
if not stock_in_hand:
|
if not stock_in_hand:
|
||||||
webnotes.msgprint("""Please specify "Stock In Hand" account
|
webnotes.msgprint("""Please specify "Stock In Hand" account
|
||||||
for company: %s""" % (self.doc.company,), raise_exception=1)
|
for company: %s""" % (self.doc.company,), raise_exception=1)
|
||||||
|
|
||||||
return stock_in_hand
|
return stock_in_hand
|
||||||
|
|
||||||
|
def clear_unallocated_advances(self, parenttype, parentfield):
|
||||||
|
for d in self.doclist:
|
||||||
|
if d.parentfield == parentfield and flt(d.allocated_amount) == 0:
|
||||||
|
self.doclist.remove(d)
|
||||||
|
|
||||||
|
webnotes.conn.sql("""delete from `tab%s` where parent = %s
|
||||||
|
and ifnull(allocated_amount, 0) = 0""" % (parenttype, '%s'), self.doc.name)
|
||||||
|
|
||||||
|
def get_advances(self, account_head, parenttype, parentfield, dr_or_cr):
|
||||||
|
res = webnotes.conn.sql("""select t1.name as jv_no, t1.remark,
|
||||||
|
t2.%s as amount, t2.name as jv_detail_no
|
||||||
|
from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2
|
||||||
|
where t1.name = t2.parent and t2.account = %s and t2.is_advance = 'Yes'
|
||||||
|
and (t2.against_voucher is null or t2.against_voucher = '')
|
||||||
|
and (t2.against_invoice is null or t2.against_invoice = '')
|
||||||
|
and (t2.against_jv is null or t2.against_jv = '')
|
||||||
|
and t1.docstatus = 1 order by t1.posting_date""" %
|
||||||
|
(dr_or_cr, '%s'), account_head, as_dict=1)
|
||||||
|
|
||||||
|
self.doclist = self.doc.clear_table(self.doclist, parentfield)
|
||||||
|
for d in res:
|
||||||
|
add = addchild(self.doc, parentfield, parenttype, self.doclist)
|
||||||
|
add.journal_voucher = d.jv_no
|
||||||
|
add.jv_detail_no = d.jv_detail_no
|
||||||
|
add.remarks = d.remark
|
||||||
|
add.advance_amount = flt(d.amount)
|
||||||
|
add.allocate_amount = 0
|
||||||
@ -25,7 +25,7 @@ from setup.utils import get_company_currency
|
|||||||
from controllers.accounts_controller import AccountsController
|
from controllers.accounts_controller import AccountsController
|
||||||
|
|
||||||
class BuyingController(AccountsController):
|
class BuyingController(AccountsController):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
if self.meta.get_field("currency"):
|
if self.meta.get_field("currency"):
|
||||||
self.company_currency = get_company_currency(self.doc.company)
|
self.company_currency = get_company_currency(self.doc.company)
|
||||||
self.validate_conversion_rate("currency", "conversion_rate")
|
self.validate_conversion_rate("currency", "conversion_rate")
|
||||||
|
|||||||
@ -19,7 +19,6 @@ import webnotes
|
|||||||
|
|
||||||
from webnotes.utils import cstr, get_defaults
|
from webnotes.utils import cstr, get_defaults
|
||||||
from webnotes.model.doc import Document, make_autoname
|
from webnotes.model.doc import Document, make_autoname
|
||||||
from webnotes.model.code import get_obj
|
|
||||||
from webnotes import msgprint, _
|
from webnotes import msgprint, _
|
||||||
|
|
||||||
sql = webnotes.conn.sql
|
sql = webnotes.conn.sql
|
||||||
@ -55,7 +54,6 @@ class DocType(TransactionBase):
|
|||||||
return g
|
return g
|
||||||
|
|
||||||
def validate_values(self):
|
def validate_values(self):
|
||||||
# Master name by naming series -> Series field mandatory
|
|
||||||
if get_defaults().get('cust_master_name') == 'Naming Series' and not self.doc.naming_series:
|
if get_defaults().get('cust_master_name') == 'Naming Series' and not self.doc.naming_series:
|
||||||
msgprint("Series is Mandatory.")
|
msgprint("Series is Mandatory.")
|
||||||
raise Exception
|
raise Exception
|
||||||
@ -113,13 +111,21 @@ class DocType(TransactionBase):
|
|||||||
def create_account_head(self):
|
def create_account_head(self):
|
||||||
if self.doc.company :
|
if self.doc.company :
|
||||||
abbr = self.get_company_abbr()
|
abbr = self.get_company_abbr()
|
||||||
if not sql("select name from tabAccount where name=%s", (self.doc.name + " - " + abbr)):
|
if not webnotes.conn.exists("Account", (self.doc.name + " - " + abbr)):
|
||||||
parent_account = self.get_receivables_group()
|
parent_account = self.get_receivables_group()
|
||||||
arg = {'account_name':self.doc.name,'parent_account': parent_account, 'group_or_ledger':'Ledger', 'company':self.doc.company,'account_type':'','tax_rate':'0','master_type':'Customer','master_name':self.doc.name}
|
|
||||||
# create
|
# create
|
||||||
|
from accounts.utils import add_ac
|
||||||
ac = get_obj('GL Control').add_ac(cstr(arg))
|
ac = add_ac({
|
||||||
msgprint("Account Head created for "+ac)
|
'account_name':self.doc.name,
|
||||||
|
'parent_account': parent_account,
|
||||||
|
'group_or_ledger':'Ledger',
|
||||||
|
'company':self.doc.company,
|
||||||
|
'account_type':'',
|
||||||
|
'tax_rate':'0',
|
||||||
|
'master_type':'Customer',
|
||||||
|
'master_name':self.doc.name
|
||||||
|
})
|
||||||
|
msgprint("Account Head: %s created" % ac)
|
||||||
else :
|
else :
|
||||||
msgprint("Please Select Company under which you want to create account head")
|
msgprint("Please Select Company under which you want to create account head")
|
||||||
|
|
||||||
|
|||||||
@ -18,11 +18,8 @@ from __future__ import unicode_literals
|
|||||||
import webnotes
|
import webnotes
|
||||||
|
|
||||||
from webnotes.utils import cstr, get_defaults, set_default
|
from webnotes.utils import cstr, get_defaults, set_default
|
||||||
from webnotes.model import db_exists
|
|
||||||
from webnotes.model.doc import Document
|
from webnotes.model.doc import Document
|
||||||
from webnotes.model.wrapper import copy_doclist
|
|
||||||
from webnotes.model.code import get_obj
|
from webnotes.model.code import get_obj
|
||||||
from webnotes import msgprint
|
|
||||||
|
|
||||||
sql = webnotes.conn.sql
|
sql = webnotes.conn.sql
|
||||||
|
|
||||||
@ -197,11 +194,23 @@ class DocType:
|
|||||||
# Create default cost center
|
# Create default cost center
|
||||||
# ---------------------------------------------------
|
# ---------------------------------------------------
|
||||||
def create_default_cost_center(self):
|
def create_default_cost_center(self):
|
||||||
glc = get_obj('GL Control')
|
from accounts.utils import add_cc
|
||||||
cc_list = [{'cost_center_name':'Root','company_name':self.doc.name,'group_or_ledger':'Group','parent_cost_center':''}, {'cost_center_name':'Default CC Ledger','company_name':self.doc.name,'group_or_ledger':'Ledger','parent_cost_center':'Root - ' + self.doc.abbr}]
|
cc_list = [
|
||||||
for c in cc_list:
|
{
|
||||||
glc.add_cc(str(c))
|
'cost_center_name':'Root',
|
||||||
|
'company_name':self.doc.name,
|
||||||
|
'group_or_ledger':'Group',
|
||||||
|
'parent_cost_center':''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'cost_center_name':'Default CC Ledger',
|
||||||
|
'company_name':self.doc.name,
|
||||||
|
'group_or_ledger':'Ledger',
|
||||||
|
'parent_cost_center':'Root - ' + self.doc.abbr
|
||||||
|
}
|
||||||
|
]
|
||||||
|
for cc in cc_list:
|
||||||
|
add_cc(cc)
|
||||||
|
|
||||||
def on_update(self):
|
def on_update(self):
|
||||||
self.set_letter_head()
|
self.set_letter_head()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user