From be92110ae19663af60d173e54fa1158dd3b34e87 Mon Sep 17 00:00:00 2001 From: Frederik Jaeckel Date: Sat, 9 Mar 2024 20:44:33 +0100 Subject: [PATCH] add field 'target' for category/cashbook in list view --- locale/de.po | 4 ++++ locale/en.po | 4 ++++ planner.py | 35 +++++++++++++++++++++++++++++++++++ tests/planner.py | 2 ++ view/planner_list.xml | 21 ++++++++++++++------- 5 files changed, 59 insertions(+), 7 deletions(-) diff --git a/locale/de.po b/locale/de.po index 711e118..de3c404 100644 --- a/locale/de.po +++ b/locale/de.po @@ -302,6 +302,10 @@ msgctxt "help:cashbook.planner,wfcheck:" msgid "Switches the booking to the 'Verified' state." msgstr "Schaltet die Buchung in den Zustand 'Geprüft'" +msgctxt "field:cashbook.planner,booking_target:" +msgid "Target" +msgstr "Ziel" + ############################ # cashbook.planner.nextrun # diff --git a/locale/en.po b/locale/en.po index 3bb5c0a..5210115 100644 --- a/locale/en.po +++ b/locale/en.po @@ -278,6 +278,10 @@ msgctxt "help:cashbook.planner,wfcheck:" msgid "Switches the booking to the 'Verified' state." msgstr "Switches the booking to the 'Verified' state." +msgctxt "field:cashbook.planner,booking_target:" +msgid "Target" +msgstr "Target" + msgctxt "model:cashbook.planner.nextrun,name:" msgid "Next Execution Date" msgstr "Next Execution Date" diff --git a/planner.py b/planner.py index 441b93d..4ef4414 100644 --- a/planner.py +++ b/planner.py @@ -148,6 +148,9 @@ class ScheduledBooking(DeactivableMixin, ModelSQL, ModelView): wfcheck = fields.Boolean( string="Set to 'Checked'", help="Switches the booking to the 'Verified' state.") + booking_target = fields.Function(fields.Reference( + string='Target', selection='get_booking_modelnames', readonly=True), + 'on_change_with_booking_target') @classmethod def __setup__(cls): @@ -249,6 +252,38 @@ class ScheduledBooking(DeactivableMixin, ModelSQL, ModelView): break return result + @classmethod + def get_booking_modelnames(cls): + """ get list of model for field 'booking_target + + Returns: + list: list of tuple: (model_name, Description) + """ + Model = Pool().get('ir.model') + return [ + (x.model, x.name) + for x in Model.search([ + ('model', 'in', ['cashbook.book', 'cashbook.category'])])] + + @fields.depends('bookingtype', 'category', 'booktransf') + def on_change_with_booking_target(self, name=None): + """ get category of target-cashbook + + Args: + name (str, optional): name of field. Defaults to None. + + Returns: + tuple: tuple with model-name and id of booking-target + """ + if self.bookingtype in ['in', 'out']: + if self.category: + return '%s,%d' % ( + self.category.__name__, self.category.id) + elif self.bookingtype in ['mvin', 'mvout']: + if self.booktransf: + return '%s,%d' % ( + self.booktransf.__name__, self.booktransf.id) + @fields.depends('cashbook', '_parent_cashbook.currency') def on_change_with_currency_cashbook(self, name=None): """ get currency of selected cashbook diff --git a/tests/planner.py b/tests/planner.py index d507fdb..076e9d4 100644 --- a/tests/planner.py +++ b/tests/planner.py @@ -137,6 +137,7 @@ class PlannerTestCase(object): Planner.write, *[[job], {'end_date': date(2022, 5, 1)}]) + self.assertEqual(job.booking_target.name, 'Cat1') Planner.write(*[[job], { 'end_date': date(2022, 9, 15), 'monthday': 3}]) self.assertEqual( @@ -466,6 +467,7 @@ class PlannerTestCase(object): self.assertEqual(job.cashbook.rec_name, 'Book 1 | 0.00 usd | Open') self.assertEqual(job.booktransf.rec_name, 'Book 2 | 0.00 usd | Open') self.assertEqual(len(job.cashbook.lines), 0) + self.assertEqual(job.booking_target.name, 'Book 2') job, = Planner.search([]) self.assertEqual(job.nextrun[0].date, date(2022, 6, 1)) diff --git a/view/planner_list.xml b/view/planner_list.xml index e351a37..247110f 100644 --- a/view/planner_list.xml +++ b/view/planner_list.xml @@ -5,11 +5,18 @@ full copyright notices and license terms. --> - - - - - - - + + + + + + + + + + + + + +