Companywise default tax template (#12290)

* Companywise default tax template

* Fix test cases
This commit is contained in:
rohitwaghchaure 2018-01-05 12:42:02 +05:30 committed by Nabin Hait
parent 3f784a7a49
commit bc2c83ee3c
23 changed files with 141 additions and 83 deletions

View File

@ -18,7 +18,7 @@ QUnit.test("test purchase invoice", function(assert) {
{update_stock:1}, {update_stock:1},
{supplier_address: 'Test1-Billing'}, {supplier_address: 'Test1-Billing'},
{contact_person: 'Contact 3-Test Supplier'}, {contact_person: 'Contact 3-Test Supplier'},
{taxes_and_charges: 'TEST In State GST'}, {taxes_and_charges: 'TEST In State GST - FT'},
{tc_name: 'Test Term 1'}, {tc_name: 'Test Term 1'},
{terms: 'This is Test'}, {terms: 'This is Test'},
{payment_terms_template: '_Test Payment Term Template UI'} {payment_terms_template: '_Test Payment Term Template UI'}
@ -29,7 +29,7 @@ QUnit.test("test purchase invoice", function(assert) {
// get_item_details // get_item_details
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct"); assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct");
// get tax details // get tax details
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST', "Tax details correct"); assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
// get tax account head details // get tax account head details
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct"); assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");
// grand_total Calculated // grand_total Calculated

View File

@ -3,6 +3,7 @@
# License: GNU General Public License v3. See license.txt # License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals
import frappe
from frappe.model.document import Document from frappe.model.document import Document
from erpnext.accounts.doctype.sales_taxes_and_charges_template.sales_taxes_and_charges_template \ from erpnext.accounts.doctype.sales_taxes_and_charges_template.sales_taxes_and_charges_template \
import valdiate_taxes_and_charges_template import valdiate_taxes_and_charges_template
@ -10,3 +11,8 @@ from erpnext.accounts.doctype.sales_taxes_and_charges_template.sales_taxes_and_c
class PurchaseTaxesandChargesTemplate(Document): class PurchaseTaxesandChargesTemplate(Document):
def validate(self): def validate(self):
valdiate_taxes_and_charges_template(self) valdiate_taxes_and_charges_template(self)
def autoname(self):
if self.company and self.title:
abbr = frappe.db.get_value('Company', self.company, 'abbr')
self.name = '{0} - {1}'.format(self.title, abbr)

View File

@ -1,7 +1,7 @@
QUnit.module('Sales Taxes and Charges Template'); QUnit.module('Sales Taxes and Charges Template');
QUnit.test("test sales taxes and charges template", function(assert) { QUnit.test("test sales taxes and charges template", function(assert) {
assert.expect(1); assert.expect(2);
let done = assert.async(); let done = assert.async();
frappe.run_serially([ frappe.run_serially([
() => { () => {
@ -19,7 +19,10 @@ QUnit.test("test sales taxes and charges template", function(assert) {
]} ]}
]); ]);
}, },
() => {assert.ok(cur_frm.doc.title=='TEST In State GST');}, () => {
assert.ok(cur_frm.doc.title=='TEST In State GST');
assert.ok(cur_frm.doc.name=='TEST In State GST - FT');
},
() => done() () => done()
]); ]);
}); });

View File

@ -17,7 +17,7 @@ QUnit.test("test sales Invoice", function(assert) {
{customer_address: 'Test1-Billing'}, {customer_address: 'Test1-Billing'},
{shipping_address_name: 'Test1-Shipping'}, {shipping_address_name: 'Test1-Shipping'},
{contact_person: 'Contact 1-Test Customer 1'}, {contact_person: 'Contact 1-Test Customer 1'},
{taxes_and_charges: 'TEST In State GST'}, {taxes_and_charges: 'TEST In State GST - FT'},
{tc_name: 'Test Term 1'}, {tc_name: 'Test Term 1'},
{terms: 'This is Test'}, {terms: 'This is Test'},
{payment_terms_template: '_Test Payment Term Template UI'} {payment_terms_template: '_Test Payment Term Template UI'}
@ -28,7 +28,7 @@ QUnit.test("test sales Invoice", function(assert) {
// get_item_details // get_item_details
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct"); assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct");
// get tax details // get tax details
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST', "Tax details correct"); assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
// get tax account head details // get tax account head details
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct"); assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");
// grand_total Calculated // grand_total Calculated

View File

@ -17,7 +17,7 @@ QUnit.test("test sales Invoice", function(assert) {
{customer_address: 'Test1-Billing'}, {customer_address: 'Test1-Billing'},
{shipping_address_name: 'Test1-Shipping'}, {shipping_address_name: 'Test1-Shipping'},
{contact_person: 'Contact 1-Test Customer 1'}, {contact_person: 'Contact 1-Test Customer 1'},
{taxes_and_charges: 'TEST In State GST'}, {taxes_and_charges: 'TEST In State GST - FT'},
{tc_name: 'Test Term 1'}, {tc_name: 'Test Term 1'},
{terms: 'This is Test'} {terms: 'This is Test'}
]); ]);
@ -27,7 +27,7 @@ QUnit.test("test sales Invoice", function(assert) {
// get_item_details // get_item_details
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct"); assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct");
// get tax details // get tax details
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST', "Tax details correct"); assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
// get tax account head details // get tax account head details
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct"); assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");
// grand_total Calculated // grand_total Calculated

View File

@ -17,7 +17,7 @@ QUnit.test("test sales Invoice with payment", function(assert) {
{customer_address: 'Test1-Billing'}, {customer_address: 'Test1-Billing'},
{shipping_address_name: 'Test1-Shipping'}, {shipping_address_name: 'Test1-Shipping'},
{contact_person: 'Contact 1-Test Customer 1'}, {contact_person: 'Contact 1-Test Customer 1'},
{taxes_and_charges: 'TEST In State GST'}, {taxes_and_charges: 'TEST In State GST - FT'},
{tc_name: 'Test Term 1'}, {tc_name: 'Test Term 1'},
{terms: 'This is Test'}, {terms: 'This is Test'},
{payment_terms_template: '_Test Payment Term Template UI'} {payment_terms_template: '_Test Payment Term Template UI'}
@ -28,7 +28,7 @@ QUnit.test("test sales Invoice with payment", function(assert) {
// get_item_details // get_item_details
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct"); assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct");
// get tax details // get tax details
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST', "Tax details correct"); assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
// grand_total Calculated // grand_total Calculated
assert.ok(cur_frm.doc.grand_total==590, "Grad Total correct"); assert.ok(cur_frm.doc.grand_total==590, "Grad Total correct");

View File

@ -17,7 +17,7 @@ QUnit.test("test sales Invoice with payment request", function(assert) {
{customer_address: 'Test1-Billing'}, {customer_address: 'Test1-Billing'},
{shipping_address_name: 'Test1-Shipping'}, {shipping_address_name: 'Test1-Shipping'},
{contact_person: 'Contact 1-Test Customer 1'}, {contact_person: 'Contact 1-Test Customer 1'},
{taxes_and_charges: 'TEST In State GST'}, {taxes_and_charges: 'TEST In State GST - FT'},
{tc_name: 'Test Term 1'}, {tc_name: 'Test Term 1'},
{terms: 'This is Test'} {terms: 'This is Test'}
]); ]);
@ -27,7 +27,7 @@ QUnit.test("test sales Invoice with payment request", function(assert) {
// get_item_details // get_item_details
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct"); assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct");
// get tax details // get tax details
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST', "Tax details correct"); assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
// grand_total Calculated // grand_total Calculated
assert.ok(cur_frm.doc.grand_total==590, "Grad Total correct"); assert.ok(cur_frm.doc.grand_total==590, "Grad Total correct");

View File

@ -17,7 +17,7 @@ QUnit.test("test sales Invoice with serialize item", function(assert) {
{customer_address: 'Test1-Billing'}, {customer_address: 'Test1-Billing'},
{shipping_address_name: 'Test1-Shipping'}, {shipping_address_name: 'Test1-Shipping'},
{contact_person: 'Contact 1-Test Customer 1'}, {contact_person: 'Contact 1-Test Customer 1'},
{taxes_and_charges: 'TEST In State GST'}, {taxes_and_charges: 'TEST In State GST - FT'},
{tc_name: 'Test Term 1'}, {tc_name: 'Test Term 1'},
{terms: 'This is Test'} {terms: 'This is Test'}
]); ]);
@ -27,7 +27,7 @@ QUnit.test("test sales Invoice with serialize item", function(assert) {
// get_item_details // get_item_details
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 4', "Item name correct"); assert.ok(cur_frm.doc.items[0].item_name=='Test Product 4', "Item name correct");
// get tax details // get tax details
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST', "Tax details correct"); assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
// get tax account head details // get tax account head details
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct"); assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");
// get batch number // get batch number

View File

@ -11,7 +11,12 @@ from erpnext.controllers.accounts_controller import validate_taxes_and_charges,
class SalesTaxesandChargesTemplate(Document): class SalesTaxesandChargesTemplate(Document):
def validate(self): def validate(self):
valdiate_taxes_and_charges_template(self) valdiate_taxes_and_charges_template(self)
def autoname(self):
if self.company and self.title:
abbr = frappe.db.get_value('Company', self.company, 'abbr')
self.name = '{0} - {1}'.format(self.title, abbr)
def set_missing_values(self): def set_missing_values(self):
for data in self.taxes: for data in self.taxes:
if data.charge_type == 'On Net Total' and flt(data.rate) == 0.0: if data.charge_type == 'On Net Total' and flt(data.rate) == 0.0:

View File

@ -1,7 +1,7 @@
QUnit.module('Sales Taxes and Charges Template'); QUnit.module('Sales Taxes and Charges Template');
QUnit.test("test sales taxes and charges template", function(assert) { QUnit.test("test sales taxes and charges template", function(assert) {
assert.expect(1); assert.expect(2);
let done = assert.async(); let done = assert.async();
frappe.run_serially([ frappe.run_serially([
() => { () => {
@ -19,7 +19,10 @@ QUnit.test("test sales taxes and charges template", function(assert) {
]} ]}
]); ]);
}, },
() => {assert.ok(cur_frm.doc.title=='TEST In State GST');}, () => {
assert.ok(cur_frm.doc.title=='TEST In State GST');
assert.ok(cur_frm.doc.name=='TEST In State GST - FT');
},
() => done() () => done()
]); ]);
}); });

View File

@ -2,7 +2,7 @@
{ {
"doctype": "Tax Rule", "doctype": "Tax Rule",
"tax_type" : "Sales", "tax_type" : "Sales",
"sales_tax_template": "_Test Tax 1", "sales_tax_template": "_Test Tax 1 - _TC",
"use_for_shopping_cart": 1, "use_for_shopping_cart": 1,
"billing_city": "_Test City", "billing_city": "_Test City",
"billing_state": "Test State", "billing_state": "Test State",
@ -15,7 +15,7 @@
{ {
"doctype": "Tax Rule", "doctype": "Tax Rule",
"tax_type" : "Sales", "tax_type" : "Sales",
"sales_tax_template": "_Test Tax 2", "sales_tax_template": "_Test Tax 2 - _TC",
"use_for_shopping_cart": 0, "use_for_shopping_cart": 0,
"billing_city": "_Test City", "billing_city": "_Test City",
"billing_country": "India", "billing_country": "India",

View File

@ -18,40 +18,40 @@ class TestTaxRule(unittest.TestCase):
def test_conflict(self): def test_conflict(self):
tax_rule1 = make_tax_rule(customer= "_Test Customer", tax_rule1 = make_tax_rule(customer= "_Test Customer",
sales_tax_template = "_Test Sales Taxes and Charges Template", priority = 1) sales_tax_template = "_Test Sales Taxes and Charges Template - _TC", priority = 1)
tax_rule1.save() tax_rule1.save()
tax_rule2 = make_tax_rule(customer= "_Test Customer", tax_rule2 = make_tax_rule(customer= "_Test Customer",
sales_tax_template = "_Test Sales Taxes and Charges Template", priority = 1) sales_tax_template = "_Test Sales Taxes and Charges Template - _TC", priority = 1)
self.assertRaises(ConflictingTaxRule, tax_rule2.save) self.assertRaises(ConflictingTaxRule, tax_rule2.save)
def test_conflict_with_non_overlapping_dates(self): def test_conflict_with_non_overlapping_dates(self):
tax_rule1 = make_tax_rule(customer= "_Test Customer", tax_rule1 = make_tax_rule(customer= "_Test Customer",
sales_tax_template = "_Test Sales Taxes and Charges Template", priority = 1, from_date = "2015-01-01") sales_tax_template = "_Test Sales Taxes and Charges Template - _TC", priority = 1, from_date = "2015-01-01")
tax_rule1.save() tax_rule1.save()
tax_rule2 = make_tax_rule(customer= "_Test Customer", tax_rule2 = make_tax_rule(customer= "_Test Customer",
sales_tax_template = "_Test Sales Taxes and Charges Template", priority = 1, to_date = "2013-01-01") sales_tax_template = "_Test Sales Taxes and Charges Template - _TC", priority = 1, to_date = "2013-01-01")
tax_rule2.save() tax_rule2.save()
self.assertTrue(tax_rule2.name) self.assertTrue(tax_rule2.name)
def test_for_parent_customer_group(self): def test_for_parent_customer_group(self):
tax_rule1 = make_tax_rule(customer_group= "All Customer Groups", tax_rule1 = make_tax_rule(customer_group= "All Customer Groups",
sales_tax_template = "_Test Sales Taxes and Charges Template", priority = 1, from_date = "2015-01-01") sales_tax_template = "_Test Sales Taxes and Charges Template - _TC", priority = 1, from_date = "2015-01-01")
tax_rule1.save() tax_rule1.save()
self.assertEquals(get_tax_template("2015-01-01", {"customer_group" : "Commercial", "use_for_shopping_cart":0}), self.assertEquals(get_tax_template("2015-01-01", {"customer_group" : "Commercial", "use_for_shopping_cart":0}),
"_Test Sales Taxes and Charges Template") "_Test Sales Taxes and Charges Template - _TC")
def test_conflict_with_overlapping_dates(self): def test_conflict_with_overlapping_dates(self):
tax_rule1 = make_tax_rule(customer= "_Test Customer", tax_rule1 = make_tax_rule(customer= "_Test Customer",
sales_tax_template = "_Test Sales Taxes and Charges Template", priority = 1, from_date = "2015-01-01", to_date = "2015-01-05") sales_tax_template = "_Test Sales Taxes and Charges Template - _TC", priority = 1, from_date = "2015-01-01", to_date = "2015-01-05")
tax_rule1.save() tax_rule1.save()
tax_rule2 = make_tax_rule(customer= "_Test Customer", tax_rule2 = make_tax_rule(customer= "_Test Customer",
sales_tax_template = "_Test Sales Taxes and Charges Template", priority = 1, from_date = "2015-01-03", to_date = "2015-01-09") sales_tax_template = "_Test Sales Taxes and Charges Template - _TC", priority = 1, from_date = "2015-01-03", to_date = "2015-01-09")
self.assertRaises(ConflictingTaxRule, tax_rule2.save) self.assertRaises(ConflictingTaxRule, tax_rule2.save)
@ -62,66 +62,66 @@ class TestTaxRule(unittest.TestCase):
def test_select_tax_rule_based_on_customer(self): def test_select_tax_rule_based_on_customer(self):
make_tax_rule(customer= "_Test Customer", make_tax_rule(customer= "_Test Customer",
sales_tax_template = "_Test Sales Taxes and Charges Template", save=1) sales_tax_template = "_Test Sales Taxes and Charges Template - _TC", save=1)
make_tax_rule(customer= "_Test Customer 1", make_tax_rule(customer= "_Test Customer 1",
sales_tax_template = "_Test Sales Taxes and Charges Template 1", save=1) sales_tax_template = "_Test Sales Taxes and Charges Template 1 - _TC", save=1)
make_tax_rule(customer= "_Test Customer 2", make_tax_rule(customer= "_Test Customer 2",
sales_tax_template = "_Test Sales Taxes and Charges Template 2", save=1) sales_tax_template = "_Test Sales Taxes and Charges Template 2 - _TC", save=1)
self.assertEquals(get_tax_template("2015-01-01", {"customer":"_Test Customer 2"}), self.assertEquals(get_tax_template("2015-01-01", {"customer":"_Test Customer 2"}),
"_Test Sales Taxes and Charges Template 2") "_Test Sales Taxes and Charges Template 2 - _TC")
def test_select_tax_rule_based_on_better_match(self): def test_select_tax_rule_based_on_better_match(self):
make_tax_rule(customer= "_Test Customer", billing_city = "Test City", billing_state = "Test State", make_tax_rule(customer= "_Test Customer", billing_city = "Test City", billing_state = "Test State",
sales_tax_template = "_Test Sales Taxes and Charges Template", save=1) sales_tax_template = "_Test Sales Taxes and Charges Template - _TC", save=1)
make_tax_rule(customer= "_Test Customer", billing_city = "Test City1", billing_state = "Test State", make_tax_rule(customer= "_Test Customer", billing_city = "Test City1", billing_state = "Test State",
sales_tax_template = "_Test Sales Taxes and Charges Template 1", save=1) sales_tax_template = "_Test Sales Taxes and Charges Template 1 - _TC", save=1)
self.assertEquals(get_tax_template("2015-01-01", {"customer":"_Test Customer", "billing_city": "Test City", "billing_state": "Test State"}), self.assertEquals(get_tax_template("2015-01-01", {"customer":"_Test Customer", "billing_city": "Test City", "billing_state": "Test State"}),
"_Test Sales Taxes and Charges Template") "_Test Sales Taxes and Charges Template - _TC")
def test_select_tax_rule_based_on_state_match(self): def test_select_tax_rule_based_on_state_match(self):
make_tax_rule(customer= "_Test Customer", shipping_state = "Test State", make_tax_rule(customer= "_Test Customer", shipping_state = "Test State",
sales_tax_template = "_Test Sales Taxes and Charges Template", save=1) sales_tax_template = "_Test Sales Taxes and Charges Template - _TC", save=1)
make_tax_rule(customer= "_Test Customer", shipping_state = "Test State12", make_tax_rule(customer= "_Test Customer", shipping_state = "Test State12",
sales_tax_template = "_Test Sales Taxes and Charges Template 1", priority=2, save=1) sales_tax_template = "_Test Sales Taxes and Charges Template 1 - _TC", priority=2, save=1)
self.assertEquals(get_tax_template("2015-01-01", {"customer":"_Test Customer", "shipping_state": "Test State"}), self.assertEquals(get_tax_template("2015-01-01", {"customer":"_Test Customer", "shipping_state": "Test State"}),
"_Test Sales Taxes and Charges Template") "_Test Sales Taxes and Charges Template - _TC")
def test_select_tax_rule_based_on_better_priority(self): def test_select_tax_rule_based_on_better_priority(self):
make_tax_rule(customer= "_Test Customer", billing_city = "Test City", make_tax_rule(customer= "_Test Customer", billing_city = "Test City",
sales_tax_template = "_Test Sales Taxes and Charges Template", priority=1, save=1) sales_tax_template = "_Test Sales Taxes and Charges Template - _TC", priority=1, save=1)
make_tax_rule(customer= "_Test Customer", billing_city = "Test City", make_tax_rule(customer= "_Test Customer", billing_city = "Test City",
sales_tax_template = "_Test Sales Taxes and Charges Template 1", priority=2, save=1) sales_tax_template = "_Test Sales Taxes and Charges Template 1 - _TC", priority=2, save=1)
self.assertEquals(get_tax_template("2015-01-01", {"customer":"_Test Customer", "billing_city": "Test City"}), self.assertEquals(get_tax_template("2015-01-01", {"customer":"_Test Customer", "billing_city": "Test City"}),
"_Test Sales Taxes and Charges Template 1") "_Test Sales Taxes and Charges Template 1 - _TC")
def test_select_tax_rule_based_cross_matching_keys(self): def test_select_tax_rule_based_cross_matching_keys(self):
make_tax_rule(customer= "_Test Customer", billing_city = "Test City", make_tax_rule(customer= "_Test Customer", billing_city = "Test City",
sales_tax_template = "_Test Sales Taxes and Charges Template", save=1) sales_tax_template = "_Test Sales Taxes and Charges Template - _TC", save=1)
make_tax_rule(customer= "_Test Customer 1", billing_city = "Test City 1", make_tax_rule(customer= "_Test Customer 1", billing_city = "Test City 1",
sales_tax_template = "_Test Sales Taxes and Charges Template 1", save=1) sales_tax_template = "_Test Sales Taxes and Charges Template 1 - _TC", save=1)
self.assertEquals(get_tax_template("2015-01-01", {"customer":"_Test Customer", "billing_city": "Test City 1"}), self.assertEquals(get_tax_template("2015-01-01", {"customer":"_Test Customer", "billing_city": "Test City 1"}),
None) None)
def test_select_tax_rule_based_cross_partially_keys(self): def test_select_tax_rule_based_cross_partially_keys(self):
make_tax_rule(customer= "_Test Customer", billing_city = "Test City", make_tax_rule(customer= "_Test Customer", billing_city = "Test City",
sales_tax_template = "_Test Sales Taxes and Charges Template", save=1) sales_tax_template = "_Test Sales Taxes and Charges Template - _TC", save=1)
make_tax_rule(billing_city = "Test City 1", make_tax_rule(billing_city = "Test City 1",
sales_tax_template = "_Test Sales Taxes and Charges Template 1", save=1) sales_tax_template = "_Test Sales Taxes and Charges Template 1 - _TC", save=1)
self.assertEquals(get_tax_template("2015-01-01", {"customer":"_Test Customer", "billing_city": "Test City 1"}), self.assertEquals(get_tax_template("2015-01-01", {"customer":"_Test Customer", "billing_city": "Test City 1"}),
"_Test Sales Taxes and Charges Template 1") "_Test Sales Taxes and Charges Template 1 - _TC")
def make_tax_rule(**args): def make_tax_rule(**args):

View File

@ -24,7 +24,7 @@ QUnit.test("test: purchase order with taxes and charges", function(assert) {
] ]
]}, ]},
{taxes_and_charges: 'TEST In State GST'} {taxes_and_charges: 'TEST In State GST - FT'}
]); ]);
}, },

View File

@ -17,7 +17,7 @@ QUnit.test("test: supplier quotation with taxes and charges", function(assert) {
{"warehouse": 'Stores - '+frappe.get_abbr(frappe.defaults.get_default('Company'))}, {"warehouse": 'Stores - '+frappe.get_abbr(frappe.defaults.get_default('Company'))},
] ]
]}, ]},
{taxes_and_charges:'TEST In State GST'}, {taxes_and_charges:'TEST In State GST - FT'},
]); ]);
}, },
() => {supplier_quotation_name = cur_frm.doc.name;}, () => {supplier_quotation_name = cur_frm.doc.name;},

View File

@ -17,7 +17,7 @@ QUnit.test("test quotation with taxes and charges", function(assert) {
{customer_address: 'Test1-Billing'}, {customer_address: 'Test1-Billing'},
{shipping_address_name: 'Test1-Shipping'}, {shipping_address_name: 'Test1-Shipping'},
{contact_person: 'Contact 1-Test Customer 1'}, {contact_person: 'Contact 1-Test Customer 1'},
{taxes_and_charges: 'TEST In State GST'}, {taxes_and_charges: 'TEST In State GST - FT'},
{tc_name: 'Test Term 1'}, {tc_name: 'Test Term 1'},
{terms: 'This is Test'} {terms: 'This is Test'}
]); ]);
@ -27,7 +27,7 @@ QUnit.test("test quotation with taxes and charges", function(assert) {
// get_item_details // get_item_details
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 4', "Item name correct"); assert.ok(cur_frm.doc.items[0].item_name=='Test Product 4', "Item name correct");
// get tax details // get tax details
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST', "Tax details correct"); assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
// get tax account head details // get tax account head details
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct"); assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");

View File

@ -17,7 +17,7 @@ QUnit.test("test sales order", function(assert) {
{customer_address: 'Test1-Billing'}, {customer_address: 'Test1-Billing'},
{shipping_address_name: 'Test1-Shipping'}, {shipping_address_name: 'Test1-Shipping'},
{contact_person: 'Contact 1-Test Customer 1'}, {contact_person: 'Contact 1-Test Customer 1'},
{taxes_and_charges: 'TEST In State GST'}, {taxes_and_charges: 'TEST In State GST - FT'},
{tc_name: 'Test Term 1'}, {tc_name: 'Test Term 1'},
{terms: 'This is Test'}, {terms: 'This is Test'},
{payment_terms_template: '_Test Payment Term Template UI'} {payment_terms_template: '_Test Payment Term Template UI'}
@ -34,7 +34,7 @@ QUnit.test("test sales order", function(assert) {
// get_item_details // get_item_details
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 3', "Item name correct"); assert.ok(cur_frm.doc.items[0].item_name=='Test Product 3', "Item name correct");
// get tax details // get tax details
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST', "Tax details correct"); assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
// get tax account head details // get tax account head details
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct"); assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");
}, },

View File

@ -17,7 +17,7 @@ QUnit.test("test sales order with taxes and charges", function(assert) {
{customer_address: 'Test1-Billing'}, {customer_address: 'Test1-Billing'},
{shipping_address_name: 'Test1-Shipping'}, {shipping_address_name: 'Test1-Shipping'},
{contact_person: 'Contact 1-Test Customer 1'}, {contact_person: 'Contact 1-Test Customer 1'},
{taxes_and_charges: 'TEST In State GST'}, {taxes_and_charges: 'TEST In State GST - FT'},
{tc_name: 'Test Term 1'}, {tc_name: 'Test Term 1'},
{terms: 'This is Test'} {terms: 'This is Test'}
]); ]);
@ -27,7 +27,7 @@ QUnit.test("test sales order with taxes and charges", function(assert) {
// get_item_details // get_item_details
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 4', "Item name correct"); assert.ok(cur_frm.doc.items[0].item_name=='Test Product 4', "Item name correct");
// get tax details // get tax details
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST', "Tax details correct"); assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
// get tax account head details // get tax account head details
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct"); assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");

View File

@ -34,24 +34,52 @@ frappe.ui.form.on("Company", {
frm.add_custom_button(__('Cost Centers'), function() { frm.add_custom_button(__('Cost Centers'), function() {
frappe.set_route('Tree', 'Cost Center', {'company': frm.doc.name}) frappe.set_route('Tree', 'Cost Center', {'company': frm.doc.name})
}) }, __("View"));
frm.add_custom_button(__('Chart of Accounts'), function() { frm.add_custom_button(__('Chart of Accounts'), function() {
frappe.set_route('Tree', 'Account', {'company': frm.doc.name}) frappe.set_route('Tree', 'Account', {'company': frm.doc.name})
}) }, __("View"));
frm.add_custom_button(__('Sales Tax Template'), function() {
frappe.set_route('List', 'Sales Taxes and Charges Template', {'company': frm.doc.name});
}, __("View"));
frm.add_custom_button(__('Purchase Tax Template'), function() {
frappe.set_route('List', 'Purchase Taxes and Charges Template', {'company': frm.doc.name});
}, __("View"));
frm.add_custom_button(__('Default Tax Template'), function() {
frm.trigger("make_default_tax_template");
}, __("Make"));
frm.page.set_inner_btn_group_as_primary(__("View"));
frm.page.set_inner_btn_group_as_primary(__("Make"));
} }
erpnext.company.set_chart_of_accounts_options(frm.doc); erpnext.company.set_chart_of_accounts_options(frm.doc);
}, },
make_default_tax_template: function(frm) {
frm.call({
method: "create_default_tax_template",
doc: frm.doc,
freeze: true,
callback: function() {
frappe.msgprint(__("Default tax templates for sales and purchase are created."));
}
})
},
onload_post_render: function(frm) { onload_post_render: function(frm) {
if(frm.get_field("delete_company_transactions").$input) if(frm.get_field("delete_company_transactions").$input)
frm.get_field("delete_company_transactions").$input.addClass("btn-danger"); frm.get_field("delete_company_transactions").$input.addClass("btn-danger");
}, },
country: function(frm) { country: function(frm) {
erpnext.company.set_chart_of_accounts_options(frm.doc); erpnext.company.set_chart_of_accounts_options(frm.doc);
}, },
delete_company_transactions: function(frm) { delete_company_transactions: function(frm) {
frappe.verify_password(function() { frappe.verify_password(function() {
var d = frappe.prompt({ var d = frappe.prompt({

View File

@ -50,6 +50,13 @@ class Company(Document):
if frappe.db.sql("select abbr from tabCompany where name!=%s and abbr=%s", (self.name, self.abbr)): if frappe.db.sql("select abbr from tabCompany where name!=%s and abbr=%s", (self.name, self.abbr)):
frappe.throw(_("Abbreviation already used for another company")) frappe.throw(_("Abbreviation already used for another company"))
def create_default_tax_template(self):
from erpnext.setup.setup_wizard.operations.taxes_setup import create_sales_tax
create_sales_tax({
'country': self.country,
'company_name': self.name
})
def validate_default_accounts(self): def validate_default_accounts(self):
for field in ["default_bank_account", "default_cash_account", for field in ["default_bank_account", "default_cash_account",
"default_receivable_account", "default_payable_account", "default_receivable_account", "default_payable_account",

View File

@ -16,38 +16,44 @@ def create_sales_tax(args):
tax_data.get('tax_rate'), sales_tax) tax_data.get('tax_rate'), sales_tax)
def make_tax_account_and_template(company, account_name, tax_rate, template_name=None): def make_tax_account_and_template(company, account_name, tax_rate, template_name=None):
if not isinstance(account_name, (list, tuple)):
account_name = [account_name]
tax_rate = [tax_rate]
accounts = []
for i, name in enumerate(account_name):
tax_account = make_tax_account(company, account_name[i], tax_rate[i])
if tax_account:
accounts.append(tax_account)
try: try:
if not isinstance(account_name, (list, tuple)):
account_name = [account_name]
tax_rate = [tax_rate]
accounts = []
for i, name in enumerate(account_name):
tax_account = make_tax_account(company, account_name[i], tax_rate[i])
if tax_account:
accounts.append(tax_account)
if accounts: if accounts:
make_sales_and_purchase_tax_templates(accounts, template_name) make_sales_and_purchase_tax_templates(accounts, template_name)
except frappe.NameError: except frappe.NameError:
pass frappe.message_log.pop()
except RootNotEditable: except RootNotEditable:
pass pass
def make_tax_account(company, account_name, tax_rate): def make_tax_account(company, account_name, tax_rate):
tax_group = get_tax_account_group(company) tax_group = get_tax_account_group(company)
if tax_group: if tax_group:
return frappe.get_doc({ try:
"doctype":"Account", return frappe.get_doc({
"company": company, "doctype":"Account",
"parent_account": tax_group, "company": company,
"account_name": account_name, "parent_account": tax_group,
"is_group": 0, "account_name": account_name,
"report_type": "Balance Sheet", "is_group": 0,
"root_type": "Liability", "report_type": "Balance Sheet",
"account_type": "Tax", "root_type": "Liability",
"tax_rate": flt(tax_rate) if tax_rate else None "account_type": "Tax",
}).insert(ignore_permissions=True, ignore_mandatory=True) "tax_rate": flt(tax_rate) if tax_rate else None
}).insert(ignore_permissions=True, ignore_mandatory=True)
except frappe.NameError:
frappe.message_log.pop()
abbr = frappe.db.get_value('Company', company, 'abbr')
account = '{0} - {1}'.format(account_name, abbr)
return frappe.get_doc('Account', account)
def make_sales_and_purchase_tax_templates(accounts, template_name=None): def make_sales_and_purchase_tax_templates(accounts, template_name=None):
if not template_name: if not template_name:
@ -62,7 +68,7 @@ def make_sales_and_purchase_tax_templates(accounts, template_name=None):
for account in accounts: for account in accounts:
sales_tax_template['taxes'].append({ sales_tax_template['taxes'].append({
"category": "Valuation and Total", "category": "Total",
"charge_type": "On Net Total", "charge_type": "On Net Total",
"account_head": account.name, "account_head": account.name,
"description": "{0} @ {1}".format(account.account_name, account.tax_rate), "description": "{0} @ {1}".format(account.account_name, account.tax_rate),

View File

@ -128,7 +128,7 @@ class TestShoppingCart(unittest.TestCase):
"contact_email": frappe.session.user, "contact_email": frappe.session.user,
"selling_price_list": "_Test Price List Rest of the World", "selling_price_list": "_Test Price List Rest of the World",
"currency": "USD", "currency": "USD",
"taxes_and_charges" : "_Test Tax 1", "taxes_and_charges" : "_Test Tax 1 - _TC",
"conversion_rate":1, "conversion_rate":1,
"transaction_date" : nowdate(), "transaction_date" : nowdate(),
"valid_till" : add_months(nowdate(), 1), "valid_till" : add_months(nowdate(), 1),
@ -136,7 +136,7 @@ class TestShoppingCart(unittest.TestCase):
"item_code": "_Test Item", "item_code": "_Test Item",
"qty": 1 "qty": 1
}], }],
"taxes": frappe.get_doc("Sales Taxes and Charges Template", "_Test Tax 1").taxes, "taxes": frappe.get_doc("Sales Taxes and Charges Template", "_Test Tax 1 - _TC").taxes,
"company": "_Test Company" "company": "_Test Company"
} }

View File

@ -15,7 +15,7 @@ QUnit.test("test delivery note", function(assert) {
]}, ]},
{shipping_address_name: 'Test1-Shipping'}, {shipping_address_name: 'Test1-Shipping'},
{contact_person: 'Contact 1-Test Customer 1'}, {contact_person: 'Contact 1-Test Customer 1'},
{taxes_and_charges: 'TEST In State GST'}, {taxes_and_charges: 'TEST In State GST - FT'},
{tc_name: 'Test Term 1'}, {tc_name: 'Test Term 1'},
{transporter_name:'TEST TRANSPORT'}, {transporter_name:'TEST TRANSPORT'},
{lr_no:'MH-04-FG 1111'} {lr_no:'MH-04-FG 1111'}

View File

@ -17,7 +17,7 @@ QUnit.test("test Purchase Receipt", function(assert) {
{'rejected_warehouse':'Work In Progress - '+frappe.get_abbr(frappe.defaults.get_default('Company'))}, {'rejected_warehouse':'Work In Progress - '+frappe.get_abbr(frappe.defaults.get_default('Company'))},
] ]
]}, ]},
{taxes_and_charges: 'TEST In State GST'}, {taxes_and_charges: 'TEST In State GST - FT'},
{tc_name: 'Test Term 1'}, {tc_name: 'Test Term 1'},
{terms: 'This is Test'} {terms: 'This is Test'}
]); ]);
@ -27,7 +27,7 @@ QUnit.test("test Purchase Receipt", function(assert) {
// get_item_details // get_item_details
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct"); assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct");
// get tax details // get tax details
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST', "Tax details correct"); assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
// get tax account head details // get tax account head details
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct"); assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");
// grand_total Calculated // grand_total Calculated