e835ed505971b8d540a968743b25175a40b20372
[kivitendo-erp.git] / templates / webpages / csv_import / form.html
1 [% USE HTML %][% USE LxERP %][% USE L %]
2 <body>
3
4  <div class="listtop">[% FORM.title %]</div>
5
6  [%- INCLUDE 'common/flash.html' %]
7
8  <form method="post" action="controller.pl" enctype="multipart/form-data">
9   [% L.hidden_tag('action', 'CsvImport/dispatch') %]
10   [% L.hidden_tag('profile.type', SELF.profile.type) %]
11
12   <h2>[%- LxERP.t8('Import profiles') %]</h2>
13
14   <table>
15    [%- IF SELF.profile.id %]
16     <tr>
17      <th align="right">[%- LxERP.t8('Current profile') %]:</th>
18      <td>[%- HTML.escape(SELF.profile.name) %]</td>
19     </tr>
20    [%- END %]
21
22    [%- IF SELF.all_profiles.size %]
23     <tr>
24      <th align="right">[%- LxERP.t8('Existing profiles') %]:</th>
25      <td>
26       [% L.select_tag('profile.id', L.options_for_select(SELF.all_profiles, title => 'name', default => SELF.profile.id), style => 'width: 300px') %]
27      </td>
28      <td>
29       [% L.submit_tag('action_new', LxERP.t8('Load profile')) %]
30       [% L.submit_tag('action_destroy', LxERP.t8('Delete profile'), confirm => LxERP.t8('Do you really want to delete this object?')) %]
31      </td>
32     </tr>
33    [%- END %]
34
35    <tr>
36     <th align="right" valign="top">[%- LxERP.t8('Save settings as') %]:</th>
37     <td valign="top">
38      [% L.input_tag('profile.name', '', style => 'width: 300px') %]
39      <br>
40      [% L.checkbox_tag('profile.is_default', label => LxERP.t8('Make default profile')) %]
41     </td>
42     <td valign="top">[% L.submit_tag('action_save', LxERP.t8('Save profile')) %]</td>
43    </tr>
44   </table>
45
46   <hr>
47
48   <h2>[%- LxERP.t8('Help on column names') %]</h2>
49
50   <div class="help_toggle">
51    <a href="#" onClick="javascript:$('.help_toggle').toggle()">[% LxERP.t8("Show help text") %]</a>
52   </div>
53
54   <div class="help_toggle" style="display:none">
55    <p><a href="#" onClick="javascript:$('.help_toggle').toggle()">[% LxERP.t8("Hide help text") %]</a></p>
56
57    <table>
58     <tr class="listheading">
59      <th>[%- LxERP.t8('Column name') %]</th>
60      <th>[%- LxERP.t8('Meaning') %]</th>
61     </tr>
62
63     [%- FOREACH row = SELF.displayable_columns %]
64      <tr class="listrow[% loop.count % 2 %]">
65       <td>[%- HTML.escape(row.name) %]</td>
66       <td>[%- HTML.escape(row.description) %]</td>
67      </tr>
68     [%- END %]
69    </table>
70
71 [%- IF SELF.type == 'contacts' %]
72    <p>
73     [%- LxERP.t8('At least one of the columns #1, customer, customernumber, vendor, vendornumber (depending on the target table) is required for matching the entry to an existing customer or vendor.', 'cp_cv_id') %]
74    </p>
75
76 [%- ELSIF SELF.type == 'addresses' %]
77    <p>
78     [%- LxERP.t8('At least one of the columns #1, customer, customernumber, vendor, vendornumber (depending on the target table) is required for matching the entry to an existing customer or vendor.', 'trans_id') %]
79    </p>
80
81 [%- ELSIF SELF.type == 'parts' %]
82    <p>
83     [%- LxERP.t8("If the article type is set to 'mixed' then a column called 'type' must be present.") %]
84     [% LxERP.t8("Type can be either 'part' or 'service'.") %]
85    </p>
86 [%- END %]
87
88    <p>
89     [%- L.submit_tag('action_download_sample', LxERP.t8('Download sample file')) %]
90    </p>
91
92   </div>
93
94   <hr>
95
96   <h2>[%- LxERP.t8('Settings') %]</h2>
97
98   <table>
99    <tr>
100     <th align="right">[%- LxERP.t8('Number Format') %]:</th>
101     <td colspan="10">
102      [% SET options = L.options_for_select([ '1.000,00', '1000,00', '1,000.00', '1000.00' ], default => SELF.profile.get('numberformat')) %]
103      [% L.select_tag('settings.numberformat', options, style => 'width: 300px') %]
104     </td>
105    </tr>
106
107    <tr>
108     <th align="right">[%- LxERP.t8('Charset') %]:</th>
109     <td colspan="10">[% L.select_tag('settings.charset', L.options_for_select(SELF.all_charsets, default => SELF.profile.get('charset')), style => 'width: 300px') %]</td>
110    </tr>
111
112    <tr>
113     <th align="right">[%- LxERP.t8('Separator') %]:</th>
114     [% SET custom_sep_char = SELF.sep_char %]
115     [% FOREACH entry = SELF.all_sep_chars %]
116      <td>
117       [% IF SELF.sep_char == entry.first %] [% SET custom_sep_char = '' %] [%- END %]
118       [% L.radio_button_tag('sep_char', value => entry.first, label => entry.last, checked => SELF.sep_char == entry.first) %]
119      </td>
120     [%- END %]
121
122     <td>
123      [% L.radio_button_tag('sep_char', value => 'custom', checked => custom_sep_char != '') %]
124      [% L.input_tag('custom_sep_char', custom_sep_char, size => 3, maxlength => 1) %]
125     </td>
126    </tr>
127
128    <tr>
129     <th align="right">[%- LxERP.t8('Quote character') %]:</th>
130     [% SET custom_quote_char = SELF.quote_char %]
131     [% FOREACH entry = SELF.all_quote_chars %]
132      <td>
133       [% IF SELF.quote_char == entry.first %] [% SET custom_quote_char = '' %] [%- END %]
134       [% L.radio_button_tag('quote_char', value => entry.first, label => entry.last, checked => SELF.quote_char == entry.first) %]
135      </td>
136     [%- END %]
137
138     <td>
139      [% L.radio_button_tag('quote_char', value => 'custom', checked => custom_quote_char != '') %]
140      [% L.input_tag('custom_quote_char', custom_quote_char, size => 3, maxlength => 1) %]
141     </td>
142    </tr>
143
144    <tr>
145     <th align="right">[%- LxERP.t8('Escape character') %]:</th>
146     [% SET custom_escape_char = SELF.escape_char %]
147     [% FOREACH entry = SELF.all_escape_chars %]
148      <td>
149       [% IF SELF.escape_char == entry.first %] [% SET custom_escape_char = '' %] [%- END %]
150       [% L.radio_button_tag('escape_char', value => entry.first, label => entry.last, checked => SELF.escape_char == entry.first) %]
151      </td>
152     [%- END %]
153
154     <td>
155      [% L.radio_button_tag('escape_char', value => 'custom', checked => custom_escape_char != '') %]
156      [% L.input_tag('custom_escape_char', custom_escape_char, size => 3, maxlength => 1) %]
157     </td>
158    </tr>
159
160    <tr>
161     <th align="right">[%- LxERP.t8('Check for duplicates') %]:</th>
162     <td colspan="10">
163      [% opts = [ [ 'no_check',  LxERP.t8('Do not check for duplicates') ],
164                  [ 'check_csv', LxERP.t8('Discard duplicate entries in CSV file') ],
165                  [ 'check_db',  LxERP.t8('Discard entries with duplicates in database or CSV file') ] ] %]
166      [% L.select_tag('settings.duplicates', L.options_for_select(opts, default => SELF.profile.get('duplicates')), style => 'width: 300px') %]
167     </td>
168    </tr>
169
170 [%- IF SELF.type == 'parts' %]
171  [%- INCLUDE 'csv_import/_form_parts.html' %]
172 [%- ELSIF SELF.type == 'customers_vendors' %]
173  [%- INCLUDE 'csv_import/_form_customers_vendors.html' %]
174 [%- END %]
175
176    <tr>
177     <th align="right">[%- LxERP.t8('Preview Mode') %]:</th>
178     <td colspan="10">
179       [% L.radio_button_tag('settings.full_preview', value=2, checked=SELF.profile.get('full_preview')==2, label=LxERP.t8('Full Preview')) %]
180       [% L.radio_button_tag('settings.full_preview', value=1, checked=SELF.profile.get('full_preview')==1, label=LxERP.t8('Only Warnings and Errors')) %]
181       [% L.radio_button_tag('settings.full_preview', value=0, checked=!SELF.profile.get('full_preview'),   label=LxERP.t8('First 20 Lines')) %]
182     </td>
183    </tr>
184
185    <tr>
186     <th align="right">[%- LxERP.t8('Import file') %]:</th>
187     <td colspan="10">[% L.input_tag('file', '', type => 'file', accept => '*') %]</td>
188    </tr>
189
190    [%- IF SELF.file.exists %]
191     <tr>
192      <th align="right">[%- LxERP.t8('Existing file on server') %]:</th>
193      <td colspan="10">[%- LxERP.t8('Uploaded on #1, size #2 kB', SELF.file.displayable_mtime, LxERP.format_amount(SELF.file.size / 1024, 2)) %]</td>
194     </tr>
195    [%- END %]
196
197   </table>
198
199   [% L.submit_tag('action_test', LxERP.t8('Test and preview')) %]
200   [% IF (SELF.import_status == 'tested') && SELF.num_importable %]
201    [% L.submit_tag('action_import', LxERP.t8('Import')) %]
202   [%- END %]
203
204  </form>
205
206  [%- IF SELF.import_status %]
207   [%- IF SELF.errors %]
208    [%- PROCESS 'csv_import/_errors.html' %]
209   [%- END %]
210
211   [%- PROCESS 'csv_import/_result.html' %]
212   [%- PROCESS 'csv_import/_preview.html' %]
213  [%- END %]
214
215  <script type="text/javascript">
216   <!--
217     $(document).ready(function() {
218       $('#action_save').click(function() {
219         if ($('#profile_name').attr('value') != '')
220           return true;
221         alert('[% LxERP.t8('Please enter a profile name.') %]');
222         return false;
223       })
224     });
225     -->
226  </script>
227 </body>
228 </html>