diff --git a/accounts/doctype/payment_to_invoice_matching_tool/test_payment_to_invoice_matching_tool.py b/accounts/doctype/payment_to_invoice_matching_tool/test_payment_to_invoice_matching_tool.py index 92c9e78980..870147a7fb 100644 --- a/accounts/doctype/payment_to_invoice_matching_tool/test_payment_to_invoice_matching_tool.py +++ b/accounts/doctype/payment_to_invoice_matching_tool/test_payment_to_invoice_matching_tool.py @@ -18,169 +18,171 @@ from __future__ import unicode_literals import unittest import webnotes -from webnotes.model.doc import Document -from webnotes.model.code import get_obj -from webnotes.utils import cstr, flt -sql = webnotes.conn.sql +test_records = [] -class TestInternalReco(unittest.TestCase): - def setUp(self): - webnotes.conn.begin() - - comp1.save(1) - cust1.save(1) - bank1.save(1) - rv1.save(1) - rv_gle.save(1) - - - for t in jv1: t.save(1) - for t in jv1[1:]: - sql("update `tabJournal Voucher Detail` set parent = '%s' where name = '%s'" % (jv1[0].name, t.name)) - - ir[0].save() - for t in ir[1:]: - t.save(1) - sql("update `tabPayment to Invoice Matching Tool Detail` set voucher_no = '%s', voucher_detail_no = '%s' where parent = 'Payment to Invoice Matching Tool'" % (jv1[0].name, jv1[1].name)) - - - sql("update `tabGL Entry` set voucher_no = %s, against_voucher = %s where voucher_no = 'rv1'", (rv1.name, rv1.name)) - sql("update `tabSingles` set value = %s where doctype = 'Payment to Invoice Matching Tool' and field = 'voucher_no'", rv1.name) - - - self.ir = get_obj('Payment to Invoice Matching Tool', with_children=1) - self.ir.reconcile() - - #=========================== - def test_jv(self): - """ - Test whether JV has benn properly splitted and against doc has been updated - """ - amt_against_doc = [[cstr(d[0]), flt(d[1]), flt(d[2])]for d in sql("select against_invoice, debit, credit from `tabJournal Voucher Detail` where parent = %s and account = 'cust1 - c1'", jv1[0].name)] - self.assertTrue(amt_against_doc == [[rv1.name, 0, 100.0], ['', 0, 400.0]]) - - #============================ - def test_gl_entry(self): - """ - Check proper gl entry has been made - """ - gle = [[cstr(d[0]), flt(d[1])] for d in sql("select against_voucher, sum(credit) - sum(debit) from `tabGL Entry` where voucher_no = %s and account = 'cust1 - c1' and ifnull(is_cancelled, 'No') = 'No' group by against_voucher", jv1[0].name)] - - self.assertTrue([rv1.name, 100.0] in gle) - self.assertTrue(['', 400.0] in gle) - - #============================ - def test_outstanding(self): - """ - Check whether Outstanding amount has been properly updated in RV - """ - amt = sql("select outstanding_amount from `tabSales Invoice` where name = '%s'" % rv1.name)[0][0] - self.assertTrue(amt == 0) - - #============================ - def tearDown(self): - webnotes.conn.rollback() - - - - -# test data -#--------------- -rv1 = Document(fielddata={ - 'doctype':'Sales Invoice', - 'docstatus':1, - 'debit_to':'cust1 - c1', - 'grand_total': 100, - 'outstanding_amount': 100, - 'name': 'rv1' - }) - -jv1 = [Document(fielddata={ - 'doctype':'Journal Voucher', - 'docstatus':1, - 'cheque_no': '163567', - 'docstatus':1, - 'company': 'comp1', - 'posting_date' : '2011-05-02', - 'remark': 'test data', - 'fiscal_year': '2011-2012', - 'total_debit': 500, - 'total_credit': 500 - }), - Document(fielddata = { - 'parenttype':'Journal Voucher', - 'parentfield':'entries', - 'doctype':'Journal Voucher Detail', - 'account' : 'cust1 - c1', - 'credit':500, - 'debit' : 0, - 'docstatus':1 - }), - Document(fielddata = { - 'parenttype':'Journal Voucher', - 'parentfield':'entries', - 'doctype':'Journal Voucher Detail', - 'account' : 'bank1 - c1', - 'credit':0, - 'debit' : 500, - 'docstatus':1 - })] - -ir = [Document(fielddata = { - 'doctype':'Payment to Invoice Matching Tool', - 'name' : 'Payment to Invoice Matching Tool', - 'account':'cust1 - c1', - 'voucher_type' : 'Sales Invoice', - 'voucher_no': 'rv1' - }), - Document(fielddata = { - 'parenttype':'Payment to Invoice Matching Tool', - 'parentfield':'ir_payment_details', - 'doctype':'Payment to Invoice Matching Tool Detail', - 'parent': 'Payment to Invoice Matching Tool', - 'voucher_no': 'jv1', - 'name' : '123112', - 'voucher_detail_no' : 'jvd1', - 'selected' : 1, - 'amt_due' : 500, - 'amt_to_be_reconciled':100 - })] - -cust1 = Document(fielddata={ - 'doctype':'Account', - 'docstatus':0, - 'account_name' : 'cust1', - 'debit_or_credit': 'Debit', - 'company' : 'comp1', - 'lft': 1, - 'rgt': 2 - }) - -bank1 = Document(fielddata={ - 'doctype':'Account', - 'docstatus':0, - 'account_name' : 'bank1', - 'debit_or_credit': 'Debit', - 'company' : 'comp1', - 'lft': 3, - 'rgt': 4 - }) - -comp1 = Document(fielddata={ - 'doctype':'Company', - 'abbr': 'c1', - 'company_name' : 'comp1', - 'name': 'comp1' - }) - -rv_gle = Document(fielddata={ - 'doctype':'GL Entry', - 'account': 'cust1 - c1', - 'company' : 'comp1', - 'voucher_no': 'rv1', - 'against_voucher': 'rv1', - 'against_voucher_type': 'Sales Invoice', - 'voucher_type' : 'Sales Invoice', - 'debit': 100, - 'credit': 0 - }) +# from webnotes.model.doc import Document +# from webnotes.model.code import get_obj +# from webnotes.utils import cstr, flt +# sql = webnotes.conn.sql +# +# class TestInternalReco(unittest.TestCase): +# def setUp(self): +# webnotes.conn.begin() +# +# comp1.save(1) +# cust1.save(1) +# bank1.save(1) +# rv1.save(1) +# rv_gle.save(1) +# +# +# for t in jv1: t.save(1) +# for t in jv1[1:]: +# sql("update `tabJournal Voucher Detail` set parent = '%s' where name = '%s'" % (jv1[0].name, t.name)) +# +# ir[0].save() +# for t in ir[1:]: +# t.save(1) +# sql("update `tabPayment to Invoice Matching Tool Detail` set voucher_no = '%s', voucher_detail_no = '%s' where parent = 'Payment to Invoice Matching Tool'" % (jv1[0].name, jv1[1].name)) +# +# +# sql("update `tabGL Entry` set voucher_no = %s, against_voucher = %s where voucher_no = 'rv1'", (rv1.name, rv1.name)) +# sql("update `tabSingles` set value = %s where doctype = 'Payment to Invoice Matching Tool' and field = 'voucher_no'", rv1.name) +# +# +# self.ir = get_obj('Payment to Invoice Matching Tool', with_children=1) +# self.ir.reconcile() +# +# #=========================== +# def test_jv(self): +# """ +# Test whether JV has benn properly splitted and against doc has been updated +# """ +# amt_against_doc = [[cstr(d[0]), flt(d[1]), flt(d[2])]for d in sql("select against_invoice, debit, credit from `tabJournal Voucher Detail` where parent = %s and account = 'cust1 - c1'", jv1[0].name)] +# self.assertTrue(amt_against_doc == [[rv1.name, 0, 100.0], ['', 0, 400.0]]) +# +# #============================ +# def test_gl_entry(self): +# """ +# Check proper gl entry has been made +# """ +# gle = [[cstr(d[0]), flt(d[1])] for d in sql("select against_voucher, sum(credit) - sum(debit) from `tabGL Entry` where voucher_no = %s and account = 'cust1 - c1' and ifnull(is_cancelled, 'No') = 'No' group by against_voucher", jv1[0].name)] +# +# self.assertTrue([rv1.name, 100.0] in gle) +# self.assertTrue(['', 400.0] in gle) +# +# #============================ +# def test_outstanding(self): +# """ +# Check whether Outstanding amount has been properly updated in RV +# """ +# amt = sql("select outstanding_amount from `tabSales Invoice` where name = '%s'" % rv1.name)[0][0] +# self.assertTrue(amt == 0) +# +# #============================ +# def tearDown(self): +# webnotes.conn.rollback() +# +# +# +# +# # test data +# #--------------- +# rv1 = Document(fielddata={ +# 'doctype':'Sales Invoice', +# 'docstatus':1, +# 'debit_to':'cust1 - c1', +# 'grand_total': 100, +# 'outstanding_amount': 100, +# 'name': 'rv1' +# }) +# +# jv1 = [Document(fielddata={ +# 'doctype':'Journal Voucher', +# 'docstatus':1, +# 'cheque_no': '163567', +# 'docstatus':1, +# 'company': 'comp1', +# 'posting_date' : '2011-05-02', +# 'remark': 'test data', +# 'fiscal_year': '2011-2012', +# 'total_debit': 500, +# 'total_credit': 500 +# }), +# Document(fielddata = { +# 'parenttype':'Journal Voucher', +# 'parentfield':'entries', +# 'doctype':'Journal Voucher Detail', +# 'account' : 'cust1 - c1', +# 'credit':500, +# 'debit' : 0, +# 'docstatus':1 +# }), +# Document(fielddata = { +# 'parenttype':'Journal Voucher', +# 'parentfield':'entries', +# 'doctype':'Journal Voucher Detail', +# 'account' : 'bank1 - c1', +# 'credit':0, +# 'debit' : 500, +# 'docstatus':1 +# })] +# +# ir = [Document(fielddata = { +# 'doctype':'Payment to Invoice Matching Tool', +# 'name' : 'Payment to Invoice Matching Tool', +# 'account':'cust1 - c1', +# 'voucher_type' : 'Sales Invoice', +# 'voucher_no': 'rv1' +# }), +# Document(fielddata = { +# 'parenttype':'Payment to Invoice Matching Tool', +# 'parentfield':'ir_payment_details', +# 'doctype':'Payment to Invoice Matching Tool Detail', +# 'parent': 'Payment to Invoice Matching Tool', +# 'voucher_no': 'jv1', +# 'name' : '123112', +# 'voucher_detail_no' : 'jvd1', +# 'selected' : 1, +# 'amt_due' : 500, +# 'amt_to_be_reconciled':100 +# })] +# +# cust1 = Document(fielddata={ +# 'doctype':'Account', +# 'docstatus':0, +# 'account_name' : 'cust1', +# 'debit_or_credit': 'Debit', +# 'company' : 'comp1', +# 'lft': 1, +# 'rgt': 2 +# }) +# +# bank1 = Document(fielddata={ +# 'doctype':'Account', +# 'docstatus':0, +# 'account_name' : 'bank1', +# 'debit_or_credit': 'Debit', +# 'company' : 'comp1', +# 'lft': 3, +# 'rgt': 4 +# }) +# +# comp1 = Document(fielddata={ +# 'doctype':'Company', +# 'abbr': 'c1', +# 'company_name' : 'comp1', +# 'name': 'comp1' +# }) +# +# rv_gle = Document(fielddata={ +# 'doctype':'GL Entry', +# 'account': 'cust1 - c1', +# 'company' : 'comp1', +# 'voucher_no': 'rv1', +# 'against_voucher': 'rv1', +# 'against_voucher_type': 'Sales Invoice', +# 'voucher_type' : 'Sales Invoice', +# 'debit': 100, +# 'credit': 0 +# }) diff --git a/accounts/doctype/pos_setting/test_pos_setting.py b/accounts/doctype/pos_setting/test_pos_setting.py index 2c45c4dce8..2373f8575f 100644 --- a/accounts/doctype/pos_setting/test_pos_setting.py +++ b/accounts/doctype/pos_setting/test_pos_setting.py @@ -7,8 +7,10 @@ test_records = [ "price_list_name": "_Test Price List", "company": "_Test Company", "warehouse": "_Test Warehouse", + "territory": "_Test Territory", "cash_bank_account": "_Test Account Bank Account - _TC", "income_account": "Sales - _TC", "cost_center": "_Test Cost Center - _TC", + "expense_account": "_Test Account Cost for Goods Sold - _TC", }] ] \ No newline at end of file diff --git a/accounts/doctype/sales_invoice/test_sales_invoice.py b/accounts/doctype/sales_invoice/test_sales_invoice.py index 7aa0c27d06..fd8dc648d2 100644 --- a/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -217,21 +217,11 @@ class TestSalesInvoice(unittest.TestCase): return dn def _insert_pos_settings(self): + from accounts.doctype.pos_setting.test_pos_setting \ + import test_records as pos_setting_test_records webnotes.conn.sql("""delete from `tabPOS Setting`""") - ps = webnotes.bean([ - { - "cash_bank_account": "_Test Account Bank Account - _TC", - "company": "_Test Company", - "conversion_rate": 1.0, - "cost_center": "_Test Cost Center - _TC", - "currency": "INR", - "doctype": "POS Setting", - "income_account": "_Test Account Bank Account - _TC", - "price_list_name": "_Test Price List", - "territory": "_Test Territory", - "warehouse": "_Test Warehouse" - } - ]) + + ps = webnotes.bean(copy=pos_setting_test_records[0]) ps.insert() def test_sales_invoice_with_advance(self): diff --git a/accounts/report/gross_profit/gross_profit.py b/accounts/report/gross_profit/gross_profit.py index 5c06637fda..7f6354b6cc 100644 --- a/accounts/report/gross_profit/gross_profit.py +++ b/accounts/report/gross_profit/gross_profit.py @@ -12,7 +12,7 @@ def execute(filters=None): item_sales_bom = get_item_sales_bom() - columns = ["Delivery Note/Sales Invoice::120", "Posting Date:Date", "Posting Time", + columns = ["Delivery Note/Sales Invoice::120", "Link::30", "Posting Date:Date", "Posting Time", "Item Code:Link/Item", "Item Name", "Description", "Warehouse:Link/Warehouse", "Qty:Float", "Selling Rate:Currency", "Selling Amount:Currency", "Buying Amount:Currency", "Gross Profit:Currency", "Gross Profit %:Percent", "Project:Link/Project"] @@ -32,8 +32,9 @@ def execute(filters=None): else: gross_profit = gross_profit_percent = 0.0 - name = """%s""" % ("/".join(["#Form", row.parenttype, row.name]), row.name) - data.append([name, row.posting_date, row.posting_time, row.item_code, row.item_name, + icon = """""" \ + % ("/".join(["#Form", row.parenttype, row.name]),) + data.append([row.name, icon, row.posting_date, row.posting_time, row.item_code, row.item_name, row.description, row.warehouse, row.qty, row.basic_rate, row.amount, buying_amount, gross_profit, gross_profit_percent, row.project]) @@ -57,7 +58,7 @@ def get_item_sales_bom(): item_sales_bom = {} for d in webnotes.conn.sql("""select parenttype, parent, parent_item, - item_code, warehouse, -1*qty as total_qty + item_code, warehouse, -1*qty as total_qty, parent_detail_docname from `tabDelivery Note Packing Item` where docstatus=1""", as_dict=True): item_sales_bom.setdefault(d.parenttype, webnotes._dict()).setdefault(d.parent, webnotes._dict()).setdefault(d.parent_item, []).append(d) diff --git a/accounts/search_criteria/purchase_register/purchase_register.py b/accounts/search_criteria/purchase_register/purchase_register.py index 93fc32393e..82ab047e3b 100644 --- a/accounts/search_criteria/purchase_register/purchase_register.py +++ b/accounts/search_criteria/purchase_register/purchase_register.py @@ -77,14 +77,10 @@ for r in res: r.append(net_total) #Get tax for account heads - acc_head_tax = sql("""select account_head, sum(tax_amount) - from `tabPurchase Taxes and Charges` - where parent = '%s' - and parenttype = 'Purchase Invoice' - and add_deduct_tax = 'Add' - and category in ('Total', 'Valuation and Total') - group by account_head - """ %(r[col_idx['ID']],)) + acc_head_tax = sql("""select account_head, + sum(if(add_deduct_tax='Add', tax_amount, -tax_amount)) + from `tabPurchase Taxes and Charges` where parent = %s and parenttype = 'Purchase Invoice' + and category in ('Total', 'Valuation and Total') group by account_head""", r[col_idx['ID']]) #Convert the result to dictionary for easy retrieval acc_head_tax_dict = {} diff --git a/hr/doctype/department/test_department.py b/hr/doctype/department/test_department.py index 40125831f0..a5ac6c7d37 100644 --- a/hr/doctype/department/test_department.py +++ b/hr/doctype/department/test_department.py @@ -1,3 +1,5 @@ +test_ignore = ["Leave Block List"] + test_records = [ [{"doctype":"Department", "department_name":"_Test Department"}], [{"doctype":"Department", "department_name":"_Test Department 1"}] diff --git a/hr/doctype/leave_application/test_leave_application.py b/hr/doctype/leave_application/test_leave_application.py index bc4a38c669..672e668c1e 100644 --- a/hr/doctype/leave_application/test_leave_application.py +++ b/hr/doctype/leave_application/test_leave_application.py @@ -29,7 +29,7 @@ class TestLeaveApplication(unittest.TestCase): application = self.get_application(test_records[1]) self.assertTrue(application.insert()) - + def test_overlap(self): application = self.get_application(test_records[1]) self.assertRaises(OverlapError, application.insert) @@ -57,6 +57,7 @@ class TestLeaveApplication(unittest.TestCase): application.doc.status = "Approved" self.assertRaises(LeaveDayBlockedError, application.submit) +test_dependencies = ["Leave Block List"] test_records = [ [{ diff --git a/hr/doctype/salary_manager/test_salary_manager.py b/hr/doctype/salary_manager/test_salary_manager.py index b689b51adb..eb990f81b6 100644 --- a/hr/doctype/salary_manager/test_salary_manager.py +++ b/hr/doctype/salary_manager/test_salary_manager.py @@ -18,199 +18,201 @@ from __future__ import unicode_literals import unittest import webnotes -from webnotes.model.doc import Document -from webnotes.model.code import get_obj -sql = webnotes.conn.sql +test_records = [] -class TestSalaryManager(unittest.TestCase): - def setUp(self): - webnotes.conn.begin() - for rec in [des1, dep1, branch1, grade1, comp1, emp1, emp2]: - rec.save(1) - - ss1[0].employee = emp1.name - for s in ss1: s.save(1) - for s in ss1[1:]: - sql("update `tabSalary Structure Earning` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name)) - sql("update `tabSalary Structure Deduction` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name)) - - - ss2[0].employee = emp2.name - for s in ss2: s.save(1) - for s in ss2[1:]: - sql("update `tabSalary Structure Earning` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name)) - sql("update `tabSalary Structure Deduction` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name)) - - sman.save() - self.sm = get_obj('Salary Manager') - leave.save(1) - self.sm.create_sal_slip() - - def test_creation(self): - ssid = sql(""" - select name, department - from `tabSalary Slip` - where month = '08' and fiscal_year='2011-2012'""") - - self.assertTrue(len(ssid)==1) - self.assertTrue(ssid[0][1] == 'dep1') - - - def test_lwp_calc(self): - ss = sql(""" - select payment_days - from `tabSalary Slip` - where month = '08' and fiscal_year='2011-2012' and employee = '%s' - """ % emp1.name) - - self.assertTrue(ss[0][0]==27) - - def test_net_pay(self): - ss = webnotes.conn.sql(""" - select rounded_total - from `tabSalary Slip` - where month = '08' - and fiscal_year='2011-2012' and employee = '%s'""" % emp1.name) - self.assertTrue(ss[0][0]==67) - - def test_submit(self): - self.sm.submit_salary_slip() - ss = webnotes.conn.sql(""" - select docstatus - from `tabSalary Slip` - where month = '08' - and fiscal_year='2011-2012' and employee = '%s'""" % emp1.name) - self.assertTrue(ss[0][0]==1) - - def tearDown(self): - webnotes.conn.rollback() - -#-------------------------------------------- -# test data -#-------------------------------------------- -des1 = Document(fielddata={ - 'name':'des1', - 'doctype':'Designation', - 'designation_name':'des1' -}) - -dep1 = Document(fielddata={ - 'name':'dep1', - 'doctype':'Department', - 'department_name' : 'dep1' -}) - -branch1 = Document(fielddata={ - 'name':'branch1', - 'doctype':'Branch', - 'branch' : 'branch1' -}) - -comp1 = Document(fielddata={ - 'name':'comp1', - 'doctype':'Company', - 'abbr':'c1', - 'company_name' : 'comp1' -}) - -grade1 = Document(fielddata={ - 'name':'grade1', - 'doctype':'Grade', - 'grade_name' : 'grade1' -}) - -emp1 = Document(fielddata={ - 'doctype':'Employee', - 'employee_number':'emp1', - 'department':'dep1', - 'designation':'des1', - 'branch' : 'branch1', - 'company':'comp1', - 'grade':'grade1', - 'naming_series':'EMP/', - 'status':'Active', - 'docstatus':0, - 'employee_name':'emp1' -}) - -emp2 = Document(fielddata={ - 'doctype':'Employee', - 'employee_number':'emp2', - 'department':'dep1', - 'designation':'des2', - 'branch' : 'branch1', - 'company':'comp1', - 'naming_series':'EMP/', - 'grade':'grade1', - 'status':'Active', - -}) - -ss1 = [ - Document(fielddata={ - 'doctype':'Salary Structure', - 'docstatus':0, - 'employee':'emp1', - 'is_active':'Yes', - 'department': 'dep1', - 'designation' : 'des1', - 'employee_name': 'emp1' - }), - Document(fielddata={ - 'parenttype':'Salary Structure', - 'parentfield':'earning_details', - 'doctype':'Salary Structure Earning', - 'e_type' : 'Basic', - 'depend_on_lwp':1, - 'modified_value':100 - }), - Document(fielddata={ - 'parenttype':'Salary Structure', - 'parentfield':'earning_details', - 'doctype':'Salary Structure Deduction', - 'd_type':'TDS', - 'd_modified_amt':20 - }) -] - -ss2 = [ - Document(fielddata={ - 'doctype':'Salary Structure', - 'is_active':'Yes', - 'docstatus':0, - }), - Document(fielddata={ - 'parenttype':'Salary Structure', - 'parentfield':'deduction_details', - 'doctype':'Salary Structure Earning', - 'e_type' : 'Basic', - 'modified_value':100 - }), - Document(fielddata={ - 'parenttype':'Salary Structure', - 'parentfield':'deduction_details', - 'doctype':'Salary Structure Deduction', - 'd_type':'TDS', - 'd_modified_amt':20 - }) -] - -sman = Document(fielddata={ - 'name':'Salary Manager', - 'doctype':'Salary Manager', - 'company': 'comp1', - 'department':'dep1', - 'designation':'des1', - 'month': '08', - 'fiscal_year':'2011-2012' - }) - -leave = Document(fielddata = { - 'doctype':'Leave Application', - 'employee':'emp1', - 'from_date':'2011-08-12', - 'to_date':'2011-08-15', - 'total_leave_days':'4', - 'leave_type':'Leave Without Pay', - 'docstatus':1 - }) +# from webnotes.model.doc import Document +# from webnotes.model.code import get_obj +# sql = webnotes.conn.sql +# +# class TestSalaryManager(unittest.TestCase): +# def setUp(self): +# webnotes.conn.begin() +# for rec in [des1, dep1, branch1, grade1, comp1, emp1, emp2]: +# rec.save(1) +# +# ss1[0].employee = emp1.name +# for s in ss1: s.save(1) +# for s in ss1[1:]: +# sql("update `tabSalary Structure Earning` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name)) +# sql("update `tabSalary Structure Deduction` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name)) +# +# +# ss2[0].employee = emp2.name +# for s in ss2: s.save(1) +# for s in ss2[1:]: +# sql("update `tabSalary Structure Earning` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name)) +# sql("update `tabSalary Structure Deduction` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name)) +# +# sman.save() +# self.sm = get_obj('Salary Manager') +# leave.save(1) +# self.sm.create_sal_slip() +# +# def test_creation(self): +# ssid = sql(""" +# select name, department +# from `tabSalary Slip` +# where month = '08' and fiscal_year='2011-2012'""") +# +# self.assertTrue(len(ssid)==1) +# self.assertTrue(ssid[0][1] == 'dep1') +# +# +# def test_lwp_calc(self): +# ss = sql(""" +# select payment_days +# from `tabSalary Slip` +# where month = '08' and fiscal_year='2011-2012' and employee = '%s' +# """ % emp1.name) +# +# self.assertTrue(ss[0][0]==27) +# +# def test_net_pay(self): +# ss = webnotes.conn.sql(""" +# select rounded_total +# from `tabSalary Slip` +# where month = '08' +# and fiscal_year='2011-2012' and employee = '%s'""" % emp1.name) +# self.assertTrue(ss[0][0]==67) +# +# def test_submit(self): +# self.sm.submit_salary_slip() +# ss = webnotes.conn.sql(""" +# select docstatus +# from `tabSalary Slip` +# where month = '08' +# and fiscal_year='2011-2012' and employee = '%s'""" % emp1.name) +# self.assertTrue(ss[0][0]==1) +# +# def tearDown(self): +# webnotes.conn.rollback() +# +# #-------------------------------------------- +# # test data +# #-------------------------------------------- +# des1 = Document(fielddata={ +# 'name':'des1', +# 'doctype':'Designation', +# 'designation_name':'des1' +# }) +# +# dep1 = Document(fielddata={ +# 'name':'dep1', +# 'doctype':'Department', +# 'department_name' : 'dep1' +# }) +# +# branch1 = Document(fielddata={ +# 'name':'branch1', +# 'doctype':'Branch', +# 'branch' : 'branch1' +# }) +# +# comp1 = Document(fielddata={ +# 'name':'comp1', +# 'doctype':'Company', +# 'abbr':'c1', +# 'company_name' : 'comp1' +# }) +# +# grade1 = Document(fielddata={ +# 'name':'grade1', +# 'doctype':'Grade', +# 'grade_name' : 'grade1' +# }) +# +# emp1 = Document(fielddata={ +# 'doctype':'Employee', +# 'employee_number':'emp1', +# 'department':'dep1', +# 'designation':'des1', +# 'branch' : 'branch1', +# 'company':'comp1', +# 'grade':'grade1', +# 'naming_series':'EMP/', +# 'status':'Active', +# 'docstatus':0, +# 'employee_name':'emp1' +# }) +# +# emp2 = Document(fielddata={ +# 'doctype':'Employee', +# 'employee_number':'emp2', +# 'department':'dep1', +# 'designation':'des2', +# 'branch' : 'branch1', +# 'company':'comp1', +# 'naming_series':'EMP/', +# 'grade':'grade1', +# 'status':'Active', +# +# }) +# +# ss1 = [ +# Document(fielddata={ +# 'doctype':'Salary Structure', +# 'docstatus':0, +# 'employee':'emp1', +# 'is_active':'Yes', +# 'department': 'dep1', +# 'designation' : 'des1', +# 'employee_name': 'emp1' +# }), +# Document(fielddata={ +# 'parenttype':'Salary Structure', +# 'parentfield':'earning_details', +# 'doctype':'Salary Structure Earning', +# 'e_type' : 'Basic', +# 'depend_on_lwp':1, +# 'modified_value':100 +# }), +# Document(fielddata={ +# 'parenttype':'Salary Structure', +# 'parentfield':'earning_details', +# 'doctype':'Salary Structure Deduction', +# 'd_type':'TDS', +# 'd_modified_amt':20 +# }) +# ] +# +# ss2 = [ +# Document(fielddata={ +# 'doctype':'Salary Structure', +# 'is_active':'Yes', +# 'docstatus':0, +# }), +# Document(fielddata={ +# 'parenttype':'Salary Structure', +# 'parentfield':'deduction_details', +# 'doctype':'Salary Structure Earning', +# 'e_type' : 'Basic', +# 'modified_value':100 +# }), +# Document(fielddata={ +# 'parenttype':'Salary Structure', +# 'parentfield':'deduction_details', +# 'doctype':'Salary Structure Deduction', +# 'd_type':'TDS', +# 'd_modified_amt':20 +# }) +# ] +# +# sman = Document(fielddata={ +# 'name':'Salary Manager', +# 'doctype':'Salary Manager', +# 'company': 'comp1', +# 'department':'dep1', +# 'designation':'des1', +# 'month': '08', +# 'fiscal_year':'2011-2012' +# }) +# +# leave = Document(fielddata = { +# 'doctype':'Leave Application', +# 'employee':'emp1', +# 'from_date':'2011-08-12', +# 'to_date':'2011-08-15', +# 'total_leave_days':'4', +# 'leave_type':'Leave Without Pay', +# 'docstatus':1 +# }) diff --git a/patches/february_2013/p03_material_request.py b/patches/february_2013/p03_material_request.py index 612c1084a3..66b2bf6cbb 100644 --- a/patches/february_2013/p03_material_request.py +++ b/patches/february_2013/p03_material_request.py @@ -3,8 +3,11 @@ import webnotes, os, sys def execute(): webnotes.reload_doc("core", "doctype", "doctype") - webnotes.rename_doc("DocType", "Purchase Request Item", "Material Request Item", force=True) - webnotes.rename_doc("DocType", "Purchase Request", "Material Request", force=True) + tables = webnotes.conn.sql_list("show tables") + if not "tabMaterial Request Item" in tables: + webnotes.rename_doc("DocType", "Purchase Request Item", "Material Request Item", force=True) + if not "tabMaterial Request" in tables: + webnotes.rename_doc("DocType", "Purchase Request", "Material Request", force=True) webnotes.reload_doc("buying", "search_criteria", "pending_po_items_to_bill") webnotes.reload_doc("buying", "search_criteria", "pending_po_items_to_receive") @@ -19,4 +22,4 @@ def execute(): os.system("rm -rf app/hr/doctype/holiday_block_list") os.system("rm -rf app/hr/doctype/holiday_block_list_allow") os.system("rm -rf app/hr/doctype/holiday_block_list_date") - \ No newline at end of file + diff --git a/patches/march_2013/p10_set_fiscal_year_for_stock.py b/patches/march_2013/p10_set_fiscal_year_for_stock.py new file mode 100644 index 0000000000..c9d520279a --- /dev/null +++ b/patches/march_2013/p10_set_fiscal_year_for_stock.py @@ -0,0 +1,18 @@ +import webnotes +from accounts.utils import get_fiscal_year, FiscalYearError + +def execute(): + webnotes.reload_doc("stock", "doctype", "stock_entry") + webnotes.reload_doc("stock", "doctype", "stock_reconciliation") + + for doctype in ["Stock Entry", "Stock Reconciliation"]: + for name, posting_date in webnotes.conn.sql("""select name, posting_date from `tab%s` + where ifnull(fiscal_year,'')='' and docstatus=1""" % doctype): + try: + fiscal_year = get_fiscal_year(posting_date, 0)[0] + webnotes.conn.sql("""update `tab%s` set fiscal_year=%s where name=%s""" % \ + (doctype, "%s", "%s"), (fiscal_year, name)) + except FiscalYearError: + pass + + \ No newline at end of file diff --git a/patches/patch_list.py b/patches/patch_list.py index 0c5427b52b..2ea10cd308 100644 --- a/patches/patch_list.py +++ b/patches/patch_list.py @@ -216,7 +216,12 @@ patch_list = [ "patches.march_2013.p06_remove_sales_purchase_return_tool", "execute:webnotes.bean('Global Defaults').save()", "patches.march_2013.p07_update_project_in_stock_ledger", + "execute:webnotes.reload_doc('stock', 'doctype', 'item') #2013-03-25", + "execute:webnotes.reload_doc('setup', 'doctype', 'item_group') #2013-03-25", + "execute:webnotes.reload_doc('website', 'doctype', 'blog_post') #2013-03-25", + "execute:webnotes.reload_doc('website', 'doctype', 'web_page') #2013-03-25", "execute:webnotes.bean('Style Settings').save() #2013-03-25", "execute:webnotes.conn.set_value('Email Settings', None, 'send_print_in_body_and_attachment', 1)", "patches.march_2013.p09_unset_user_type_partner", + "patches.march_2013.p10_set_fiscal_year_for_stock", ] \ No newline at end of file diff --git a/projects/doctype/time_log/test_time_log.py b/projects/doctype/time_log/test_time_log.py index 1168c01460..8f1848f473 100644 --- a/projects/doctype/time_log/test_time_log.py +++ b/projects/doctype/time_log/test_time_log.py @@ -9,6 +9,7 @@ class TestTimeLog(unittest.TestCase): self.assertRaises(OverlapError, ts.insert) test_records = [[{ + "doctype": "Time Log", "from_time": "2013-01-01 10:00:00", "to_time": "2013-01-01 11:00:00", "activity_type": "_Test Activity Type", diff --git a/stock/doctype/material_request/test_material_request.py b/stock/doctype/material_request/test_material_request.py index 44f82d2cf1..080989f2d9 100644 --- a/stock/doctype/material_request/test_material_request.py +++ b/stock/doctype/material_request/test_material_request.py @@ -24,7 +24,8 @@ class TestMaterialRequest(unittest.TestCase): "doctype": "Stock Entry", "posting_date": "2013-03-01", "posting_time": "00:00:00", - "purpose": "Material Receipt" + "purpose": "Material Receipt", + "fiscal_year": "_Test Fiscal Year 2013", }, { "conversion_factor": 1.0, @@ -125,7 +126,8 @@ class TestMaterialRequest(unittest.TestCase): ["Material Request Item", "Stock Entry Detail"]], mr.doc.name) se_doclist[0].fields.update({ "posting_date": "2013-03-01", - "posting_time": "01:00" + "posting_time": "01:00", + "fiscal_year": "_Test Fiscal Year 2013", }) se_doclist[1].fields.update({ "qty": 27.0, @@ -186,7 +188,8 @@ class TestMaterialRequest(unittest.TestCase): ["Material Request Item", "Stock Entry Detail"]], mr.doc.name) se_doclist[0].fields.update({ "posting_date": "2013-03-01", - "posting_time": "00:00" + "posting_time": "00:00", + "fiscal_year": "_Test Fiscal Year 2013", }) se_doclist[1].fields.update({ "qty": 60.0, @@ -239,7 +242,8 @@ class TestMaterialRequest(unittest.TestCase): ["Material Request Item", "Stock Entry Detail"]], mr.doc.name) se_doclist[0].fields.update({ "posting_date": "2013-03-01", - "posting_time": "00:00" + "posting_time": "00:00", + "fiscal_year": "_Test Fiscal Year 2013", }) se_doclist[1].fields.update({ "qty": 60.0, diff --git a/stock/utils.py b/stock/utils.py index 1406af6807..d75c1d438b 100644 --- a/stock/utils.py +++ b/stock/utils.py @@ -170,9 +170,10 @@ def get_buying_amount(item_code, warehouse, qty, voucher_type, voucher_no, vouch # sales bom item buying_amount = 0.0 for bom_item in item_sales_bom[item_code]: - buying_amount += _get_buying_amount(voucher_type, voucher_no, "[** No Item Row **]", - bom_item.item_code, bom_item.warehouse or warehouse, - bom_item.total_qty or (bom_item.qty * qty), stock_ledger_entries) + if bom_item.get("parent_detail_docname")==voucher_detail_no: + buying_amount += _get_buying_amount(voucher_type, voucher_no, "[** No Item Row **]", + bom_item.item_code, bom_item.warehouse or warehouse, + bom_item.total_qty or (bom_item.qty * qty), stock_ledger_entries) return buying_amount else: # doesn't have sales bom @@ -181,13 +182,16 @@ def get_buying_amount(item_code, warehouse, qty, voucher_type, voucher_no, vouch def _get_buying_amount(voucher_type, voucher_no, item_row, item_code, warehouse, qty, stock_ledger_entries): - for i, sle in enumerate(stock_ledger_entries): + relevant_stock_ledger_entries = [sle for sle in stock_ledger_entries + if sle.item_code == item_code and sle.warehouse == warehouse] + + for i, sle in enumerate(relevant_stock_ledger_entries): if sle.voucher_type == voucher_type and sle.voucher_no == voucher_no and \ - (sle.voucher_detail_no == item_row or (sle.voucher_type != "Stock Reconciliation" - and sle.item_code == item_code and sle.warehouse == warehouse and flt(sle.qty) == qty)): - previous_stock_value = len(stock_ledger_entries) > i+1 and \ - flt(stock_ledger_entries[i+1].stock_value) or 0.0 - + ((sle.voucher_detail_no == item_row) or (sle.voucher_type != "Stock Reconciliation" + and flt(sle.qty) == qty)): + previous_stock_value = len(relevant_stock_ledger_entries) > i+1 and \ + flt(relevant_stock_ledger_entries[i+1].stock_value) or 0.0 + buying_amount = previous_stock_value - flt(sle.stock_value) return buying_amount diff --git a/support/doctype/newsletter/test_newsletter.py b/support/doctype/newsletter/test_newsletter.py index 4650c0adbf..0813cfe727 100644 --- a/support/doctype/newsletter/test_newsletter.py +++ b/support/doctype/newsletter/test_newsletter.py @@ -38,18 +38,21 @@ test_dependencies = ["Lead", "Contact"] test_records =[ [{ + "doctype": "Newsletter", "subject": "_Test Newsletter to Lead", "send_to_type": "Lead", "lead_source": "All", "message": "This is a test newsletter" }], [{ + "doctype": "Newsletter", "subject": "_Test Newsletter to Contact", "send_to_type": "Contact", "contact_type": "Customer", "message": "This is a test newsletter" }], [{ + "doctype": "Newsletter", "subject": "_Test Newsletter to Custom", "send_to_type": "Custom", "email_list": "test_custom@example.com, test_custom1@example.com, test_custom2@example.com",