From e22e390040f4a7db7d122998fa1f6b782947c8e1 Mon Sep 17 00:00:00 2001
From: mpeltriaux <Michel.Peltriaux@sgdnord.rlp.de>
Date: Wed, 20 Oct 2021 13:41:32 +0200
Subject: [PATCH] #26 Annual conservation reports

* enhances TimespanReportForm control rendering
* adds/updates translations
---
 analysis/forms.py                            |   2 +
 konova/forms.py                              |   3 +
 locale/de/LC_MESSAGES/django.mo              | Bin 26670 -> 26698 bytes
 locale/de/LC_MESSAGES/django.po              |  77 +++++++++----------
 templates/form/table/generic_table_form.html |   4 +-
 templates/modal/modal_form.html              |   2 +-
 6 files changed, 47 insertions(+), 41 deletions(-)

diff --git a/analysis/forms.py b/analysis/forms.py
index 4aafdcbb..11d2f98b 100644
--- a/analysis/forms.py
+++ b/analysis/forms.py
@@ -65,6 +65,8 @@ class TimespanReportForm(BaseForm):
         self.form_title = _("Generate report")
         self.form_caption = _("Select a timespan and the desired conservation office")
         self.action_url = reverse("analysis:reports")
+        self.show_cancel_btn = False
+        self.action_btn_label = _("Continue")
 
     def save(self) -> str:
         """ Generates a redirect url for the detail report
diff --git a/konova/forms.py b/konova/forms.py
index 26914d27..74e53896 100644
--- a/konova/forms.py
+++ b/konova/forms.py
@@ -37,12 +37,14 @@ class BaseForm(forms.Form):
     """
     template = None
     action_url = None
+    action_btn_label = _("Save")
     form_title = None
     cancel_redirect = None
     form_caption = None
     instance = None  # The data holding model object
     form_attrs = {}  # Holds additional attributes, that can be used in the template
     has_required_fields = False  # Automatically set. Triggers hint rendering in templates
+    show_cancel_btn = True
 
     def __init__(self, *args, **kwargs):
         self.instance = kwargs.pop("instance", None)
@@ -189,6 +191,7 @@ class BaseModalForm(BaseForm, BSModalForm):
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
+        self.action_btn_label = _("Continue")
 
     def process_request(self, request: HttpRequest, msg_success: str = _("Object removed"), msg_error: str = FORM_INVALID, redirect_url: str = None):
         """ Generic processing of request
diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo
index ef92aa2c6906e36bc682fee868c04730bd59e29d..baf99f19c210ba8ab7f63c1ae584e0b6c60c5519 100644
GIT binary patch
delta 7936
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
Ql2PMJ9@#UyXnW{?0oRFF#sB~S

delta 7909
zcmZA633yId9>?($iA2akLL!pL)+B<2*q7Kf)&#Y-6+~!ND<yWy6;&xliI=eywYQd{
zRci;MrlpipZHKne&e*DI=_oZt&G(mk`aGVwkAFVroO|zC{^#B|Zyv`^d2K!A<(v=k
zS!6h7co`Fg83D%lmocV)Rka#3E!LP|&K07EdU2dFGchsVm_E1#^U*uOm~1S-8F&bz
zG4lyyLU4$6Jo-|fjTMY>Ofdz<G%GL&H(B?(7nq|+U*=2Oeh({C_e(UUB1T~)Ottk^
z7)-r8hT<U9^<z-|&q9s2q_plBv)-Qg00TL37@3(ljhcB0CgCkCi{VtfF&ed!IMhHj
zP#tHW`ssvW*cbgVA2rbl=!>(lJmZ^U3L0oRs)KFTzo9SnPcaowA=x&6pjH@{OcpR5
z`DdE)BLZ_#3z&?WSdsNj^rOBFHQsJ?l#*i<H1Ii8sxG5$ypP($;2LgwDryC7u?qG=
zt#CMM#f9jH^HBXRMs3jsRDZj%8Xm_Oyj+9*XAI+;;trIC>Yyu@!(O(YgX&-?Y625c
znVDnHFTnEDm!S`?N3C!ZYGV6Q6FQEX&^PFh*HXy82D(FoI{X8>VA+~<jy+JRE<p`^
z9n0e*REOnjxhsl5O}qiBpA1`Xhw8tJwHGRLIjH+bI}|jN>8Kn3f*Qz!8hAZcz@4Zq
zI)qx$NmS~;v+cK0udk`?ZdEjDpn9nLI${Ovjmmf~Dx=OU3j8xGY{N0^M*Tc0m1#VA
zT0wnO>M~Fh%(4zdrFs<Vx*4d2%*A%N5Ow`o)Z6ouJ%0<i-Z8&Xh~$Jxa|et<brgqs
z&1#}LOta@3qGsL<mAP!x_5CmabFKNP3{J*yoP)Y<EvmmQ=)?GCM`^*BJ=lX2`>_EA
z*Kzl{JvO4=4Xfi!jK%e+x8oDk3NNB2a2GY8cU^ZYB2imW7qw-X7>GF-qWAwr3VL{^
zqEbH7ItSJ9eAG(Upl;lP%FI67egL%vM{WDJs1<&XTJdGn#BQRt-~sCXGU?=B7x+@p
z1cH%mH{r;xnD(d(3s4=7LrriBYRjgh-shF5>-M51xF6NuaSX;YsJG?<R>T{q2|Y?D
z|5{l<J@-Tys-BD*C>@o`MyQUnQK{^2&ljKu7?0|(2sOY$)RwJBUH={G{{Nsp;7on@
z8LCpB{0C7_p+Pflf|al}Y9dde_N+gK;%L-IY!T`g<Z9IUeW;0^#)fzmQ!s`HNdtF6
zO|&nn{dv@Q#SR7S$x>9uZ`l)jQ8yk!rTTN!`+W`7Q8`A@)>TEl*Kw#VN=0R&0qXuX
zw%*O2?~l4Z4|TuuvTc}vx^V_p#$r?^HlQZ92Sf1-jKRy8jK1V~C8nV!a00ajU!o>(
z3HfX?w^8@UG<FwI-_<egC}<0Mq6Qp{n#dSbhlQwAy^c!xeAECNQ4iHVR7O6w?O&n#
zxr~W;4@0ne6L(9~Q4ec#ET{Ls6$L$P9Z>^jp=R34It*E?c?Ffa_fZ`mz%aas;dmdb
zVrWzP#M-FOhnKJg&PGl2D0aZJSdQ^cY%}*6NI|Wr4r<2DunK0O2FgQCU=pgMnW%~X
z6}93wQG5C>Y72Lvw&1w+94fO{Q2qRhjxI3G-4j8mdL$}EDOmbYp|+p_K8qR1FF>;d
zr{G~s!ZsPM!!VZmJnMGU^`}w&K0r;Bw7BoTKl#yH5Q=>FG!eEQg}NagHGw45iqow1
zQ5`iwO}q^%gWXUWdIoj<a8!m~MqOWsx_)*G@~@7U(4c`<q2Bv-$OCJ(VkBO|X!L67
z8iTxvrUhzc1y~zbptkOqwZwW0^-Ov5U}z%YsOwT33ObQt?QTyDL9JlCwFvdpFGjsB
z@1Q!^jmp?DR0dC=9>O!I1^tX#;4NFfXMKQr797*sy)Y2fQ6+0-R4T(U0pqa_W}-4O
z4)qW%KwY;ImC}va){BW@3H9IG81pusZEMVjIIW%gcS1&c9#D-xheBUYw0)9a9JmbQ
zuwN!$sc{l2WouD;w-Ytc0n}UZnLU32m61F4e7O$pgu}2J?U|@8%td9$DQ$PydwanS
zd*USO!YinWl<nxg-^r)}TVVwDLA{<MQCm0@_1Y~%eI9JXT6hHY5Z<=lLv7VV3}<}f
z-O1hSNYozJLJgFGN^MWn00U5aT43wrP!pMr{<zM%)w&0@RUcszo=5dtwzHebD0C8O
zNTi?{cR@WAc^HKwQK_Db{`e+pg6mORvI}+nQ7n&Np;q<-YGRjB8PZp3-4}-HHyO1h
z?Ypr5dYT8)pbqj;6Pai&Mh&zPQ}9Eqj+am?^6BdCWi9lh-X49iD+XXs)I<iM2AqV-
z;36!COS_VP71q$8nQum==skPEQB((~QLp1Q)K=WL=YzA{`>SFv+T(Bujzjemob5i8
zNmzk;Q&c9NL`|rVLqQW5Wu1gd^{dvowtX=wGpkT3-DA(6L}l(QYAY{bSzbT?Zf*vG
zySo#PLS?cp>i)K<`<#9hG}AoPN++QPT4*oWf|}57)D|2<b#x8W@geH9tJ8yTHP{x_
z@g@w!ov63sFlwB$s0`jj-ZIB{Kjo$-4s~NHHpM0wf(57vyk?z;+UupLm8?c>-EP!?
z`%xcc$5GdvMD6+4*ciXTAPniL46*-l6e`k?hC0y-LogdPKrU(m<53+Jq6VCWdavgp
z|I9*u@LZZ7QP(x#f#5^WWMD0HFc~-7`WXz;`~Qf7o`Im=?nJ_|GW8m$PpTHE)b&A4
zWCVudc+}HA2Q`re*2Spnm!lT4!}<y8`g5rJe?Uij{VN5fD4>r!k&38{M4(n$(^?mG
zT_e=f+|0ITVomB@F%8F~wqOHlz>TO0ZbvO>C+dUgWFPH6g`a3p>TjS{{t)%Lh4gjX
z<FOL;bksA_4z<_W_I!U^e-SmYiKvJ9HPk}hLT$x%<mE88Q5m??m;CDj|9)=Ds$oa!
z>8R9Avd%^QPFRJS=mFFOPoVa?1hqAnP!qU`Nq8SqF#c&?J?x69I0ftAW`{yLg>Nwv
z1E1k<cI<_kSP^O>ORzO=Mh)~c>Y2HV)$kE&BGsOCGZ>HI)ElEdF}tBMn2(zHG}M+j
z^C@VL7NJtQ9IN0a)WCm7t>_G@gYRwq7gQ!5S_AsKe-}ieR^A+I<6u-j^X&OGs1K@-
z@Pyv~A1P=hyK>w;IcPnDt!Tf3VVFF?9k3;8B3agfs0oj<^&(UzmZJJyjj_1No<ELS
zPzieL{l7|~Dh=0B9r+G)_b3YWFm^_*U?A$LE<g=17PS>qP#G*j-Tww^OV(j)Jc!Dy
z8RTXr2z6aUtmIJWLP2|-gL+EyQ7e8A^=uqP?b+|x63geh9d<&kurCJSAk=*$usY7b
z1YC>i{|IV9XHoZEM@K8WOF<p@4|d<nFw_j|*?LFR`5~wdMxnM~CMuOnP!n8-W$*)3
zhIU&I;sokPupYL~bAL;Y&LjUdXb2eMe%EV=vD61(Ep$*T*o<ZHbJY9)1uFF=s0my_
zZ@g{We?wjGHPl_H59)j%YGRd8_eBgP|5{0+ZD@><)Z3x<bRcTw&!Gk$jY{QIR7dkr
z11(0SbQw0owbt_(O+Df{cVUfD3+{)_vCyHAL}5Sr;6>|I>kaE|)C%s|`UBK}UeCJ|
zDUZI?Ls0!hSgT`M>Ita(Q_v4nZQW@|K`U#D+S~T_#M9_UJqOj{P}@EnHBi2-kG1C~
z+WJ&fYNul&zJdCr`v7C`BI<L)XISZV@g|gl8e-534-<=t2Sfl3QJ%u8ky+QM4WQN-
z#}exDDe4~Vr`zn&pYrRJXA;wh(bT`fd&D0^FQS#_YSkF$A*CVq&c4=;v?Wm1>$;yf
zLyWiQ(kKT}-ikWd05g_)Hqp>tbG`Hoe{b4)U8|bAQ+^5c0@U;3!H>2ltD#=&D?}7g
zKwTf*`YS4)$R#=u%I4!o2^Bs&OOH?adCQj1V{@*rMdVPvWZO648^m<ls~C@OwIC;t
z;$4~=5z7f3KC}%c@+glYdJ^9d(L`tB-$XL!M-VSijzxXr>`Gjvo`m%YKK0B$i4Tb^
zLPwlS>2JE~%0aGe_}=<Bzf;k>rK2Mqeu-o7Gn|CCu`_lfiYd<`bj+as`0*;0p|p)6
zo+XA;f18N&@^dfy(GwBbJoU6&Dg8N_pGS#6F4s$;j|3fKTzKpXBg3PAr8bv%lB;xN
z;ZC<`%6oQ3CODmF;dw7T@+rShsW&l@@(A2c%puMZKNDvOU(Pipwor~BUZ$)!SN{p8
zqc%Q)<7_>`nqt+jG95j<cux~)?Cr^k3Xgt)Qhk~eh#1Oz-!M;OIpRA{aa4zhFiK5m
z)lq}kL6o7bhUb^4(5z5O|9|{IgWmNb;w8>U5*ftT)LY_w>_O}!^!wpIgpU7udPIji
z?YLqPwV`Ty?5Ih5CE^vrAu1Amh(C`|3KNOvXlsE_;3I6073_5%Q{O=77)IM747cYB
zD0gEEuSCZwzop;LR$)zIB%#mmX`Z<1ktvP1<6UZLsAuJQ{2UJvbtq3HS`dDoq1BU}
z3$(sMOrS-_R2+iul-Bqzh|kz_-%|FX{36jnL4B~j?uNB0?ac^>dTZ3Nj<`cirrv~D
zL-{0;t;=pwxJdLP3W>Tz4j27~ucD5T*o)XkIf+QO?QJlY`ag&x#Gl7c6n?RlAWSCq
z5^IS<?g_E?uQZ<7F(F>3JS$?7y)Jt`j!6j2<WysO`d^+qF)^u?ZH;?PPs*vdi|9hR
zq8jb708>3}Vk6V1aK@YXf|e>c1v}WQ4q6A%u45tLzhiFfzDhf~*2_-ZvAXZZivI)u
C15;`M

diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po
index 2c6664ec..764b7349 100644
--- a/locale/de/LC_MESSAGES/django.po
+++ b/locale/de/LC_MESSAGES/django.po
@@ -11,15 +11,15 @@
 #: intervention/forms/forms.py:53 intervention/forms/forms.py:155
 #: intervention/forms/forms.py:167 intervention/forms/modalForms.py:107
 #: intervention/forms/modalForms.py:120 intervention/forms/modalForms.py:133
-#: konova/forms.py:140 konova/forms.py:244 konova/forms.py:310
-#: konova/forms.py:337 konova/forms.py:347 konova/forms.py:360
-#: konova/forms.py:372 konova/forms.py:393 user/forms.py:38
+#: konova/forms.py:142 konova/forms.py:246 konova/forms.py:312
+#: konova/forms.py:339 konova/forms.py:349 konova/forms.py:362
+#: konova/forms.py:374 konova/forms.py:395 user/forms.py:38
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-10-20 13:19+0200\n"
+"POT-Creation-Date: 2021-10-20 13:37+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -29,15 +29,15 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: analysis/forms.py:26 analysis/templates/analysis/reports/detail.html:8
+#: analysis/forms.py:24 analysis/templates/analysis/reports/detail.html:8
 msgid "From"
 msgstr "Vom"
 
-#: analysis/forms.py:38
+#: analysis/forms.py:36
 msgid "To"
 msgstr "Bis"
 
-#: analysis/forms.py:49 compensation/forms/forms.py:93
+#: analysis/forms.py:47 compensation/forms/forms.py:93
 #: compensation/templates/compensation/detail/eco_account/view.html:58
 #: compensation/templates/compensation/report/eco_account/report.html:16
 #: ema/templates/ema/detail/view.html:42
@@ -47,22 +47,22 @@ msgstr "Bis"
 msgid "Conservation office"
 msgstr "Eintragungsstelle"
 
-#: analysis/forms.py:51 compensation/forms/forms.py:95
+#: analysis/forms.py:49 compensation/forms/forms.py:95
 msgid "Select the responsible office"
 msgstr "Verantwortliche Stelle"
 
-#: analysis/forms.py:60 compensation/forms/forms.py:67
+#: analysis/forms.py:58 compensation/forms/forms.py:67
 #: compensation/forms/forms.py:104 compensation/forms/forms.py:155
 #: intervention/forms/forms.py:63 intervention/forms/forms.py:80
 #: intervention/forms/forms.py:96 intervention/forms/forms.py:112
 msgid "Click for selection"
 msgstr "Auswählen..."
 
-#: analysis/forms.py:67
+#: analysis/forms.py:65
 msgid "Generate report"
 msgstr "Bericht generieren"
 
-#: analysis/forms.py:68
+#: analysis/forms.py:66
 msgid "Select a timespan and the desired conservation office"
 msgstr "Wählen Sie die Zeitspanne und die gewünschte Eintragungsstelle"
 
@@ -300,7 +300,7 @@ msgstr "Automatisch generiert"
 #: intervention/templates/intervention/detail/includes/documents.html:28
 #: intervention/templates/intervention/detail/view.html:31
 #: intervention/templates/intervention/report/report.html:12
-#: konova/forms.py:336
+#: konova/forms.py:338
 msgid "Title"
 msgstr "Bezeichnung"
 
@@ -335,7 +335,7 @@ msgstr "Wählen Sie ggf. Fördermittelprojekte"
 #: intervention/templates/intervention/detail/includes/documents.html:31
 #: intervention/templates/intervention/detail/includes/payments.html:34
 #: intervention/templates/intervention/detail/includes/revocation.html:38
-#: konova/forms.py:371 konova/templates/konova/comment_card.html:16
+#: konova/forms.py:373 konova/templates/konova/comment_card.html:16
 msgid "Comment"
 msgstr "Kommentar"
 
@@ -422,7 +422,7 @@ msgstr "Zahlung wird an diesem Datum erwartet"
 
 #: compensation/forms/modalForms.py:63 compensation/forms/modalForms.py:274
 #: compensation/forms/modalForms.py:369 intervention/forms/modalForms.py:134
-#: konova/forms.py:373
+#: konova/forms.py:375
 msgid "Additional comment, maximum {} letters"
 msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
 
@@ -462,7 +462,7 @@ msgstr "Geben Sie die Daten des neuen Zustandes ein"
 msgid "Added state"
 msgstr "Zustand hinzugefügt"
 
-#: compensation/forms/modalForms.py:190 konova/forms.py:193
+#: compensation/forms/modalForms.py:190 konova/forms.py:195
 msgid "Object removed"
 msgstr "Objekt entfernt"
 
@@ -768,7 +768,7 @@ msgstr "Dokumente"
 #: compensation/templates/compensation/detail/eco_account/includes/documents.html:14
 #: ema/templates/ema/detail/includes/documents.html:14
 #: intervention/templates/intervention/detail/includes/documents.html:14
-#: konova/forms.py:392
+#: konova/forms.py:394
 msgid "Add new document"
 msgstr "Neues Dokument hinzufügen"
 
@@ -1220,7 +1220,7 @@ msgstr "Datum des Widerspruchs"
 msgid "Document"
 msgstr "Dokument"
 
-#: intervention/forms/modalForms.py:122 konova/forms.py:361
+#: intervention/forms/modalForms.py:122 konova/forms.py:363
 msgid "Must be smaller than 15 Mb"
 msgstr "Muss kleiner als 15 Mb sein"
 
@@ -1242,7 +1242,7 @@ msgstr "Kompensationen und Zahlungen geprüft"
 msgid "Run check"
 msgstr "Prüfung vornehmen"
 
-#: intervention/forms/modalForms.py:201 konova/forms.py:446
+#: intervention/forms/modalForms.py:201 konova/forms.py:448
 msgid ""
 "I, {} {}, confirm that all necessary control steps have been performed by "
 "myself."
@@ -1466,64 +1466,68 @@ msgstr ""
 "somit nichts eingeben, bearbeiten oder sonstige Aktionen ausführen. "
 "Kontaktieren Sie bitte einen Administrator. +++"
 
-#: konova/forms.py:69
+#: konova/forms.py:40 templates/form/collapsable/form.html:62
+msgid "Save"
+msgstr "Speichern"
+
+#: konova/forms.py:71
 msgid "Not editable"
 msgstr "Nicht editierbar"
 
-#: konova/forms.py:139 konova/forms.py:309
+#: konova/forms.py:141 konova/forms.py:311
 msgid "Confirm"
 msgstr "Bestätige"
 
-#: konova/forms.py:151 konova/forms.py:318
+#: konova/forms.py:153 konova/forms.py:320
 msgid "Remove"
 msgstr "Löschen"
 
-#: konova/forms.py:153
+#: konova/forms.py:155
 msgid "You are about to remove {} {}"
 msgstr "Sie sind dabei {} {} zu löschen"
 
-#: konova/forms.py:243 templates/form/collapsable/form.html:45
+#: konova/forms.py:245 templates/form/collapsable/form.html:45
 msgid "Geometry"
 msgstr "Geometrie"
 
-#: konova/forms.py:319
+#: konova/forms.py:321
 msgid "Are you sure?"
 msgstr "Sind Sie sicher?"
 
-#: konova/forms.py:346
+#: konova/forms.py:348
 msgid "Created on"
 msgstr "Erstellt"
 
-#: konova/forms.py:348
+#: konova/forms.py:350
 msgid "When has this file been created? Important for photos."
 msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
 
-#: konova/forms.py:359
+#: konova/forms.py:361
 #: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231
 msgid "File"
 msgstr "Datei"
 
-#: konova/forms.py:423
+#: konova/forms.py:425
 msgid "Added document"
 msgstr "Dokument hinzugefügt"
 
-#: konova/forms.py:437
+#: konova/forms.py:439
 msgid "Confirm record"
 msgstr "Verzeichnen bestätigen"
 
-#: konova/forms.py:445
+#: konova/forms.py:447
 msgid "Record data"
 msgstr "Daten verzeichnen"
 
-#: konova/forms.py:452
+#: konova/forms.py:454
 msgid "Confirm unrecord"
 msgstr "Entzeichnen bestätigen"
 
-#: konova/forms.py:453
+#: konova/forms.py:455
 msgid "Unrecord data"
 msgstr "Daten entzeichnen"
 
-#: konova/forms.py:454
+#: konova/forms.py:456
 msgid "I, {} {}, confirm that this data must be unrecorded."
 msgstr ""
 "Ich, {} {}, bestätige, dass diese Daten wieder entzeichnet werden müssen."
@@ -1721,15 +1725,10 @@ msgid "General data"
 msgstr "Allgemeine Daten"
 
 #: templates/form/collapsable/form.html:58
-#: templates/form/table/generic_table_form.html:23
+#: templates/form/table/generic_table_form.html:24
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: templates/form/collapsable/form.html:62
-#: templates/form/table/generic_table_form.html:27
-msgid "Save"
-msgstr "Speichern"
-
 #: templates/form/table/generic_table_form_body.html:24
 msgid "Fields with * are required."
 msgstr "* sind Pflichtfelder."
diff --git a/templates/form/table/generic_table_form.html b/templates/form/table/generic_table_form.html
index 7d321436..a89ee4bf 100644
--- a/templates/form/table/generic_table_form.html
+++ b/templates/form/table/generic_table_form.html
@@ -19,12 +19,14 @@
         {% include 'form/table/generic_table_form_body.html' %}
         <div class="row">
             <div class="col-6">
+                {% if form.show_cancel_btn %}
                 <a href="{{ form.cancel_redirect }}">
                     <button class="btn btn-default" type="button" title="{% trans 'Cancel' %}">{% trans 'Cancel' %}</button>
                 </a>
+                {% endif %}
             </div>
             <div class="col-6 d-flex justify-content-end">
-                <button class="btn btn-default" type="submit" title="{% trans 'Save' %}">{% trans 'Save' %}</button>
+                <button class="btn btn-default" type="submit" title="{{form.action_btn_label}}">{{form.action_btn_label}}</button>
             </div>
         </div>
     </form>
diff --git a/templates/modal/modal_form.html b/templates/modal/modal_form.html
index eda17303..6f47b127 100644
--- a/templates/modal/modal_form.html
+++ b/templates/modal/modal_form.html
@@ -22,7 +22,7 @@
     </div>
     {% if form.render_submit %}
     <div class="modal-footer">
-        <button type="submit" class="btn btn-default">{% trans 'Continue' %}</button>
+        <button type="submit" class="btn btn-default" title="{{form.action_btn_label}}">{{form.action_btn_label}}</button>
     </div>
     {% endif %}
 </form>
\ No newline at end of file