Merge branch 'master' of github.com:webnotes/erpnext
This commit is contained in:
commit
c919d2579e
@ -3,24 +3,24 @@
|
||||
|
||||
# These values are common in all dictionaries
|
||||
{
|
||||
'creation': '2012-04-23 11:43:56',
|
||||
'docstatus': 0,
|
||||
'modified': '2012-04-23 11:43:56',
|
||||
'modified_by': u'Administrator',
|
||||
'owner': u'Administrator'
|
||||
u'creation': '2012-04-30 19:55:05',
|
||||
u'docstatus': 0,
|
||||
u'modified': '2012-10-03 11:08:09',
|
||||
u'modified_by': u'Administrator',
|
||||
u'owner': u'Administrator'
|
||||
},
|
||||
|
||||
# These values are common for all GL Mapper
|
||||
{
|
||||
'doc_type': u'Purchase Invoice with write off',
|
||||
'doctype': 'GL Mapper',
|
||||
'name': '__common__'
|
||||
u'doctype': u'GL Mapper',
|
||||
u'name': u'__common__'
|
||||
},
|
||||
|
||||
# These values are common for all GL Mapper Detail
|
||||
{
|
||||
'doctype': u'GL Mapper Detail',
|
||||
'name': '__common__',
|
||||
u'doctype': u'GL Mapper Detail',
|
||||
u'name': u'__common__',
|
||||
'parent': u'Purchase Invoice with write off',
|
||||
'parentfield': u'fields',
|
||||
'parenttype': u'GL Mapper'
|
||||
@ -28,8 +28,8 @@
|
||||
|
||||
# GL Mapper, Purchase Invoice with write off
|
||||
{
|
||||
'doctype': 'GL Mapper',
|
||||
'name': u'Purchase Invoice with write off'
|
||||
u'doctype': u'GL Mapper',
|
||||
u'name': u'Purchase Invoice with write off'
|
||||
},
|
||||
|
||||
# GL Mapper Detail
|
||||
@ -41,7 +41,7 @@
|
||||
'cost_center': u'cost_center',
|
||||
'credit': u'value:0',
|
||||
'debit': u'amount',
|
||||
'doctype': u'GL Mapper Detail',
|
||||
u'doctype': u'GL Mapper Detail',
|
||||
'fiscal_year': u'parent:fiscal_year',
|
||||
'is_opening': u'parent:is_opening',
|
||||
'posting_date': u'parent:posting_date',
|
||||
@ -59,9 +59,9 @@
|
||||
'aging_date': u'parent:aging_date',
|
||||
'company': u'parent:company',
|
||||
'cost_center': u'cost_center',
|
||||
'credit': u"value:d.fields.get('category') != 'For Valuation' and d.fields.get('add_deduct_tax') == 'Deduct' and d.fields.get('tax_amount') or 0",
|
||||
'debit': u"value:d.fields.get('category') != 'For Valuation' and d.fields.get('add_deduct_tax') == 'Add' and d.fields.get('tax_amount') or 0",
|
||||
'doctype': u'GL Mapper Detail',
|
||||
'credit': u"value:d.fields.get('category') != 'Valuation' and d.fields.get('add_deduct_tax') == 'Deduct' and d.fields.get('tax_amount') or 0",
|
||||
'debit': u"value:d.fields.get('category') != 'Valuation' and d.fields.get('add_deduct_tax') == 'Add' and d.fields.get('tax_amount') or 0",
|
||||
u'doctype': u'GL Mapper Detail',
|
||||
'fiscal_year': u'parent:fiscal_year',
|
||||
'is_opening': u'parent:is_opening',
|
||||
'posting_date': u'parent:posting_date',
|
||||
@ -80,7 +80,7 @@
|
||||
'company': u'company',
|
||||
'credit': u'ded_amount',
|
||||
'debit': u'value:0',
|
||||
'doctype': u'GL Mapper Detail',
|
||||
u'doctype': u'GL Mapper Detail',
|
||||
'fiscal_year': u'fiscal_year',
|
||||
'is_opening': u'is_opening',
|
||||
'posting_date': u'posting_date',
|
||||
@ -100,7 +100,7 @@
|
||||
'company': u'company',
|
||||
'credit': u'total_amount_to_pay',
|
||||
'debit': u'value:0',
|
||||
'doctype': u'GL Mapper Detail',
|
||||
u'doctype': u'GL Mapper Detail',
|
||||
'fiscal_year': u'fiscal_year',
|
||||
'is_opening': u'is_opening',
|
||||
'posting_date': u'posting_date',
|
||||
@ -119,7 +119,7 @@
|
||||
'cost_center': u'write_off_cost_center',
|
||||
'credit': u'write_off_amount',
|
||||
'debit': u'value:0',
|
||||
'doctype': u'GL Mapper Detail',
|
||||
u'doctype': u'GL Mapper Detail',
|
||||
'fiscal_year': u'fiscal_year',
|
||||
'is_opening': u'is_opening',
|
||||
'posting_date': u'posting_date',
|
||||
|
@ -1 +1,112 @@
|
||||
[{'doc_type': 'Purchase Invoice', 'modified_by': 'nabin@webnotestech.com', 'name': 'Purchase Invoice', 'parent': None, 'creation': '2009-03-12 12:09:24', 'modified': '2010-05-26 16:48:58', 'module': 'Accounts', 'doctype': 'GL Mapper', 'idx': None, 'parenttype': None, 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}, {'creation': '2009-03-12 12:09:24', 'voucher_type': 'parent:doctype', 'doctype': 'GL Mapper Detail', 'owner': 'Administrator', 'cost_center': 'cost_center', 'voucher_no': 'parent:name', 'modified_by': 'nabin@webnotestech.com', 'against_voucher': None, 'table_field': 'entries', 'transaction_date': 'parent:voucher_date', 'debit': 'amount', 'docstatus': 0, 'parent': 'Purchase Invoice', 'company': 'parent:company', 'aging_date': 'parent:aging_date', 'fiscal_year': 'parent:fiscal_year', 'is_advance': None, 'remarks': 'parent:remarks', 'account': 'expense_head', 'name': 'GLMDetail00002', 'idx': 1, 'against_voucher_type': None, 'modified': '2010-05-26 16:48:58', 'against': 'parent:credit_to', 'credit': 'value:0', 'parenttype': 'GL Mapper', 'is_opening': 'parent:is_opening', 'posting_date': 'parent:posting_date', 'parentfield': 'fields'}, {'creation': '2009-03-12 12:09:24', 'voucher_type': 'parent:doctype', 'doctype': 'GL Mapper Detail', 'owner': 'Administrator', 'cost_center': 'cost_center', 'voucher_no': 'parent:name', 'modified_by': 'nabin@webnotestech.com', 'against_voucher': None, 'table_field': 'purchase_tax_details', 'transaction_date': 'parent:voucher_date', 'debit': "value:d.fields.get('category') != 'For Valuation' and d.fields.get('add_deduct_tax') == 'Add' and d.fields.get('tax_amount') or 0", 'docstatus': 0, 'parent': 'Purchase Invoice', 'company': 'parent:company', 'aging_date': 'parent:aging_date', 'fiscal_year': 'parent:fiscal_year', 'is_advance': None, 'remarks': 'parent:remarks', 'account': 'account_head', 'name': 'GLMDetail00003', 'idx': 2, 'against_voucher_type': None, 'modified': '2010-05-26 16:48:58', 'against': 'parent:credit_to', 'credit': "value:d.fields.get('category') != 'For Valuation' and d.fields.get('add_deduct_tax') == 'Deduct' and d.fields.get('tax_amount') or 0", 'parenttype': 'GL Mapper', 'is_opening': 'parent:is_opening', 'posting_date': 'parent:posting_date', 'parentfield': 'fields'}, {'creation': '2009-03-12 12:09:24', 'voucher_type': 'doctype', 'doctype': 'GL Mapper Detail', 'owner': 'Administrator', 'cost_center': '', 'voucher_no': 'name', 'modified_by': 'nabin@webnotestech.com', 'against_voucher': None, 'table_field': '', 'transaction_date': 'voucher_date', 'debit': 'value:0', 'docstatus': 0, 'parent': 'Purchase Invoice', 'company': 'company', 'aging_date': 'aging_date', 'fiscal_year': 'fiscal_year', 'is_advance': None, 'remarks': 'remarks', 'account': 'tax_code', 'name': 'GLMDetail00004', 'idx': 3, 'against_voucher_type': None, 'modified': '2010-05-26 16:48:58', 'against': 'credit_to', 'credit': 'ded_amount', 'parenttype': 'GL Mapper', 'is_opening': 'is_opening', 'posting_date': 'posting_date', 'parentfield': 'fields'}, {'creation': '2009-03-12 12:09:24', 'voucher_type': 'doctype', 'doctype': 'GL Mapper Detail', 'owner': 'Administrator', 'cost_center': '', 'voucher_no': 'name', 'modified_by': 'nabin@webnotestech.com', 'against_voucher': 'name', 'table_field': '', 'transaction_date': 'voucher_date', 'debit': 'value:0', 'docstatus': 0, 'parent': 'Purchase Invoice', 'company': 'company', 'aging_date': 'aging_date', 'fiscal_year': 'fiscal_year', 'is_advance': None, 'remarks': 'remarks', 'account': 'credit_to', 'name': 'GLMDetail00005', 'idx': 4, 'against_voucher_type': "value:'Purchase Invoice'", 'modified': '2010-05-26 16:48:58', 'against': 'against_expense_account', 'credit': 'total_amount_to_pay', 'parenttype': 'GL Mapper', 'is_opening': 'is_opening', 'posting_date': 'posting_date', 'parentfield': 'fields'}]
|
||||
# GL Mapper, Purchase Invoice
|
||||
[
|
||||
|
||||
# These values are common in all dictionaries
|
||||
{
|
||||
u'creation': '2012-04-30 19:55:04',
|
||||
u'docstatus': 0,
|
||||
u'modified': '2012-10-03 11:07:26',
|
||||
u'modified_by': u'Administrator',
|
||||
u'owner': u'Administrator'
|
||||
},
|
||||
|
||||
# These values are common for all GL Mapper
|
||||
{
|
||||
'doc_type': u'Purchase Invoice',
|
||||
u'doctype': u'GL Mapper',
|
||||
u'name': u'__common__'
|
||||
},
|
||||
|
||||
# These values are common for all GL Mapper Detail
|
||||
{
|
||||
u'doctype': u'GL Mapper Detail',
|
||||
u'name': u'__common__',
|
||||
'parent': u'Purchase Invoice',
|
||||
'parentfield': u'fields',
|
||||
'parenttype': u'GL Mapper'
|
||||
},
|
||||
|
||||
# GL Mapper, Purchase Invoice
|
||||
{
|
||||
u'doctype': u'GL Mapper',
|
||||
u'name': u'Purchase Invoice'
|
||||
},
|
||||
|
||||
# GL Mapper Detail
|
||||
{
|
||||
'account': u'expense_head',
|
||||
'against': u'parent:credit_to',
|
||||
'aging_date': u'parent:aging_date',
|
||||
'company': u'parent:company',
|
||||
'cost_center': u'cost_center',
|
||||
'credit': u'value:0',
|
||||
'debit': u'amount',
|
||||
u'doctype': u'GL Mapper Detail',
|
||||
'fiscal_year': u'parent:fiscal_year',
|
||||
'is_opening': u'parent:is_opening',
|
||||
'posting_date': u'parent:posting_date',
|
||||
'remarks': u'parent:remarks',
|
||||
'table_field': u'entries',
|
||||
'transaction_date': u'parent:voucher_date',
|
||||
'voucher_no': u'parent:name',
|
||||
'voucher_type': u'parent:doctype'
|
||||
},
|
||||
|
||||
# GL Mapper Detail
|
||||
{
|
||||
'account': u'account_head',
|
||||
'against': u'parent:credit_to',
|
||||
'aging_date': u'parent:aging_date',
|
||||
'company': u'parent:company',
|
||||
'cost_center': u'cost_center',
|
||||
'credit': u"value:d.fields.get('category') != 'Valuation' and d.fields.get('add_deduct_tax') == 'Deduct' and d.fields.get('tax_amount') or 0",
|
||||
'debit': u"value:d.fields.get('category') != 'Valuation' and d.fields.get('add_deduct_tax') == 'Add' and d.fields.get('tax_amount') or 0",
|
||||
u'doctype': u'GL Mapper Detail',
|
||||
'fiscal_year': u'parent:fiscal_year',
|
||||
'is_opening': u'parent:is_opening',
|
||||
'posting_date': u'parent:posting_date',
|
||||
'remarks': u'parent:remarks',
|
||||
'table_field': u'purchase_tax_details',
|
||||
'transaction_date': u'parent:voucher_date',
|
||||
'voucher_no': u'parent:name',
|
||||
'voucher_type': u'parent:doctype'
|
||||
},
|
||||
|
||||
# GL Mapper Detail
|
||||
{
|
||||
'account': u'tax_code',
|
||||
'against': u'credit_to',
|
||||
'aging_date': u'aging_date',
|
||||
'company': u'company',
|
||||
'credit': u'ded_amount',
|
||||
'debit': u'value:0',
|
||||
u'doctype': u'GL Mapper Detail',
|
||||
'fiscal_year': u'fiscal_year',
|
||||
'is_opening': u'is_opening',
|
||||
'posting_date': u'posting_date',
|
||||
'remarks': u'remarks',
|
||||
'transaction_date': u'voucher_date',
|
||||
'voucher_no': u'name',
|
||||
'voucher_type': u'doctype'
|
||||
},
|
||||
|
||||
# GL Mapper Detail
|
||||
{
|
||||
'account': u'credit_to',
|
||||
'against': u'against_expense_account',
|
||||
'against_voucher': u'name',
|
||||
'against_voucher_type': u"value:'Purchase Invoice'",
|
||||
'aging_date': u'aging_date',
|
||||
'company': u'company',
|
||||
'credit': u'total_amount_to_pay',
|
||||
'debit': u'value:0',
|
||||
u'doctype': u'GL Mapper Detail',
|
||||
'fiscal_year': u'fiscal_year',
|
||||
'is_opening': u'is_opening',
|
||||
'posting_date': u'posting_date',
|
||||
'remarks': u'remarks',
|
||||
'transaction_date': u'voucher_date',
|
||||
'voucher_no': u'name',
|
||||
'voucher_type': u'doctype'
|
||||
}
|
||||
]
|
@ -182,7 +182,7 @@ class DocType:
|
||||
if le_map['table_field']:
|
||||
for d in getlist(doclist,le_map['table_field']):
|
||||
# purchase_tax_details is the table of other charges in purchase cycle
|
||||
if le_map['table_field'] != 'purchase_tax_details' or (le_map['table_field'] == 'purchase_tax_details' and d.fields.get('category') != 'For Valuation'):
|
||||
if le_map['table_field'] != 'purchase_tax_details' or (le_map['table_field'] == 'purchase_tax_details' and d.fields.get('category') != 'Valuation'):
|
||||
self.make_single_entry(doc,d,le_map,cancel, merge_entries)
|
||||
else:
|
||||
self.make_single_entry(None,doc,le_map,cancel, merge_entries)
|
||||
|
@ -37,7 +37,7 @@ tax_acc = [c[0] for c in sql("""select distinct account_head
|
||||
from `tabPurchase Taxes and Charges`
|
||||
where parenttype = 'Purchase Invoice'
|
||||
and add_deduct_tax = 'Add'
|
||||
and category in ('For Total', 'For Both')
|
||||
and category in ('Total', 'Valuation and Total')
|
||||
and docstatus=1
|
||||
order by account_head asc""")]
|
||||
|
||||
@ -82,7 +82,7 @@ for r in res:
|
||||
where parent = '%s'
|
||||
and parenttype = 'Purchase Invoice'
|
||||
and add_deduct_tax = 'Add'
|
||||
and category in ('For Total', 'For Both')
|
||||
and category in ('Total', 'Valuation and Total')
|
||||
group by account_head
|
||||
""" %(r[col_idx['ID']],))
|
||||
|
||||
|
@ -469,16 +469,18 @@ cur_frm.cscript.calc_other_charges = function(doc , tname , fname , other_fname)
|
||||
//--------------------------
|
||||
$td(otc,i+1,0).innerHTML = cl[i].item_code;
|
||||
|
||||
var tax = getchildren('Purchase Taxes and Charges', doc.name, other_fname,doc.doctype);
|
||||
var total = net_total;
|
||||
for(var t=0;t<tax.length;t++){
|
||||
|
||||
var account = tax[t].account_head;
|
||||
$td(otc,0,t+1).innerHTML = account?account:'';
|
||||
//Check For Rate
|
||||
if(cl[i].item_tax_rate && check_tax[account]!=null) {rate = flt(check_tax[account]);}
|
||||
else // if particular item doesn't have particular rate it will take other charges rate
|
||||
if(cl[i].item_tax_rate && check_tax[account]!=null) {
|
||||
rate = flt(check_tax[account]);
|
||||
} else {
|
||||
// if particular item doesn't have particular rate it will take other charges rate
|
||||
rate = flt(tax[t].rate);
|
||||
}
|
||||
|
||||
//Check For Rate and get tax amount
|
||||
var tax_amount = cur_frm.cscript.check_charge_type_and_get_tax_amount(doc,tax,t, cl[i], rate);
|
||||
@ -491,18 +493,18 @@ cur_frm.cscript.calc_other_charges = function(doc , tname , fname , other_fname)
|
||||
if(tax[t].add_deduct_tax == 'Add'){
|
||||
// this is calculation part for all types
|
||||
if(tax[t].charge_type != "Actual") tax[t].item_wise_tax_detail += item_wise_tax_detail;
|
||||
tax[t].total_amount = flt(tax_amount.toFixed(2)); //stores actual tax amount in virtual field
|
||||
tax[t].total_tax_amount = flt(prev_total.toFixed(2)); //stores total amount in virtual field
|
||||
tax[t].tax_amount += flt(tax_amount.toFixed(2));
|
||||
tax[t].total_amount = flt(tax_amount); //stores actual tax amount in virtual field
|
||||
tax[t].total_tax_amount = flt(prev_total); //stores total amount in virtual field
|
||||
tax[t].tax_amount += flt(tax_amount);
|
||||
var total_amount = flt(tax[t].tax_amount);
|
||||
total_tax_amount = flt(tax[t].total_tax_amount) + flt(total_amount);
|
||||
if(tax[t].category != "For Valuation"){
|
||||
set_multiple('Purchase Taxes and Charges', tax[t].name, { 'item_wise_tax_detail':tax[t].item_wise_tax_detail, 'amount':total_amount, 'total':flt(total)+flt(tax[t].tax_amount)/*_tax_amount)*/}, other_fname);
|
||||
if(tax[t].category != "Valuation"){
|
||||
set_multiple('Purchase Taxes and Charges', tax[t].name, { 'item_wise_tax_detail':tax[t].item_wise_tax_detail, 'amount':roundNumber(total_amount, 2), 'total':roundNumber(flt(total)+flt(tax[t].tax_amount), 2)}, other_fname);
|
||||
prev_total += flt(tax[t].total_amount);
|
||||
total += flt(tax[t].tax_amount); // for adding total to previous amount
|
||||
}
|
||||
else{
|
||||
set_multiple('Purchase Taxes and Charges', tax[t].name, { 'item_wise_tax_detail':tax[t].item_wise_tax_detail, 'amount':total_amount, 'total':flt(total)/*_tax_amount)*/}, other_fname);
|
||||
set_multiple('Purchase Taxes and Charges', tax[t].name, { 'item_wise_tax_detail':tax[t].item_wise_tax_detail, 'amount':roundNumber(total_amount, 2), 'total':roundNumber(flt(total), 2)}, other_fname);
|
||||
prev_total = prev_total;
|
||||
}
|
||||
//prev_total += flt(tax[t].total_amount); // for previous row total
|
||||
@ -512,25 +514,25 @@ cur_frm.cscript.calc_other_charges = function(doc , tname , fname , other_fname)
|
||||
else
|
||||
$td(otc,i+1,t+1).innerHTML = '('+fmt_money(rate) + '%) ' +fmt_money(tax[t].total_amount);
|
||||
|
||||
if (tax[t].category != "For Total"){
|
||||
if (tax[t].category != "Total"){
|
||||
item_tax += tax[t].total_amount;
|
||||
}
|
||||
}
|
||||
else if(tax[t].add_deduct_tax == 'Deduct'){
|
||||
// this is calculation part for all types
|
||||
if(tax[t].charge_type != "Actual") tax[t].item_wise_tax_detail += item_wise_tax_detail;
|
||||
tax[t].total_amount = flt(tax_amount.toFixed(2)); //stores actual tax amount in virtual field
|
||||
tax[t].total_tax_amount = flt(prev_total.toFixed(2)); //stores total amount in virtual field
|
||||
tax[t].tax_amount += flt(tax_amount.toFixed(2));
|
||||
tax[t].total_amount = flt(tax_amount); //stores actual tax amount in virtual field
|
||||
tax[t].total_tax_amount = flt(prev_total); //stores total amount in virtual field
|
||||
tax[t].tax_amount += flt(tax_amount);
|
||||
var total_amount = flt(tax[t].tax_amount);
|
||||
total_tax_amount = flt(tax[t].total_tax_amount) - flt(total_amount);
|
||||
if(tax[t].category != "For Valuation"){
|
||||
set_multiple('Purchase Taxes and Charges', tax[t].name, { 'item_wise_tax_detail':tax[t].item_wise_tax_detail, 'tax_amount':total_amount, 'total':flt(total)-flt(tax[t].tax_amount)/*_tax_amount)*/}, other_fname);
|
||||
if(tax[t].category != "Valuation"){
|
||||
set_multiple('Purchase Taxes and Charges', tax[t].name, { 'item_wise_tax_detail':tax[t].item_wise_tax_detail, 'tax_amount':roundNumber(total_amount, 2), 'total':roundNumber(flt(total)-flt(tax[t].tax_amount), 2)}, other_fname);
|
||||
prev_total -= flt(tax[t].total_amount);
|
||||
total -= flt(tax[t].tax_amount); // for adding total to previous amount
|
||||
}
|
||||
else{
|
||||
set_multiple('Purchase Taxes and Charges', tax[t].name, { 'item_wise_tax_detail':tax[t].item_wise_tax_detail, 'tax_amount':total_amount, 'total':flt(total)/*_tax_amount)*/}, other_fname);
|
||||
set_multiple('Purchase Taxes and Charges', tax[t].name, { 'item_wise_tax_detail':tax[t].item_wise_tax_detail, 'tax_amount':roundNumber(total_amount, 2), 'total':roundNumber(flt(total), 2)}, other_fname);
|
||||
prev_total = prev_total;
|
||||
}
|
||||
//prev_total += flt(tax[t].total_amount); // for previous row total
|
||||
@ -540,7 +542,7 @@ cur_frm.cscript.calc_other_charges = function(doc , tname , fname , other_fname)
|
||||
else
|
||||
$td(otc,i+1,t+1).innerHTML = '('+fmt_money(rate) + '%) ' +fmt_money(tax[t].total_amount);
|
||||
|
||||
if (tax[t].category != "For Total"){
|
||||
if (tax[t].category != "Total"){
|
||||
item_tax -= tax[t].total_amount;
|
||||
}
|
||||
}
|
||||
@ -549,66 +551,9 @@ cur_frm.cscript.calc_other_charges = function(doc , tname , fname , other_fname)
|
||||
}
|
||||
set_multiple(tname, cl[i].name, {'item_tax_amount': item_tax }, fname);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// ******* Calculation of total amounts of document (item amount + other charges)****************
|
||||
cur_frm.cscript.calc_doc_values = function(doc, tname, fname, other_fname) {
|
||||
doc = locals[doc.doctype][doc.name];
|
||||
var net_total = 0; var total_tax = 0; var other_charges_added = 0;
|
||||
var other_charges_deducted = 0;
|
||||
var cl = getchildren(tname, doc.name, fname);
|
||||
for(var i = 0; i<cl.length; i++){
|
||||
net_total += flt(cl[i].amount);
|
||||
for(var t=0;t<tax.length;t++){
|
||||
tax[t].tax_amount = roundNumber(tax[t].tax_amount, 2);
|
||||
}
|
||||
var d = getchildren('Purchase Taxes and Charges', doc.name, other_fname,doc.doctype);
|
||||
for(var j = 0; j<d.length; j++){
|
||||
if(d[j].category != 'For Valuation'){
|
||||
|
||||
if(d[j].add_deduct_tax == 'Add'){
|
||||
other_charges_added += flt(d[j].tax_amount);
|
||||
total_tax += flt(d[j].tax_amount);
|
||||
}
|
||||
if(d[j].add_deduct_tax == 'Deduct'){
|
||||
other_charges_deducted += flt(d[j].tax_amount);
|
||||
total_tax -= flt(d[j].tax_amount);
|
||||
}
|
||||
}
|
||||
}
|
||||
doc.net_total = flt(net_total);
|
||||
doc.total_tax = flt(total_tax);
|
||||
|
||||
doc.other_charges_added = flt(other_charges_added);
|
||||
doc.other_charges_deducted = flt(other_charges_deducted);
|
||||
doc.grand_total = flt(flt(net_total) + flt(other_charges_added) - flt(other_charges_deducted));
|
||||
doc.rounded_total = Math.round(doc.grand_total);
|
||||
doc.net_total_import = flt(flt(net_total) / flt(doc.conversion_rate));
|
||||
doc.other_charges_added_import = flt(flt(other_charges_added) / flt(doc.conversion_rate));
|
||||
doc.other_charges_deducted_import = flt(flt(other_charges_deducted) / flt(doc.conversion_rate));
|
||||
doc.grand_total_import = flt(flt(doc.grand_total) / flt(doc.conversion_rate));
|
||||
doc.rounded_total_import = Math.round(doc.grand_total_import);
|
||||
|
||||
refresh_many(['net_total','total_taxes','grand_total']);
|
||||
|
||||
|
||||
if(doc.doctype == 'Purchase Invoice'){
|
||||
calculate_outstanding(doc);
|
||||
}
|
||||
}
|
||||
|
||||
var calculate_outstanding = function(doc) {
|
||||
var t_tds_tax = 0.0;
|
||||
doc.total_tds_on_voucher = flt(doc.ded_amount);
|
||||
|
||||
// total amount to pay
|
||||
doc.total_amount_to_pay = flt(flt(doc.net_total) + flt(doc.other_charges_added) - flt(doc.other_charges_deducted) - flt(doc.total_tds_on_voucher));
|
||||
|
||||
// outstanding amount
|
||||
if(doc.docstatus==0) doc.outstanding_amount = flt(doc.net_total) + flt(doc.other_charges_added) - flt(doc.other_charges_deducted) - flt(doc.total_tds_on_voucher) - flt(doc.total_advance);
|
||||
|
||||
refresh_many(['total_tds_on_voucher','total_amount_to_pay', 'outstanding_amount']);
|
||||
}
|
||||
|
||||
|
||||
@ -652,6 +597,64 @@ cur_frm.cscript.check_charge_type_and_get_tax_amount = function(doc, tax, t, cl,
|
||||
}
|
||||
}
|
||||
|
||||
// ******* Calculation of total amounts of document (item amount + other charges)****************
|
||||
cur_frm.cscript.calc_doc_values = function(doc, tname, fname, other_fname) {
|
||||
doc = locals[doc.doctype][doc.name];
|
||||
var net_total = 0; var total_tax = 0; var other_charges_added = 0;
|
||||
var other_charges_deducted = 0;
|
||||
var cl = getchildren(tname, doc.name, fname);
|
||||
for(var i = 0; i<cl.length; i++){
|
||||
net_total += flt(cl[i].amount);
|
||||
}
|
||||
var d = getchildren('Purchase Taxes and Charges', doc.name, other_fname,doc.doctype);
|
||||
for(var j = 0; j<d.length; j++){
|
||||
if(d[j].category != 'Valuation'){
|
||||
|
||||
if(d[j].add_deduct_tax == 'Add'){
|
||||
other_charges_added += flt(d[j].tax_amount);
|
||||
total_tax += flt(d[j].tax_amount);
|
||||
}
|
||||
if(d[j].add_deduct_tax == 'Deduct'){
|
||||
other_charges_deducted += flt(d[j].tax_amount);
|
||||
total_tax -= flt(d[j].tax_amount);
|
||||
}
|
||||
}
|
||||
}
|
||||
doc.net_total = flt(net_total);
|
||||
doc.total_tax = flt(total_tax);
|
||||
|
||||
doc.other_charges_added = roundNumber(flt(other_charges_added), 2);
|
||||
doc.other_charges_deducted = roundNumber(flt(other_charges_deducted), 2);
|
||||
doc.grand_total = roundNumber(flt(flt(net_total) + flt(other_charges_added) - flt(other_charges_deducted)), 2);
|
||||
doc.rounded_total = Math.round(doc.grand_total);
|
||||
doc.net_total_import = roundNumber(flt(flt(net_total) / flt(doc.conversion_rate)), 2);
|
||||
doc.other_charges_added_import = roundNumber(flt(flt(other_charges_added) / flt(doc.conversion_rate)), 2);
|
||||
doc.other_charges_deducted_import = roundNumber(flt(flt(other_charges_deducted) / flt(doc.conversion_rate)), 2);
|
||||
doc.grand_total_import = roundNumber(flt(flt(doc.grand_total) / flt(doc.conversion_rate)), 2);
|
||||
doc.rounded_total_import = Math.round(doc.grand_total_import);
|
||||
|
||||
refresh_many(['net_total','total_taxes','grand_total']);
|
||||
|
||||
|
||||
if(doc.doctype == 'Purchase Invoice'){
|
||||
calculate_outstanding(doc);
|
||||
}
|
||||
}
|
||||
|
||||
var calculate_outstanding = function(doc) {
|
||||
var t_tds_tax = 0.0;
|
||||
doc.total_tds_on_voucher = flt(doc.ded_amount);
|
||||
|
||||
// total amount to pay
|
||||
doc.total_amount_to_pay = flt(flt(doc.net_total) + flt(doc.other_charges_added) - flt(doc.other_charges_deducted) - flt(doc.total_tds_on_voucher));
|
||||
|
||||
// outstanding amount
|
||||
if(doc.docstatus==0) doc.outstanding_amount = flt(doc.net_total) + flt(doc.other_charges_added) - flt(doc.other_charges_deducted) - flt(doc.total_tds_on_voucher) - flt(doc.total_advance);
|
||||
|
||||
refresh_many(['total_tds_on_voucher','total_amount_to_pay', 'outstanding_amount']);
|
||||
}
|
||||
|
||||
|
||||
cur_frm.cscript.toggle_contact_section = function(doc) {
|
||||
cur_frm.toggle_display("contact_section", doc.supplier);
|
||||
}
|
||||
|
@ -1,163 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
from __future__ import unicode_literals
|
||||
import os, commands
|
||||
|
||||
# ask for root mysql password
|
||||
import getpass
|
||||
|
||||
root_pwd = None
|
||||
while not root_pwd:
|
||||
root_pwd = getpass.getpass("MySQL Root user's Password: ")
|
||||
|
||||
# test root connection
|
||||
op = commands.getoutput("mysql -u root -p%s -e 'exit'" % \
|
||||
root_pwd.replace('$', '\$').replace(' ', '\ '))
|
||||
if "access denied" in op.lower():
|
||||
raise Exception("Incorrect MySQL Root user's password")
|
||||
|
||||
# ask for new dbname
|
||||
new_dbname = None
|
||||
while not new_dbname:
|
||||
new_dbname = raw_input("New ERPNext Database Name: ")
|
||||
|
||||
# ask for new dbpassword
|
||||
new_dbpassword = None
|
||||
while not new_dbpassword:
|
||||
new_dbpassword = raw_input("New ERPNext Database's Password: ")
|
||||
|
||||
# get erpnext path
|
||||
erpnext_path = os.path.dirname(os.path.abspath(__file__))
|
||||
os.chdir(erpnext_path)
|
||||
|
||||
# setup backups
|
||||
if not os.path.exists(os.path.join(erpnext_path, 'backups')):
|
||||
os.makedirs('backups')
|
||||
os.symlink(os.path.join(erpnext_path, 'backups'),
|
||||
os.path.join(erpnext_path, 'public', 'backups'))
|
||||
|
||||
# setup files
|
||||
if not os.path.exists(os.path.join(erpnext_path, 'files')):
|
||||
os.makedirs('files')
|
||||
os.symlink(os.path.join(erpnext_path, 'files'),
|
||||
os.path.join(erpnext_path, 'public', 'files'))
|
||||
|
||||
# setup logs
|
||||
if not os.path.exists(os.path.join(erpnext_path, 'logs')):
|
||||
os.makedirs('logs')
|
||||
os.system('touch logs/error_log.txt')
|
||||
|
||||
# setup lib -- framework repo with read only access
|
||||
# change this if you have your own fork
|
||||
if not os.path.exists(os.path.join(erpnext_path, 'lib')):
|
||||
os.system('git clone https://github.com/webnotes/wnframework.git lib')
|
||||
|
||||
# setup symlinks in public
|
||||
if not os.path.exists(os.path.join(erpnext_path, 'public', 'js', 'lib')):
|
||||
os.symlink(os.path.join(erpnext_path, 'lib', 'js', 'lib'),
|
||||
os.path.join(erpnext_path, 'public', 'js', 'lib'))
|
||||
if not os.path.exists(os.path.join(erpnext_path, 'public', 'images', 'lib')):
|
||||
os.symlink(os.path.join(erpnext_path, 'lib', 'images'),
|
||||
os.path.join(erpnext_path, 'public', 'images', 'lib'))
|
||||
|
||||
# extract master
|
||||
if os.path.exists(os.path.join(erpnext_path, 'data', 'master.sql.gz')):
|
||||
os.system('gunzip data/master.sql.gz')
|
||||
|
||||
# setup conf
|
||||
if not os.path.exists(os.path.join(erpnext_path, 'conf.py')):
|
||||
# read template conf file
|
||||
with open(os.path.join(erpnext_path, 'lib', 'conf', 'conf.py'), 'r') as template:
|
||||
content = template.read()
|
||||
|
||||
# manipulate content
|
||||
import re
|
||||
|
||||
# set new_dbname, new_dbpassword, files_path, backup_path, log_file_name
|
||||
content = re.sub("db_name.*", "db_name = '%s'" % new_dbname, content)
|
||||
content = re.sub("db_password.*", "db_password = '%s'" % new_dbpassword, content)
|
||||
content = re.sub("files_path.*", "files_path = '%s'" % \
|
||||
os.path.join(erpnext_path, 'files'), content)
|
||||
content = re.sub("backup_path.*", "backup_path = '%s'" % \
|
||||
os.path.join(erpnext_path, 'backups'), content)
|
||||
content = re.sub("log_file_name.*", "log_file_name = '%s'" % \
|
||||
os.path.join(erpnext_path, 'logs', 'error_log.txt'), content)
|
||||
|
||||
|
||||
# write conf file
|
||||
with open(os.path.join(erpnext_path, 'conf.py'), 'w') as new_conf:
|
||||
new_conf.write(content)
|
||||
|
||||
# install db
|
||||
import sys
|
||||
sys.path.append('.')
|
||||
sys.path.append('lib')
|
||||
sys.path.append('app')
|
||||
|
||||
from webnotes.install_lib.install import Installer
|
||||
inst = Installer('root', root_pwd)
|
||||
inst.import_from_db(new_dbname, source_path=os.path.join(erpnext_path, 'data', 'master.sql'), verbose = 1)
|
||||
|
||||
# apply patches
|
||||
os.chdir(erpnext_path)
|
||||
os.system("lib/wnf.py --update origin master")
|
||||
|
||||
# set filemode false
|
||||
os.system("git config core.filemode false")
|
||||
os.chdir(os.path.join(erpnext_path, 'lib'))
|
||||
os.system("git config core.filemode false")
|
||||
|
||||
steps_remaining = """
|
||||
Notes:
|
||||
------
|
||||
|
||||
sample apache conf file
|
||||
#-----------------------------------------------------------
|
||||
SetEnv PYTHON_EGG_CACHE /var/www
|
||||
|
||||
# you can change 99 to any other port
|
||||
|
||||
Listen 99
|
||||
NameVirtualHost *:99
|
||||
<VirtualHost *:99>
|
||||
ServerName localhost
|
||||
DocumentRoot {path to erpnext's folder}/public
|
||||
AddHandler cgi-script .cgi .xml .py
|
||||
|
||||
<Directory {path to erpnext's folder}/public/>
|
||||
# directory specific options
|
||||
Options -Indexes +FollowSymLinks +ExecCGI
|
||||
|
||||
# directory's index file
|
||||
DirectoryIndex web.py
|
||||
|
||||
# rewrite rule
|
||||
RewriteEngine on
|
||||
|
||||
# condition 1:
|
||||
# ignore login-page.html, app.html, blank.html, unsupported.html
|
||||
RewriteCond %{REQUEST_URI} ^((?!app\.html|blank\.html|unsupported\.html).)*$
|
||||
|
||||
# condition 2: if there are no slashes
|
||||
# and file is .html or does not containt a .
|
||||
RewriteCond %{REQUEST_URI} ^(?!.+/)((.+\.html)|([^.]+))$
|
||||
|
||||
# rewrite if both of the above conditions are true
|
||||
RewriteRule ^(.+)$ web.py?page=$1 [NC,L]
|
||||
|
||||
AllowOverride all
|
||||
Order Allow,Deny
|
||||
Allow from all
|
||||
</Directory>
|
||||
</VirtualHost>
|
||||
#-----------------------------------------------------------
|
||||
|
||||
To Do:
|
||||
|
||||
* Configure apache/http conf file to point to public folder
|
||||
* chown recursively all files in your folder to apache user
|
||||
* login using: user="Administrator" and password="admin"
|
||||
|
||||
"""
|
||||
|
||||
print steps_remaining
|
||||
|
5
patches/october_2012/reload_gl_mapper.py
Normal file
5
patches/october_2012/reload_gl_mapper.py
Normal file
@ -0,0 +1,5 @@
|
||||
def execute():
|
||||
import webnotes
|
||||
from webnotes.modules import reload_doc
|
||||
reload_doc("accounts", "GL Mapper", "Purchase Invoice")
|
||||
reload_doc("accounts", "GL Mapper", "Purchase Invoice with write off")
|
@ -611,4 +611,8 @@ patch_list = [
|
||||
'patch_module': 'patches.october_2012',
|
||||
'patch_file': 'update_permission',
|
||||
},
|
||||
{
|
||||
'patch_module': 'patches.october_2012',
|
||||
'patch_file': 'reload_gl_mapper',
|
||||
},
|
||||
]
|
||||
|
@ -143,7 +143,8 @@ erpnext.startup.set_periodic_updates = function() {
|
||||
}
|
||||
|
||||
erpnext.set_user_background = function(src) {
|
||||
set_style(repl('#body_div { background: url("files/%(src)s") repeat;}', {src:src}))
|
||||
set_style(repl('#body_div { background: url("files/%(src)s") repeat fixed;}',
|
||||
{src:src}))
|
||||
}
|
||||
|
||||
// subject, sender, description
|
||||
|
@ -338,8 +338,14 @@ class DocType:
|
||||
|
||||
def send():
|
||||
from webnotes.model.code import get_obj
|
||||
from webnotes.utils import getdate
|
||||
now_date = now_datetime().date()
|
||||
|
||||
import conf
|
||||
if hasattr(conf, "expires_on") and now_date > getdate(conf.expires_on):
|
||||
# do not send email digests to expired accounts
|
||||
return
|
||||
|
||||
for ed in webnotes.conn.sql("""select name from `tabEmail Digest`
|
||||
where enabled=1 and docstatus<2""", as_list=1):
|
||||
ed_obj = get_obj('Email Digest', ed[0])
|
||||
|
@ -99,10 +99,10 @@ class DocType:
|
||||
self.prwise_cost[pr] = self.prwise_cost.get(pr, 0) + amt
|
||||
cumulative_grand_total += amt
|
||||
|
||||
pr_oc_row = sql("select name from `tabPurchase Taxes and Charges` where parent = %s and category = 'For Valuation' and add_deduct_tax = 'Add' and charge_type = 'Actual' and account_head = %s",(pr, lc.account_head))
|
||||
pr_oc_row = sql("select name from `tabPurchase Taxes and Charges` where parent = %s and category = 'Valuation' and add_deduct_tax = 'Add' and charge_type = 'Actual' and account_head = %s",(pr, lc.account_head))
|
||||
if not pr_oc_row: # add if not exists
|
||||
ch = addchild(pr_obj.doc, 'purchase_tax_details', 'Purchase Taxes and Charges', 1)
|
||||
ch.category = 'For Valuation'
|
||||
ch.category = 'Valuation'
|
||||
ch.add_deduct_tax = 'Add'
|
||||
ch.charge_type = 'Actual'
|
||||
ch.description = lc.description
|
||||
@ -201,7 +201,7 @@ class DocType:
|
||||
total_amount = flt(ocd[oc].tax_amount)
|
||||
total_tax_amount = flt(ocd[oc].total_tax_amount) + (add_ded * flt(total_amount))
|
||||
|
||||
if ocd[oc].category != "For Valuation":
|
||||
if ocd[oc].category != "Valuation":
|
||||
prev_total += add_ded * flt(ocd[oc].total_amount)
|
||||
total += add_ded * flt(ocd[oc].tax_amount)
|
||||
ocd[oc].total = total
|
||||
@ -210,7 +210,7 @@ class DocType:
|
||||
ocd[oc].total = flt(total)
|
||||
ocd[oc].save()
|
||||
|
||||
if ocd[oc].category != "For Total":
|
||||
if ocd[oc].category != "Total":
|
||||
item_tax += add_ded * ocd[oc].total_amount
|
||||
|
||||
return total, prev_total, item_tax
|
||||
|
Loading…
Reference in New Issue
Block a user