$::request->layout->focus() größtenteils durch class="initial_focus" ersetzen
[kivitendo-erp.git] / templates / webpages / custom_variable_config / form.html
1 [%- USE HTML -%][%- USE LxERP -%][%- USE L -%][%- USE T8 -%]<h1>[% HTML.escape(title) %]</h1>
2
3 <form action="controller.pl" method="post">
4  [%- L.hidden_tag("id", SELF.config.id) %]
5
6  <p>
7   <table>
8    <tr>
9     <td align="right">[% 'Module' | $T8 %]</td>
10     <td>[%- L.select_tag('module', SELF.modules, value_key='module', title_key='description', default=SELF.module, onchange="update_ic_rows();") %]</td>
11    </tr>
12
13    <tr>
14     <td align="right">[% 'Variable Name' | $T8 %]<sup><span class="small-text">(1)</span></sup></td>
15     <td>[%- L.input_tag("config.name", SELF.config.name, class='initial_focus') %]</td>
16    </tr>
17
18    <tr>
19     <td align="right">[% 'Variable Description' | $T8 %]<sup><span class="small-text">(2)</span></sup></td>
20     <td>[%- L.input_tag("config.description", SELF.config.description) %]</td>
21    </tr>
22
23    <tr>
24     <td align="right">[% 'Type' | $T8 %]<sup><span class="small-text">(3)</span></sup></td>
25     <td>[% L.select_tag("config.type", SELF.translated_types, value_key='type', title_key='translation', default=SELF.config.type) %]</td>
26    </tr>
27
28    <tr>
29     <td align="right">[% 'Default value' | $T8 %]<sup><span class="small-text">(4)</span></sup></td>
30     <td>[%- L.input_tag("config.default_value", SELF.config.type == 'number' ? LxERP.format_amount(SELF.config.default_value, 2) : SELF.config.default_value) %]</td>
31    </tr>
32
33    <tr>
34     <td align="right">[% 'Options' | $T8 %]<sup><span class="small-text">(5)</span></sup></td>
35     <td>[%- L.input_tag("config.options", SELF.config.options) %]</td>
36    </tr>
37
38    <tr>
39     <td align="right">[% 'Is Searchable' | $T8 %]</td>
40     <td>
41      [% L.radio_button_tag('config.searchable', value='1', id='config_searchable_1', label=LxERP.t8('Yes'), checked=(SELF.config.searchable ?  1 : '')) %]
42      [% L.radio_button_tag('config.searchable', value='0', id='config_searchable_0', label=LxERP.t8('No'),  checked=(SELF.config.searchable ? '' :  1)) %]
43     </td>
44    </tr>
45
46    <tr>
47     <td align="right">[% 'Includeable in reports' | $T8 %]</td>
48     <td>
49      [% L.radio_button_tag('config.includeable', value='1', id='config_includeable_1', label=LxERP.t8('Yes'), checked=(SELF.config.includeable ?  1 : ''), onclick='update_included_by_default()') %]
50      [% L.radio_button_tag('config.includeable', value='0', id='config_includeable_0', label=LxERP.t8('No'),  checked=(SELF.config.includeable ? '' :  1), onclick='update_included_by_default()') %]
51     </td>
52    </tr>
53
54    <tr>
55     <td align="right">[% 'Included in reports by default' | $T8 %]</td>
56     <td>
57      [% SET disabled = SELF.config.includeable ? '' : 'disabled' %]
58      [% L.radio_button_tag('config.included_by_default', value='1', id='config_included_by_default_1', label=LxERP.t8('Yes'), checked=(SELF.config.included_by_default ?  1 : ''), disabled=disabled) %]
59      [% L.radio_button_tag('config.included_by_default', value='0', id='config_included_by_default_0', label=LxERP.t8('No'),  checked=(SELF.config.included_by_default ? '' :  1), disabled=disabled) %]
60     </td>
61    </tr>
62
63    <tr data-show-for="IC"[% UNLESS SELF.module == 'IC' %] style="display: none;"[% END %]>
64     <td align="right">[% 'Editable' | $T8 %]<sup><span class="small-text">(6)</span></sup></td>
65     <td>
66      [% L.radio_button_tag('config.flag_editable', value='1', id='config.flag_editable_1', label=LxERP.t8('Yes'), checked=(SELF.flags.editable ?  1 : '')) %]
67      [% L.radio_button_tag('config.flag_editable', value='0', id='config.flag_editable_0', label=LxERP.t8('No'),  checked=(SELF.flags.editable ? '' :  1)) %]
68     </td>
69    </tr>
70   </table>
71  </p>
72
73  <p>
74   [% L.hidden_tag("action", "CustomVariableConfig/dispatch") %]
75   [% L.submit_tag("action_" _  (SELF.config.id ? "update" : "create"), LxERP.t8('Save'), onclick="return check_prerequisites();") %]
76   [%- IF SELF.config.id %]
77    [% L.submit_tag("action_create", LxERP.t8('Save as new'), onclick="return check_prerequisites();") %]
78    [% L.submit_tag("action_destroy", LxERP.t8('Delete'), confirm=LxERP.t8('Are you sure?')) %]
79   [%- END %]
80   <a href="[% SELF.url_for(action='list', module=SELF.module) %]">[%- LxERP.t8("Cancel") %]</a>
81  </p>
82
83  <hr>
84
85  <h3>[% 'Annotations' | $T8 %]</h3>
86
87  <p>
88   (1) [% 'The variable name must only consist of letters, numbers and underscores. It must begin with a letter. Example: send_christmas_present' | $T8 %]
89  </p>
90
91  <p>
92   (2) [% 'The description is shown on the form. Chose something short and descriptive.' | $T8 %]
93  </p>
94  <p>
95   (3) [% 'For type "customer" the perl module JSON is required. Please check this on system level: $ ./scripts/installation_check.pl' | $T8 %]
96  </p>
97
98  <p>
99   (4) [% 'The default value depends on the variable type:' | $T8 %]
100   <br>
101   <ul>
102    <li>[%- 'Text, text field and number variables: The default value will be used as-is.' | $T8 %]</li>
103    <li>[%- 'Boolean variables: If the default value is non-empty then the checkbox will be checked by default and unchecked otherwise.' | $T8 %]</li>
104    <li>[%- 'Date and timestamp variables: If the default value equals \'NOW\' then the current date/current timestamp will be used. Otherwise the default value is copied as-is.' | $T8 %]</li>
105   </ul>
106  </p>
107
108  <p>
109   (5) [% 'The available options depend on the varibale type:' | $T8 %]
110   <br>
111   <ul>
112    <li>[%- 'Text variables: \'MAXLENGTH=n\' sets the maximum entry length to \'n\'.' | $T8 %]</li>
113    <li>[%- 'Text field variables: \'WIDTH=w HEIGHT=h\' sets the width and height of the text field. They default to 30 and 5 respectively.' | $T8 %]</li>
114    <li>[%- 'Number variables: \'PRECISION=n\' forces numbers to be shown with exactly n decimal places.' | $T8 %]</li>
115    <li>[%- 'Selection fields: The option field must contain the available options for the selection. Options are separated by \'##\', for example \'Early##Normal##Late\'.' | $T8 %]</li>
116   </ul>
117   <br>
118   [% 'Other values are ignored.' | $T8 %]
119  </p>
120
121  <p data-show-for="IC"[% UNLESS SELF.module == 'IC' %] style="display: none;"[% END %]>
122   (6)
123
124   [%- 'A variable marked as \'editable\' can be changed in each quotation, order, invoice etc.' | $T8 %]
125
126   [% 'Otherwise the variable is only available for printing.' | $T8 %]
127  </p>
128
129 </form>
130
131 <script type="text/javascript">
132 <!--
133 function update_included_by_default() {
134   $('INPUT[name="config.included_by_default"]').prop('disabled', !$('#config_includeable_1').prop('checked'));
135 }
136
137 function update_ic_rows() {
138   $('[data-show-for="IC"]').toggle($('#module').val() === "IC");
139 }
140
141 function check_prerequisites() {
142   if (($('#config_type').val() === "select") && ($('#config_options').val() === "")) {
143     alert(kivi.t8('The option field is empty.'));
144     return false;
145   }
146
147   if ($('#config_name').val() === "") {
148     alert(kivi.t8('The name is missing.'));
149     return false;
150   }
151
152   if (!$('#config_name').val().match(/^[a-z][a-z0-9_]*$/i)) {
153     alert(kivi.t8('The name must only consist of letters, numbers and underscores and start with a letter.'));
154     return false;
155   }
156
157   if ($('#config_description').val() === "") {
158     alert(kivi.t8('The description is missing.'));
159     return false;
160   }
161
162   return true;
163 }
164 -->
165 </script>