deprecated gl_control and some rewrites

This commit is contained in:
Nabin Hait 2013-01-30 19:16:13 +05:30
parent c6a86535ef
commit fb3fd6e3e5
24 changed files with 242 additions and 313 deletions

View File

@ -74,7 +74,7 @@ class DocType:
end_date = webnotes.conn.sql("select LAST_DAY('%s')" % gle['posting_date'])
# 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'])
# Get Monthly budget
@ -89,3 +89,22 @@ class DocType:
webnotes.conn.sql("""update `tabBudget Detail` set actual = ifnull(actual,0) + %s
where account = '%s' and fiscal_year = '%s' and parent = '%s'""" %
(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)

View File

@ -1 +0,0 @@
from __future__ import unicode_literals

View File

@ -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)

View File

@ -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"
}
]

View File

@ -1,4 +0,0 @@
[
"GL Control",
"Accounts"
]

View File

@ -1,4 +0,0 @@
{
"Accounts": "\u062d\u0633\u0627\u0628\u0627\u062a",
"GL Control": "GL \u0627\u0644\u062a\u062d\u0643\u0645"
}

View File

@ -1,4 +0,0 @@
{
"Accounts": "Cuentas",
"GL Control": "GL control"
}

View File

@ -1,4 +0,0 @@
{
"Accounts": "Comptes",
"GL Control": "GL contr\u00f4le"
}

View File

@ -1,4 +0,0 @@
{
"Accounts": "\u0932\u0947\u0916\u093e",
"GL Control": "\u091c\u0940\u090f\u0932 \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923"
}

View File

@ -1,4 +0,0 @@
{
"Accounts": "Accounts",
"GL Control": "GL Controle"
}

View File

@ -1,4 +0,0 @@
{
"Accounts": "Contas",
"GL Control": "GL Controle"
}

View File

@ -1,4 +0,0 @@
{
"Accounts": "\u0420\u0430\u0447\u0443\u043d\u0438",
"GL Control": "\u0413\u041b \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0430"
}

View File

@ -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"
}

View File

@ -245,7 +245,7 @@ class DocType(AccountsController):
d.against_voucher, "debit_to") != d.account:
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
gl_map = []
for d in self.doclist.get({"parentfield": "entries"}):
@ -264,7 +264,7 @@ class DocType(AccountsController):
}, cancel)
)
make_gl_entries(gl_map, cancel=cancel)
make_gl_entries(gl_map, cancel=cancel, adv_adj=adv_adj)
def get_outstanding(self, args):
args = eval(args)

View File

@ -20,7 +20,6 @@ import webnotes
from webnotes.utils import flt
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:
@ -137,7 +136,8 @@ class DocType:
lst.append(args)
if lst:
get_obj('GL Control').reconcile_against_document(lst)
from accounts.utils import reconcile_against_document
reconcile_against_document(lst)
msgprint("Successfully allocated.")
else:
msgprint("No amount allocated.", raise_exception=1)

View File

@ -20,7 +20,7 @@ import webnotes
from webnotes.utils import add_days, cint, cstr, flt, formatdate, get_defaults
from webnotes.model.wrapper import getlist
from webnotes.model.code import get_obj
from webnotes import msgprint
from webnotes import msgprint, _
from setup.utils import get_company_currency
sql = webnotes.conn.sql
@ -99,11 +99,9 @@ class DocType(BuyingController):
d.expense_head = item and item[0]['purchase_account'] or ''
d.cost_center = item and item[0]['cost_center'] or ''
# Advance Allocation
# -------------------
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):
return get_obj('Purchase Common').get_rate(arg,self)
@ -187,16 +185,7 @@ class DocType(BuyingController):
# ---------------------
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']:
msgprint("Please enter Bill Date")
raise Exception
# Clear Advances
# ---------------
def clear_advances(self):
get_obj('GL Control').clear_advances( self, 'Purchase Invoice Advance','advance_allocation_details')
msgprint(_("Please enter Bill Date"), raise_exception=1)
# 1. Credit To Account Exists
# 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:
msgprint("Please enter Write Off Account", raise_exception=1)
# VALIDATE
# ====================================================================================
def validate(self):
super(DocType, self).validate()
@ -338,8 +325,8 @@ class DocType(BuyingController):
self.validate_bill_no_date()
self.validate_bill_no()
self.validate_reference_value()
self.clear_advances()
self.validate_credit_acc()
self.clear_unallocated_advances("Purchase Invoice Advance", "advance_allocation_details")
self.check_for_acc_head_of_supplier()
self.check_for_stopped_status()
@ -406,8 +393,8 @@ class DocType(BuyingController):
lst.append(args)
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):
purchase_controller = webnotes.get_obj("Purchase Common")

View File

@ -50,13 +50,15 @@ class DocType(SellingController):
sales_com_obj.check_stop_sales_order(self)
sales_com_obj.check_active_sales_items(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.get_allocated_sum(self) # this is to verify that the allocated % of sales persons is 100%
sales_com_obj.validate_fiscal_year(self.doc.fiscal_year,self.doc.posting_date,'Posting Date')
sales_com_obj.validate_max_discount(self, 'entries')
sales_com_obj.get_allocated_sum(self)
sales_com_obj.validate_fiscal_year(self.doc.fiscal_year,
self.doc.posting_date,'Posting Date')
self.validate_customer()
self.validate_customer_account()
self.validate_debit_acc()
self.validate_fixed_asset_account()
self.clear_unallocated_advances("Sales Invoice Advance", "advance_adjustment_details")
self.add_remarks()
if cint(self.doc.is_pos):
self.validate_pos()
@ -71,7 +73,6 @@ class DocType(SellingController):
if not self.doc.is_opening:
self.doc.is_opening = 'No'
self.set_aging_date()
self.clear_advances()
self.set_against_income_account()
self.validate_c_form()
self.validate_recurring_invoice()
@ -90,12 +91,13 @@ class DocType(SellingController):
else:
# Check for Approving Authority
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()
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()
if not cint(self.doc.is_pos) == 1:
@ -194,13 +196,17 @@ class DocType(SellingController):
def get_cust_and_due_date(self):
"""Set Due Date = Posting Date + Credit Days"""
credit_days = 0
if self.doc.debit_to:
credit_days = webnotes.conn.get_value("Account", self.doc.debit_to, "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 self.doc.posting_date:
credit_days = 0
if self.doc.debit_to:
credit_days = webnotes.conn.get_value("Account", self.doc.debit_to, "credit_days")
if self.doc.company and not credit_days:
credit_days = webnotes.conn.get_value("Company", self.doc.company, "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:
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):
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):
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)
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):
@ -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)
raise Exception
def clear_advances(self):
get_obj('GL Control').clear_advances(self, 'Sales Invoice Advance','advance_adjustment_details')
def set_aging_date(self):
if self.doc.is_opening != 'Yes':
self.doc.aging_date = self.doc.posting_date

View File

@ -236,12 +236,15 @@ erpnext.AccountsChart = Class.extend({
v.master_type = '';
v.company = me.company;
$c_obj('GL Control', 'add_ac', v,
function(r,rt) {
wn.call({
args: v,
method:'accounts.utils.add_ac',
callback: function(r) {
$(btn).done_working();
d.hide();
node.trigger('reload');
});
node.trigger('reload');
}
});
});
// show
@ -280,12 +283,15 @@ erpnext.AccountsChart = Class.extend({
v.parent_cost_center = node.data('label');
v.company_name = me.company;
$c_obj('GL Control', 'add_cc', v,
function(r,rt) {
wn.call({
args: v,
method:'accounts.utils.add_cc',
callback: function(r) {
$(btn).done_working();
d.hide();
node.trigger('reload');
});
node.trigger('reload');
}
});
});
d.show();
}

View File

@ -17,7 +17,9 @@
from __future__ import unicode_literals
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
@ -96,4 +98,102 @@ def get_balance_on(account=None, date=None):
bal = -bal
# 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)

View File

@ -17,13 +17,13 @@
from __future__ import unicode_literals
import webnotes
from webnotes.utils import cstr, cint, get_defaults
from webnotes.model.code import get_obj
from webnotes.utils import cint, get_defaults
from webnotes import msgprint, _
from webnotes.model.doc import make_autoname
sql = webnotes.conn.sql
from accounts.utils import add_ac
from utilities.transaction_base import TransactionBase
class DocType(TransactionBase):
@ -70,16 +70,16 @@ class DocType(TransactionBase):
return g
def add_account(self, ac, par, abbr):
arg = {
ac = add_ac({
'account_name':ac,
'parent_account':par,
'group_or_ledger':'Group',
'company':self.doc.company,
'account_type':'',
'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):
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)):
parent_account = self.get_parent_account(abbr)
arg = {
ac = add_ac({
'account_name': self.doc.name,
'parent_account': parent_account,
'group_or_ledger':'Ledger',
@ -118,10 +118,8 @@ class DocType(TransactionBase):
'tax_rate': '0',
'master_type': 'Supplier',
'master_name': self.doc.name,
}
# create
ac = get_obj('GL Control').add_ac(cstr(arg))
msgprint("Created Account Head: "+ac)
})
msgprint(_("Created Account Head: ") + ac)
else :
msgprint("Please select Company under which you want to create account head")

View File

@ -16,7 +16,8 @@
from __future__ import unicode_literals
import webnotes
from webnotes.utils import flt
from webnotes.model.doc import addchild
from utilities.transaction_base import TransactionBase
class AccountsController(TransactionBase):
@ -37,15 +38,39 @@ class AccountsController(TransactionBase):
}
gl_dict.update(args)
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):
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:
webnotes.msgprint("""Please specify "Stock In Hand" account
for company: %s""" % (self.doc.company,), raise_exception=1)
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

View File

@ -25,7 +25,7 @@ from setup.utils import get_company_currency
from controllers.accounts_controller import AccountsController
class BuyingController(AccountsController):
def validate(self):
def validate(self):
if self.meta.get_field("currency"):
self.company_currency = get_company_currency(self.doc.company)
self.validate_conversion_rate("currency", "conversion_rate")

View File

@ -19,7 +19,6 @@ import webnotes
from webnotes.utils import cstr, get_defaults
from webnotes.model.doc import Document, make_autoname
from webnotes.model.code import get_obj
from webnotes import msgprint, _
sql = webnotes.conn.sql
@ -55,7 +54,6 @@ class DocType(TransactionBase):
return g
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:
msgprint("Series is Mandatory.")
raise Exception
@ -113,13 +111,21 @@ class DocType(TransactionBase):
def create_account_head(self):
if self.doc.company :
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()
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
ac = get_obj('GL Control').add_ac(cstr(arg))
msgprint("Account Head created for "+ac)
from accounts.utils import add_ac
ac = add_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 :
msgprint("Please Select Company under which you want to create account head")

View File

@ -18,11 +18,8 @@ from __future__ import unicode_literals
import webnotes
from webnotes.utils import cstr, get_defaults, set_default
from webnotes.model import db_exists
from webnotes.model.doc import Document
from webnotes.model.wrapper import copy_doclist
from webnotes.model.code import get_obj
from webnotes import msgprint
sql = webnotes.conn.sql
@ -197,11 +194,23 @@ class DocType:
# Create default cost center
# ---------------------------------------------------
def create_default_cost_center(self):
glc = get_obj('GL Control')
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}]
for c in cc_list:
glc.add_cc(str(c))
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
}
]
for cc in cc_list:
add_cc(cc)
def on_update(self):
self.set_letter_head()