diff --git a/__init__.py b/__init__.py index 965ecf3..3e86618 100644 --- a/__init__.py +++ b/__init__.py @@ -5,8 +5,8 @@ from trytond.pool import Pool from .ir import Rule -from .planner import ScheduledBooking -from .cashbook import Cashbook +from .planner import ScheduledBooking, ScheduledBookingCashbookRel +from .cashbook import Cashbook, CashbookLine from .cron import Cron from .nextrun import NextRun @@ -17,5 +17,7 @@ def register(): ScheduledBooking, NextRun, Cashbook, + CashbookLine, Cron, + ScheduledBookingCashbookRel, module='cashbook_planner', type_='model') diff --git a/cashbook.py b/cashbook.py index 7c13530..908f12a 100644 --- a/cashbook.py +++ b/cashbook.py @@ -18,3 +18,13 @@ class Cashbook(metaclass=PoolMeta): states={'invisible': ~Bool(Eval('btype'))}) # end Cashbook + + +class CashbookLine(metaclass=PoolMeta): + __name__ = 'cashbook.line' + + planners = fields.Many2Many( + string='Scheduled Bookings', relation_name='cashbook.planner_rel', + origin='line', target='planner') + +# end CashbookLine diff --git a/locale/de.po b/locale/de.po index de3c404..92cfe06 100644 --- a/locale/de.po +++ b/locale/de.po @@ -110,6 +110,10 @@ msgctxt "view:cashbook.planner:" msgid "Available placeholders: ${date} ${month} ${year} ${amount} ${quantity}" msgstr "verfügbare Platzhalter: ${date} ${month} ${year} ${amount} ${quantity}" +msgctxt "view:cashbook.planner:" +msgid "Cashbook lines" +msgstr "Kassenbuchzeilen" + msgctxt "field:cashbook.planner,company:" msgid "Company" msgstr "Unternehmen" @@ -306,6 +310,14 @@ msgctxt "field:cashbook.planner,booking_target:" msgid "Target" msgstr "Ziel" +msgctxt "field:cashbook.planner,cashbook_lines:" +msgid "Cashbook lines" +msgstr "Kassenbuchzeilen" + +msgctxt "help:cashbook.planner,cashbook_lines:" +msgid "This cash book lines was generated by the current scheduled booking." +msgstr "Diese Kassenbuchzeilen wurden durch die aktuelle geplante Buchung generiert." + ############################ # cashbook.planner.nextrun # @@ -323,6 +335,22 @@ msgid "Date" msgstr "Datum" +######################## +# cashbook.planner_rel # +######################## +msgctxt "model:cashbook.planner_rel,name:" +msgid "Scheduled Booking - Cashbook - Relation" +msgstr "geplante Buchung - Kassenbuch - Verknüpfung" + +msgctxt "field:cashbook.planner_rel,planner:" +msgid "Planner" +msgstr "geplante Buchung" + +msgctxt "field:cashbook.planner_rel,line:" +msgid "Cashbook Line" +msgstr "Kassenbuchzeile" + + ################# # cashbook.book # ################# @@ -333,3 +361,15 @@ msgstr "geplante Buchungen" msgctxt "field:cashbook.book,planner:" msgid "Scheduled Bookings" msgstr "geplante Buchungen" + + +################# +# cashbook.line # +################# +msgctxt "view:cashbook.line:" +msgid "Scheduled Bookings" +msgstr "geplante Buchungen" + +msgctxt "field:cashbook.line,planners:" +msgid "Scheduled Bookings" +msgstr "geplante Buchungen" diff --git a/locale/en.po b/locale/en.po index 5210115..a556b20 100644 --- a/locale/en.po +++ b/locale/en.po @@ -86,6 +86,10 @@ msgctxt "view:cashbook.planner:" msgid "Available placeholders: ${date} ${month} ${year} ${amount} ${quantity}" msgstr "Available placeholders: ${date} ${month} ${year} ${amount} ${quantity}" +msgctxt "view:cashbook.planner:" +msgid "Cashbook lines" +msgstr "Cashbook lines" + msgctxt "field:cashbook.planner,company:" msgid "Company" msgstr "Company" @@ -282,6 +286,14 @@ msgctxt "field:cashbook.planner,booking_target:" msgid "Target" msgstr "Target" +msgctxt "field:cashbook.planner,cashbook_lines:" +msgid "Cashbook lines" +msgstr "Cashbook lines" + +msgctxt "help:cashbook.planner,cashbook_lines:" +msgid "This cash book lines was generated by the current scheduled booking." +msgstr "This cash book lines was generated by the current scheduled booking." + msgctxt "model:cashbook.planner.nextrun,name:" msgid "Next Execution Date" msgstr "Next Execution Date" @@ -294,7 +306,27 @@ msgctxt "field:cashbook.planner.nextrun,date:" msgid "Date" msgstr "Date" +msgctxt "model:cashbook.planner_rel,name:" +msgid "Scheduled Booking - Cashbook - Relation" +msgstr "Scheduled Booking - Cashbook - Relation" + +msgctxt "field:cashbook.planner_rel,planner:" +msgid "Planner" +msgstr "Planner" + +msgctxt "field:cashbook.planner_rel,line:" +msgid "Cashbook Line" +msgstr "Cashbook Line" + msgctxt "view:cashbook.book:" msgid "Scheduled Bookings" msgstr "Scheduled Bookings" +msgctxt "field:cashbook.book,planner:" +msgid "Scheduled Bookings" +msgstr "Scheduled Bookings" + +msgctxt "view:cashbook.line:" +msgid "Scheduled Bookings" +msgstr "Scheduled Bookings" + diff --git a/planner.py b/planner.py index 4ef4414..eb07b1e 100644 --- a/planner.py +++ b/planner.py @@ -151,6 +151,10 @@ class ScheduledBooking(DeactivableMixin, ModelSQL, ModelView): booking_target = fields.Function(fields.Reference( string='Target', selection='get_booking_modelnames', readonly=True), 'on_change_with_booking_target') + cashbook_lines = fields.Many2Many( + string='Cashbook lines', relation_name='cashbook.planner_rel', + help='This cash book lines was generated by the current ' + + 'scheduled booking.', origin='planner', target='line') @classmethod def __setup__(cls): @@ -664,6 +668,7 @@ class ScheduledBooking(DeactivableMixin, ModelSQL, ModelView): line.update(add_asset_values( line, record.cashbook, record.booktransf)) line['description'] = cls.fill_placeholder(line) + line['planners'] = [('add', [record.id])] if record.wfcheck: to_create_check.append(line) @@ -694,4 +699,18 @@ class ScheduledBooking(DeactivableMixin, ModelSQL, ModelView): records, query_date=query_date + timedelta(days=1)) -# ens ScheduledBooking +# end ScheduledBooking + + +class ScheduledBookingCashbookRel(ModelSQL): + 'Scheduled Booking - Cashbook Line - Relation' + __name__ = 'cashbook.planner_rel' + + planner = fields.Many2One( + string='Scheduled Booking', required=True, + model_name='cashbook.planner', ondelete='CASCADE') + line = fields.Many2One( + string='Cashbook Line', required=True, + model_name='cashbook.line', ondelete='CASCADE') + +# end ScheduledBookingCashbookRel diff --git a/tests/planner.py b/tests/planner.py index 076e9d4..9eaa7b2 100644 --- a/tests/planner.py +++ b/tests/planner.py @@ -407,12 +407,21 @@ class PlannerTestCase(object): job, = Planner.search([]) self.assertEqual(job.nextrun[0].date, date(2022, 6, 1)) + self.assertEqual(len(job.cashbook_lines), 0) + IrDate.today = MagicMock(return_value=date(2022, 6, 1)) Planner.cronjob() self.assertEqual(job.nextrun[0].date, date(2022, 7, 1)) + self.assertEqual(len(job.cashbook_lines), 1) + self.assertEqual( + job.cashbook_lines[0].rec_name, + '06/01/2022|Exp|-10.00 usd|booking 6/2022, 06/01/2022 [Cat1]') # check cashbook self.assertEqual(len(job.cashbook.lines), 1) + self.assertEqual(len(job.cashbook.lines[0].planners), 1) + self.assertEqual(job.cashbook.lines[0].planners[0].id, job.id) + self.assertEqual( job.cashbook.lines[0].rec_name, "06/01/2022|Exp|-10.00 usd|booking 6/2022, 06/01/2022 [Cat1]") diff --git a/view/planner_form.xml b/view/planner_form.xml index 455520c..95e04e8 100644 --- a/view/planner_form.xml +++ b/view/planner_form.xml @@ -64,6 +64,9 @@ full copyright notices and license terms. --> + + +