diff --git a/line.py b/line.py index 8e0f17f..9d65395 100644 --- a/line.py +++ b/line.py @@ -91,8 +91,7 @@ class Line(Workflow, ModelSQL, ModelView): STATES['readonly'], Eval('bookingtype', '').in_(['spin', 'spout']), ), - }, depends=DEPENDS+['currency_digits', 'bookingtype'], - domain=[('amount', '>=', Decimal('0.0'))]) + }, depends=DEPENDS+['currency_digits', 'bookingtype']) debit = fields.Numeric(string='Debit', digits=(16, Eval('currency_digits', 2)), required=True, readonly=True, depends=['currency_digits']) credit = fields.Numeric(string='Credit', digits=(16, Eval('currency_digits', 2)), @@ -174,6 +173,13 @@ class Line(Workflow, ModelSQL, ModelView): #image = fields.Binary... + @classmethod + def __register__(cls, module_name): + super(Line, cls).__register__(module_name) + + table = cls.__table_handler__(module_name) + table.drop_constraint('amount_val') + @classmethod def __setup__(cls): super(Line, cls).__setup__() @@ -184,9 +190,6 @@ class Line(Workflow, ModelSQL, ModelView): ('state_val', Check(t, t.state.in_(['edit', 'check', 'done'])), 'cashbook.msg_line_wrong_state_value'), - ('amount_val', - Check(t, t.amount >= Decimal('0.0')), - 'cashbook.msg_line_must_positive'), ]) cls._transitions |= set(( ('edit', 'check'), @@ -351,11 +354,10 @@ class Line(Workflow, ModelSQL, ModelView): def search_rec_name(cls, name, clause): """ search in description +... """ - l1 = cls.search_payee(name, clause) + [ + return cls.search_payee(name, clause) + [ ('description',) + tuple(clause[1:]), ('category.rec_name',) + tuple(clause[1:]), ] - return l1 def get_rec_name(self, name): """ short + name diff --git a/locale/de.po b/locale/de.po index 020d46f..e169b0f 100644 --- a/locale/de.po +++ b/locale/de.po @@ -150,10 +150,6 @@ msgctxt "model:ir.message,text:msg_line_invalid_category" msgid "The category of the booking line '%(recname)s' does not match the posting type '%(booktype)s'." msgstr "Die Kategorie der Buchungszeile '%(recname)s' paßt nicht zum Buchungstyp '%(booktype)s'." -msgctxt "model:ir.message,text:msg_line_must_positive" -msgid "The amount must be positive." -msgstr "Der Betrag muß positiv sein." - ############# # res.group # diff --git a/locale/en.po b/locale/en.po index 49684f9..2dd8149 100644 --- a/locale/en.po +++ b/locale/en.po @@ -146,10 +146,6 @@ msgctxt "model:ir.message,text:msg_line_invalid_category" msgid "The category of the booking line '%(recname)s' does not match the posting type '%(booktype)s'." msgstr "The category of the booking line '%(recname)s' does not match the posting type '%(booktype)s'." -msgctxt "model:ir.message,text:msg_line_must_positive" -msgid "The amount must be positive." -msgstr "The amount must be positive." - msgctxt "model:res.group,name:group_cashbook" msgid "Cashbook" msgstr "Cashbook" @@ -262,6 +258,10 @@ msgctxt "model:ir.ui.menu,name:act_category_view" msgid "Category" msgstr "Category" +msgctxt "model:ir.ui.menu,name:menu_enter_booking" +msgid "Enter Booking" +msgstr "Enter Booking" + msgctxt "model:ir.action,name:act_book_view" msgid "Cashbook" msgstr "Cashbook" @@ -286,6 +286,10 @@ msgctxt "model:ir.action,name:act_wizard_report" msgid "Cashbook Report" msgstr "Cashbook Report" +msgctxt "model:ir.action,name:act_enterbooking_wiz" +msgid "Enter Booking" +msgstr "Enter Booking" + msgctxt "model:ir.action.act_window.domain,name:act_line_domain_current" msgid "Current Month" msgstr "Current Month" @@ -922,6 +926,10 @@ msgctxt "model:cashbook.configuration,name:" msgid "Configuration" msgstr "Configuration" +msgctxt "view:cashbook.configuration:" +msgid "Enter Booking Wizard" +msgstr "Enter Booking Wizard" + msgctxt "view:cashbook.configuration:" msgid "Open Cashbook Wizard" msgstr "Open Cashbook Wizard" @@ -930,6 +938,14 @@ msgctxt "view:cashbook.configuration:" msgid "Cashbook" msgstr "Cashbook" +msgctxt "field:cashbook.configuration,defbook:" +msgid "Default Cashbook" +msgstr "Default Cashbook" + +msgctxt "help:cashbook.configuration,defbook:" +msgid "The default cashbook is selected when you open the booking wizard." +msgstr "The default cashbook is selected when you open the booking wizard." + msgctxt "field:cashbook.configuration,date_from:" msgid "Start Date" msgstr "Start Date" @@ -998,6 +1014,14 @@ msgctxt "help:cashbook.configuration_user,catnamelong:" msgid "Shows the long name of the category in the Category field of a cash book line." msgstr "Shows the long name of the category in the Category field of a cash book line." +msgctxt "field:cashbook.configuration_user,defbook:" +msgid "Default Cashbook" +msgstr "Default Cashbook" + +msgctxt "help:cashbook.configuration_user,defbook:" +msgid "The default cashbook is selected when you open the booking wizard." +msgstr "The default cashbook is selected when you open the booking wizard." + msgctxt "model:cashbook.recon,name:" msgid "Cashbook Reconciliation" msgstr "Cashbook Reconciliation" @@ -1166,3 +1190,95 @@ msgctxt "report:cashbook.reprecon:" msgid "Total" msgstr "Total" +msgctxt "report:cashbook.reprecon:" +msgid "Payee" +msgstr "Payee" + +msgctxt "model:cashbook.enterbooking.start,name:" +msgid "Enter Booking" +msgstr "Enter Booking" + +msgctxt "view:cashbook.enterbooking.start:" +msgid "Description" +msgstr "Description" + +msgctxt "view:cashbook.enterbooking.start:" +msgid "Booking" +msgstr "Booking" + +msgctxt "field:cashbook.enterbooking.start,cashbook:" +msgid "Cashbook" +msgstr "Cashbook" + +msgctxt "field:cashbook.enterbooking.start,cashbooks:" +msgid "Cashbooks" +msgstr "Cashbooks" + +msgctxt "field:cashbook.enterbooking.start,currency_digits:" +msgid "Currency Digits" +msgstr "Currency Digits" + +msgctxt "field:cashbook.enterbooking.start,currency:" +msgid "Currency" +msgstr "Currency" + +msgctxt "field:cashbook.enterbooking.start,bookingtype:" +msgid "Type" +msgstr "Type" + +msgctxt "selection:cashbook.enterbooking.start,bookingtype:" +msgid "Revenue" +msgstr "Revenue" + +msgctxt "selection:cashbook.enterbooking.start,bookingtype:" +msgid "Revenue Splitbooking" +msgstr "Revenue Splitbooking" + +msgctxt "selection:cashbook.enterbooking.start,bookingtype:" +msgid "Expense" +msgstr "Expense" + +msgctxt "selection:cashbook.enterbooking.start,bookingtype:" +msgid "Expense Splitbooking" +msgstr "Expense Splitbooking" + +msgctxt "selection:cashbook.enterbooking.start,bookingtype:" +msgid "Transfer from" +msgstr "Transfer from" + +msgctxt "selection:cashbook.enterbooking.start,bookingtype:" +msgid "Transfer to" +msgstr "Transfer to" + +msgctxt "field:cashbook.enterbooking.start,amount:" +msgid "Amount" +msgstr "Amount" + +msgctxt "field:cashbook.enterbooking.start,owner_cashbook:" +msgid "Owner" +msgstr "Owner" + +msgctxt "field:cashbook.enterbooking.start,category:" +msgid "Category" +msgstr "Category" + +msgctxt "field:cashbook.enterbooking.start,booktransf:" +msgid "Source/Dest" +msgstr "Source/Dest" + +msgctxt "field:cashbook.enterbooking.start,party:" +msgid "Party" +msgstr "Party" + +msgctxt "model:cashbook.enterbooking,name:" +msgid "Enter Booking" +msgstr "Enter Booking" + +msgctxt "wizard_button:cashbook.enterbooking,start,end:" +msgid "Cancel" +msgstr "Cancel" + +msgctxt "wizard_button:cashbook.enterbooking,start,save_:" +msgid "Save" +msgstr "Save" + diff --git a/message.xml b/message.xml index 18ce400..8fea230 100644 --- a/message.xml +++ b/message.xml @@ -113,9 +113,6 @@ full copyright notices and license terms. --> The category of the booking line '%(recname)s' does not match the posting type '%(booktype)s'. - - The amount must be positive. - diff --git a/tests/test_line.py b/tests/test_line.py index 32e175b..26de7bf 100644 --- a/tests/test_line.py +++ b/tests/test_line.py @@ -870,11 +870,25 @@ class LineTestCase(ModuleTestCase): 'bookingtype': 'mvout', 'amount': Decimal('1.0'), 'booktransf': book2.id, + }, { + 'date': date(2022, 6, 1), # in-category, return + 'description': 'in-return', # amount negative + 'category': category_in.id, + 'bookingtype': 'in', + 'amount': Decimal('-1.0'), + 'booktransf': book2.id, + }, { + 'date': date(2022, 6, 1), # out-category, return + 'description': 'out-return', # amount negative + 'category': category_out.id, + 'bookingtype': 'out', + 'amount': Decimal('-1.0'), + 'booktransf': book2.id, }])], }]) self.assertEqual(book.name, 'Book 1') self.assertEqual(book.state, 'open') - self.assertEqual(len(book.lines), 4) + self.assertEqual(len(book.lines), 6) self.assertEqual(book.lines[0].amount, Decimal('1.0')) self.assertEqual(book.lines[0].bookingtype, 'in') @@ -901,6 +915,16 @@ class LineTestCase(ModuleTestCase): self.assertEqual(book.lines[3].credit, Decimal('0.0')) self.assertEqual(book.lines[3].debit, Decimal('1.0')) + self.assertEqual(book.lines[4].amount, Decimal('-1.0')) + self.assertEqual(book.lines[4].bookingtype, 'in') + self.assertEqual(book.lines[4].credit, Decimal('-1.0')) + self.assertEqual(book.lines[4].debit, Decimal('0.0')) + + self.assertEqual(book.lines[5].amount, Decimal('-1.0')) + self.assertEqual(book.lines[5].bookingtype, 'out') + self.assertEqual(book.lines[5].credit, Decimal('0.0')) + self.assertEqual(book.lines[5].debit, Decimal('-1.0')) + Line.write(*[ [book.lines[0]], {