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'])
|
||||
|
||||
# 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)
|
@ -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:
|
||||
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)
|
||||
|
@ -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)
|
||||
|
@ -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")
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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)
|
@ -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")
|
||||
|
@ -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
|
@ -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")
|
||||
|
@ -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")
|
||||
|
||||
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user