diff --git a/line.py b/line.py index 08d137a..607b0a0 100644 --- a/line.py +++ b/line.py @@ -357,6 +357,8 @@ class Line(Workflow, ModelSQL, ModelView): return cls.search_payee(name, clause) + [ ('description',) + tuple(clause[1:]), ('category.rec_name',) + tuple(clause[1:]), + ('splitlines.description',) + tuple(clause[1:]), + ('splitlines.category.rec_name',) + tuple(clause[1:]), ] def get_rec_name(self, name): diff --git a/tests/test_line.py b/tests/test_line.py index 26de7bf..8e04bcf 100644 --- a/tests/test_line.py +++ b/tests/test_line.py @@ -460,10 +460,18 @@ class LineTestCase(ModuleTestCase): pool = Pool() Book = pool.get('cashbook.book') Lines = pool.get('cashbook.line') + Category = pool.get('cashbook.category') types = self.prep_type() - category = self.prep_category(cattype='in') company = self.prep_company() + category = self.prep_category(cattype='in') + category2, = Category.create([{ + 'name': 'sp-cat1', + 'cattype': 'in', + 'company': company.id, + }]) + self.assertEqual(category2.rec_name, 'sp-cat1') + party = self.prep_party() book, = Book.create([{ 'name': 'Book 1', @@ -486,33 +494,60 @@ class LineTestCase(ModuleTestCase): 'bookingtype': 'in', 'amount': Decimal('1.0'), 'party': party.id, + }, { + 'date': date(2022, 5, 3), + 'description': 'Text 3', + 'bookingtype': 'spin', + 'amount': Decimal('1.0'), + 'party': party.id, + 'splitlines': [('create', [{ + 'amount': Decimal('1.0'), + 'description': 'text3-spline1', + 'category': category2.id, + }])], }])], }]) self.assertEqual(book.name, 'Book 1') self.assertEqual(book.btype.rec_name, 'CAS - Cash') self.assertEqual(book.state, 'open') - self.assertEqual(len(book.lines), 2) + self.assertEqual(len(book.lines), 3) self.assertEqual(book.lines[0].date, date(2022, 5, 1)) self.assertEqual(book.lines[0].rec_name, '05/01/2022|Rev|1.00 usd|Text 1 [Cat1]') self.assertEqual(book.lines[0].state_cashbook, 'open') self.assertEqual(book.lines[1].date, date(2022, 5, 2)) self.assertEqual(book.lines[1].rec_name, '05/02/2022|Rev|1.00 usd|Text 2 [Cat1]') + self.assertEqual(book.lines[2].date, date(2022, 5, 3)) + self.assertEqual(book.lines[2].rec_name, '05/03/2022|Rev/Sp|1.00 usd|Text 3 [-]') self.assertEqual(Lines.search_count([('rec_name', '=', 'Text 1')]), 1) self.assertEqual(Lines.search_count([('rec_name', '=', 'Text 1a')]), 0) - self.assertEqual(Lines.search_count([('rec_name', 'ilike', 'text%')]), 2) + self.assertEqual(Lines.search_count([('rec_name', 'ilike', 'text%')]), 3) + # search in category of split-line + self.assertEqual(Lines.search_count([('rec_name', '=', 'sp-cat1')]), 1) + # search in description of split-line + self.assertEqual(Lines.search_count([('rec_name', '=', 'text3-spline1')]), 1) + # ilike fails in fields.Text to find subtext... + self.assertEqual(Lines.search_count([('rec_name', 'ilike', '%spline%')]), 0) + # ...but it uses separator-chars + self.assertEqual(Lines.search_count([('rec_name', 'ilike', 'text3%')]), 1) + self.assertEqual(Lines.search_count([('rec_name', 'ilike', 'spline1')]), 1) + self.assertEqual(Lines.search_count([('rec_name', 'ilike', '%spline1')]), 1) + self.assertEqual(Lines.search_count([('rec_name', 'ilike', 'spline1%')]), 0) + self.assertEqual(Lines.search_count([('rec_name', 'ilike', 'text3')]), 1) - self.assertEqual(Lines.search_count([('state_cashbook', '=', 'open')]), 2) + self.assertEqual(Lines.search_count([('state_cashbook', '=', 'open')]), 3) self.assertEqual(Lines.search_count([('state_cashbook', '=', 'closed')]), 0) - self.assertEqual(Lines.search_count([('cashbook.state', '=', 'open')]), 2) + self.assertEqual(Lines.search_count([('cashbook.state', '=', 'open')]), 3) self.assertEqual(Lines.search_count([('cashbook.state', '=', 'closed')]), 0) # sorting: date -> state -> id - self.assertEqual(len(book.lines), 2) + self.assertEqual(len(book.lines), 3) self.assertEqual(book.lines[0].rec_name, '05/01/2022|Rev|1.00 usd|Text 1 [Cat1]') self.assertEqual(book.lines[0].state, 'edit') self.assertEqual(book.lines[1].rec_name, '05/02/2022|Rev|1.00 usd|Text 2 [Cat1]') self.assertEqual(book.lines[1].state, 'edit') + self.assertEqual(book.lines[2].rec_name, '05/03/2022|Rev/Sp|1.00 usd|Text 3 [-]') + self.assertEqual(book.lines[2].state, 'edit') # set to same date Lines.write(*[ @@ -526,6 +561,8 @@ class LineTestCase(ModuleTestCase): self.assertEqual(book.lines[0].state, 'edit') self.assertEqual(book.lines[1].rec_name, '05/01/2022|Rev|1.00 usd|Text 2 [Cat1]') self.assertEqual(book.lines[1].state, 'edit') + self.assertEqual(book.lines[2].rec_name, '05/01/2022|Rev/Sp|1.00 usd|Text 3 [-]') + self.assertEqual(book.lines[2].state, 'edit') # set to 'check', will sort first Lines.wfcheck([book.lines[1]]) @@ -534,6 +571,8 @@ class LineTestCase(ModuleTestCase): self.assertEqual(book.lines[0].state, 'check') self.assertEqual(book.lines[1].rec_name, '05/01/2022|Rev|1.00 usd|Text 1 [Cat1]') self.assertEqual(book.lines[1].state, 'edit') + self.assertEqual(book.lines[2].rec_name, '05/01/2022|Rev/Sp|1.00 usd|Text 3 [-]') + self.assertEqual(book.lines[2].state, 'edit') @with_transaction() def test_line_create_check_deny_write(self):