Bug 17762: Update the letter form interface
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / tools / letter.tt
1 [% USE Koha %]
2 [% USE Branches %]
3 [% INCLUDE 'doc-head-open.inc' %]
4 <title>Koha &rsaquo; Tools &rsaquo; Notices[% IF ( add_form or copy_form ) %][% IF ( modify ) %] &rsaquo; Modify notice[% ELSE %] &rsaquo; Add notice[% END %][% END %][% IF ( add_validate or copy_validate) %] &rsaquo; Notice added[% END %][% IF ( delete_confirm ) %] &rsaquo; Confirm deletion[% END %]</title>
5 [% INCLUDE 'doc-head-close.inc' %]
6 <link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/datatables.css" />
7 [% INCLUDE 'datatables.inc' %]
8 <script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.insertatcaret.js"></script>
9 <script type="text/javascript">
10 //<![CDATA[
11 $(document).ready(function() {
12     $("#lettert:has(tbody tr)").dataTable($.extend(true, {}, dataTablesDefaults, {
13         "sDom": 't',
14         "aoColumnDefs": [
15             { "bSortable": false, "bSearchable": false, 'aTargets': [ 'nosort' ] }
16         ],
17         "bPaginate": false
18     }));
19     [% IF no_op_set %]
20       $('#branch').change(function() {
21             $('#op').val("");
22             $('#selectlibrary').submit();
23       });
24       $('#newnotice').click(function() {
25             $('#op').val("add_form");
26             return true;
27       });
28     [% END %]
29
30     $("#newmodule").on("change",function(){
31         if( $("#branch").val() == ""){
32             var branchcode = "*";
33         } else {
34             var branchcode = $("#branch").val();
35         }
36         window.location.href = "/cgi-bin/koha/tools/letter.pl?op=add_form&module=" + $(this).val() + "&branchcode=" + branchcode;
37     });
38
39     $("#submit_form").click( function(event) {
40         event.preventDefault();
41         var at_least_one_exists = 0;
42         var are_valid = 1;
43         $("fieldset.mtt").each( function(){
44             var title = $(this).find('input[name="title"]').val();
45             var content = $(this).find('textarea[name="content"]').val();
46             if (
47                     ( title.length == 0 && content.length > 0 )
48                  || ( title.length > 0 && content.length == 0 )
49             ) {
50                 var mtt = $(this).find('input[name="message_transport_type"]').val();
51                 var msg = _("Please specify title and content for %s");
52                 msg = msg.replace( "%s", mtt );
53                 at_least_one_exists = 1;
54                 alert(msg);
55                 return are_valid = false;
56             } else if ( title.length > 0 && content.length > 0 ) {
57                 at_least_one_exists = 1;
58             }
59         } );
60         if ( ! at_least_one_exists ) {
61             alert( _("Please fill at least one template.") );
62             return false;
63         }
64         if ( ! are_valid ) {
65             return false;
66         }
67
68         // Test if code already exists in DB
69         var new_lettercode = $("#code").val();
70         var new_branchcode = $("#branch").val();
71         [% IF ( add_form and code ) # IF edit %]
72           if ( new_lettercode != '[% code %]' ) {
73         [% END %]
74           $.ajax({
75             data: { code: new_lettercode, branchcode: new_branchcode },
76             type: 'GET',
77             url: '/cgi-bin/koha/svc/letters/',
78             success: function (data) {
79               if ( data.letters.length > 0 ) {
80                 if( new_branchcode == '' ) {
81                     alert( _("A default letter with the code '%s' already exists.").format(new_lettercode) );
82                 } else {
83                     alert( _("A letter with the code '%s' already exists for '%s'.").format(new_lettercode, new_branchcode) );
84                 }
85                 return false;
86               } else {
87                 $("#add_notice").submit();
88               }
89             },
90           });
91         [% IF ( add_form and code ) %]
92           } else {
93             $("#add_notice").submit();
94           }
95         [% END %]
96     });
97
98     var sms_limit = 160;
99     $("#content_sms").on("keyup", function(){
100         var length = $(this).val().length;
101         $("#sms_counter").html(length + "/" + sms_limit + _(" characters"));
102         if ( length  > sms_limit ) {
103             $("#sms_counter").css("color", "red");
104         } else {
105             $("#sms_counter").css("color", "black");
106         }
107     });
108     $( ".transport-types" ).accordion({ collapsible: true, active:false, animate: 200 });
109     $(".insert").on("click",function(){
110         var containerid = $(this).data("containerid");
111         insertValueQuery( containerid );
112     })
113
114     $("#tabs").tabs();
115 });
116 [% IF add_form or copy_form %]
117         
118     function cancel(f) {
119         $('#op').val("");
120         f.method = "get";
121         f.submit();
122     }
123
124                 function isNotNull(f,noalert) {
125                         if (f.value.length ==0) {
126         return false;
127                         }
128                         return true;
129                 }
130
131                 function isNum(v,maybenull) {
132                 var n = new Number(v.value);
133                 if (isNaN(n)) {
134                         return false;
135                         }
136                 if (maybenull==0 && v.value=='') {
137                         return false;
138                 }
139                 return true;
140                 }
141         function insertValueQuery(mtt_id) {
142             var fieldset = $("#" + mtt_id);
143             var myQuery = $(fieldset).find('textarea[name="content"]');
144             var myListBox = $(fieldset).find('select[name="SQLfieldname"]');
145
146             if($(myListBox).find('option').length > 0) {
147                 $(myListBox).find('option').each( function (){
148                     if ( $(this).attr('selected') && $(this).val().length > 0 ) {
149                         $(myQuery).insertAtCaret("<<" + $(this).val() + ">>");
150                     }
151                 });
152             }
153         }
154         [% END %]
155                 //]]>
156                 </script>
157 </head>
158 <body id="tools_letter" class="tools">
159 [% INCLUDE 'header.inc' %]
160 [% INCLUDE 'letters-search.inc' %]
161
162 <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> &rsaquo; [% IF ( add_form or copy_form) %][% IF ( modify ) %]<a href="/cgi-bin/koha/tools/letter.pl">Notices &amp; Slips</a> &rsaquo; Modify notice[% ELSE %] <a href="/cgi-bin/koha/tools/letter.pl">Notices &amp; Slips</a> &rsaquo; Add notice[% END %][% ELSE %][% IF ( add_validate or copy_validate) %] <a href="/cgi-bin/koha/tools/letter.pl">Notices &amp; Slips</a> &rsaquo; Notice added[% ELSE %][% IF ( delete_confirm ) %] <a href="/cgi-bin/koha/tools/letter.pl">Notices &amp; Slips</a> &rsaquo; Confirm deletion[% ELSE %]Notices &amp; Slips[% END %][% END %][% END %]</div>
163
164 [% IF add_form or copy_form %]<div id="doc" class="yui-t7">[% ELSE %]<div id="doc3" class="yui-t2">[% END %]
165    
166    <div id="bd">
167         <div id="yui-main">
168         <div class="yui-b">
169
170 [% IF ( no_op_set ) %]
171     <h1>Notices and Slips</h1>
172     <form method="get" action="/cgi-bin/koha/tools/letter.pl" id="selectlibrary">
173       <input type="hidden" name="searchfield" value="[% searchfield %]" />
174     [% UNLESS independant_branch %]
175       <p>
176         Select a library :
177             <select name="branchcode" id="branch" style="width:20em;">
178                 <option value="*">All libraries</option>
179                 [% PROCESS options_for_libraries libraries => Branches.all( selected => branchcode ) %]
180             </select>
181       </p>
182     [% END %]
183       <div id="toolbar" class="btn-toolbar">
184           <button type="submit" class="btn btn-default btn-sm" id="newnotice"><i class="fa fa-plus"></i> New notice</button>
185         <input type="hidden" id="op" name="op" />
186       </div>
187     </form>
188
189                 [% IF ( search ) %]
190         <p>You searched for <b>[% searchfield %]</b></p>
191                 [% END %]
192                 [% IF ( letter && !independant_branch) %]
193             [% select_for_copy = BLOCK %]
194             <select name="branchcode">
195                 [% FOREACH l IN Branches.all() %]
196                 <option value="[% l.branchcode %]">Copy to [% l.branchname %]</option>
197                 [% END %]
198             </select>
199             [% END %]
200         [% END %]
201         [% IF letter %]
202           <table id="lettert">
203             <thead>
204               <tr>
205                 <th>Library</th>
206                 <th>Module</th>
207                 <th>Code</th>
208                 <th>Name</th>
209                 <th class="nosort">Copy notice</th>
210                 <th class="nosort">Actions</th>
211               </tr>
212             </thead>
213             <tbody>
214               [% FOREACH lette IN letter %]
215                 [% can_edit = lette.branchcode || !independant_branch %]
216                 <tr>
217                   <td>[% IF lette.branchname %][% lette.branchname %][% ELSE %](All libraries)[% END %]</td>
218                   <td>[% lette.module %]</td>
219                   <td>[% lette.code %]</td>
220                   <td>[% lette.name %]</td>
221                   <td class="actions">
222                     [% IF !independant_branch || !lette.branchcode %]
223                       <form method="post" action="/cgi-bin/koha/tools/letter.pl">
224                         <input type="hidden" name="op" value="copy_form" />
225                         <input type="hidden" name="oldbranchcode" value="[% lette.branchcode %]" />
226                         <input type="hidden" name="module" value="[% lette.module %]" />
227                         <input type="hidden" name="code" value="[% lette.code %]" />
228                         [% IF independant_branch %]
229                           <input type="hidden" name="branchcode" value="[% independant_branch %]" />
230                         [% ELSE %]
231                           [% select_for_copy %]
232                         [% END %]
233                         <button class="btn btn-default btn-xs"><i class="fa fa-clone"></i> Copy</button>
234                       </form>
235                     [% END %]
236                   </td>
237                   <td class="actions">
238                     [% IF can_edit %]
239                       <a class="btn btn-default btn-xs" href="/cgi-bin/koha/tools/letter.pl?op=add_form&amp;branchcode=[% lette.branchcode %]&amp;module=[% lette.module %]&amp;code=[% lette.code %]"><i class="fa fa-pencil"></i> Edit</a>
240                     [% END %]
241                     [% IF !lette.protected && can_edit %]
242                       <a class="btn btn-default btn-xs" href="/cgi-bin/koha/tools/letter.pl?op=delete_confirm&amp;branchcode=[%lette.branchcode %]&amp;module=[% lette.module %]&amp;code=[% lette.code %]"><i class="fa fa-trash"></i> Delete</a>
243                     [% END %]
244                   </td>
245                 </tr>
246               [% END %]
247             </tbody>
248           </table>
249         [% ELSE %]
250           <div class="dialog message">
251           [% IF ( branchcode ) %]
252              <p>There are no notices for this library.</p>
253           [% ELSE %]
254               <p>There are no notices.</p>
255           [% END %]
256           </div>
257         [% END %]
258 [% END %]
259
260         
261 [% IF add_form or copy_form %]
262 <h1>[% IF ( modify ) %]Modify notice[% ELSE %]Add notice[% END %]</h1>
263         <form id="add_notice" name="Aform" method="post" enctype="multipart/form-data" class="validate">
264         [% IF add_form %]
265           <input type="hidden" name="op" id="op" value="add_validate" />
266         [% ELSE %]
267           <input type="hidden" name="op" id="op" value="copy_validate" />
268         [% END %]
269
270                 <input type="hidden" name="checked" value="0" />
271                 [% IF ( modify ) %]
272                 <input type="hidden" name="add" value="0" />
273                 [% ELSE %]
274                 <input type="hidden" name="add" value="1" />
275                 [% END %]
276                 <fieldset class="rows">
277             <input type="hidden" name="oldbranchcode" value="[% oldbranchcode %]" />
278             <ol>
279             [% IF independant_branch %]
280                 <input type="hidden" name="branchcode" value="[% independant_branch %]" />
281             [% ELSE %]
282             <li>
283
284                 [% IF adding %]
285                     <label for="branch">Library:</label>
286                     <select name="branchcode" id="branch" style="width:20em;">
287                         <option value="">All libraries</option>
288                         [% PROCESS options_for_libraries libraries => Branches.all( selected => branchcode ) %]
289                     </select>
290                 [% ELSE %]
291                     <span class="label">Library:</span>
292                     <input type="hidden" id="branch" name="branchcode" value="[% branchcode %]" />
293                     [% IF ( branchcode ) %]
294                        [% Branches.GetName( branchcode ) %]
295                     [% ELSE %]
296                         All libraries
297                     [% END %]
298                 [% END %]
299             </li>
300             [% END %]
301                         <li>
302                                 <label for="module">Koha module:</label>
303                                 <input type="hidden" name="oldmodule" value="[% module %]" />
304                 [% IF adding  %]
305                   <select name="module" id="newmodule">
306                 [% ELSE %]
307                   <select name="module" id="module">
308                 [% END %]
309                                     [% IF ( module == "acquisition" ) %]
310                                       <option value="acquisition" selected="selected">Acquisition</option>
311                                     [% ELSE %]
312                                       <option value="acquisition" >Acquisition</option>
313                                     [% END %]
314                                     [% IF ( module == "catalogue" ) %]
315                                       <option value="catalogue" selected="selected">Catalog</option>
316                                     [% ELSE %]
317                                       <option value="catalogue" >Catalog</option>
318                                     [% END %]
319                                     [% IF ( module == "circulation" ) %]
320                                       <option value="circulation" selected="selected">Circulation</option>
321                                     [% ELSE %]
322                                       <option value="circulation">Circulation</option>
323                                     [% END %]
324                                     [% IF ( module == "orderacquisition" ) %]
325                                       <option value="orderacquisition" selected="selected">Order acquisition</option>
326                                     [% ELSE %]
327                                       <option value="orderacquisition">Order acquisition</option>
328                                     [% END %]
329                                     [% IF ( module == "claimacquisition" ) %]
330                                       <option value="claimacquisition" selected="selected">Claim acquisition</option>
331                                     [% ELSE %]
332                                       <option value="claimacquisition">Claim acquisition</option>
333                                     [% END %]
334                                     [% IF ( module == "claimissues" ) %]
335                                       <option value="claimissues" selected="selected">Claim serial issue</option>
336                                     [% ELSE %]
337                                       <option value="claimissues">Claim serial issue</option>
338                                     [% END %]
339                                     [% IF ( module == "reserves" ) %]
340                                       <option value="reserves" selected="selected">Holds</option>
341                                     [% ELSE %]
342                                       <option value="reserves">Holds</option>
343                                     [% END %]
344                                     [% IF ( module == "members" ) %]
345                                       <option value="members" selected="selected">Members</option>
346                                     [% ELSE %]
347                                       <option value="members">Members</option>
348                                     [% END %]
349                                     [% IF ( module == "serial" ) %]
350                                       <option value="serial" selected="selected">Serials (routing list)</option>
351                                     [% ELSE %]
352                                       <option value="serial">Serials (routing list)</option>
353                                     [% END %]
354                                     [% IF ( module == "suggestions" ) %]
355                                       <option value="suggestions" selected="selected">Suggestions</option>
356                                     [% ELSE %]
357                                       <option value="suggestions">Suggestions</option>
358                                     [% END %]
359                 </select>
360             </li>
361             <li>
362               [% IF adding %]
363                   <label for="code" class="required">Code:</label>
364                   <input type="text" id="code" name="code" size="20" maxlength="20" value="" required="required"/>
365                   <span class="required">Required</span>
366               [% ELSE %]
367                   <span class="label">Code:</span>
368                   <input type="hidden" id="code" name="code" value="[% code %]" />
369                   [% code %]
370               [% END %]
371             </li>
372             <li>
373               <label for="name" class="required">Name:</label>
374               <input type="text" id="name" name="name" size="60" value="[% letter_name %]" required="required" />
375               <span class="required">Required</span>
376             </li>
377         </ol>
378     </fieldset>
379         [% IF Koha.Preference('TranslateNotices') %]
380         <div style="clear:both"></div>
381             <div id="tabs">
382                 <ul>
383                     <li><a href="#lang_default">Default</a></li>
384                     [% FOR language IN languages %]
385                         [% FOR sublanguage IN language.sublanguages_loop %]
386                             [% IF language.plural %]
387                                 <li><a href="#lang_[% sublanguage.rfc4646_subtag %]">[% sublanguage.native_description %] [% sublanguage.region_description %] ([% sublanguage.rfc4646_subtag %])</a></li>
388                             [% ELSE %]
389                                 <li><a href="#lang_[% sublanguage.rfc4646_subtag %]">[% sublanguage.native_description %] ([% sublanguage.rfc4646_subtag %])</a></li>
390                             [% END %]
391                         [% END %]
392                     [% END %]
393                 </ul>
394         [% END %]
395
396         [% FOREACH lang IN letters.keys %]
397             <div id="lang_[% lang %]">
398         <div class="transport-types" style="clear:both">
399         [% FOR mtt IN letters.$lang.templates.keys.sort %]
400             [% SET letter = letters.$lang.templates.$mtt %]
401             <h3>
402                 [% SWITCH letter.message_transport_type %]
403                 [% CASE 'email' %]
404                   Email
405                 [% CASE 'print' %]
406                   Print
407                 [% CASE 'sms' %]
408                   SMS
409                 [% CASE 'feed' %]
410                   Feed
411                 [% CASE 'phone' %]
412                   Phone
413                 [% CASE %]
414                   [% letter.message_transport_type %]
415                 [% END %]
416             </h3>
417             [% IF letter.message_transport_type == "sms" and not Koha.Preference("SMSSendDriver") %]
418               <fieldset class="rows mtt" id="[% letter.message_transport_type %]" disabled="disabled">
419                 <div class="dialog message">You should enable the SMSSendDriver preference to use the SMS templates.</div>
420             [% ELSIF letter.message_transport_type == "phone" and not Koha.Preference("TalkingTechItivaPhoneNotification") %]
421               <fieldset class="rows mtt" id="[% letter.message_transport_type %]" disabled="disabled">
422                 <div class="dialog message">You should enable the TalkingTechItivaPhoneNotification preference to use the phone templates.</div>
423             [% ELSE %]
424               <fieldset class="rows mtt" id="[% letter.message_transport_type %]">
425             [% END %]
426               <ol>
427                 <li>
428                   <input type="hidden" name="message_transport_type" value="[% letter.message_transport_type %]" />
429                   <input type="hidden" name="lang" value="[% lang %]" />
430                   <label for="is_html_[% letter.message_transport_type %]">HTML message:</label>
431                   [% IF letter.is_html %]
432                     <input type="checkbox" name="is_html_[% letter.message_transport_type %]" id="is_html_[% letter.message_transport_type %]" value="1" checked="checked" />
433                   [% ELSE %]
434                     <input type="checkbox" name="is_html_[% letter.message_transport_type %]" id="is_html_[% letter.message_transport_type %]" value="1" />
435                   [% END %]
436                 </li>
437                 <li>
438                   <label for="title_[% letter.message_transport_type %]">Message subject:</label><input type="text" id="title_[% letter.message_transport_type %]" name="title" size="60" value="[% letter.title %]" />
439                 </li>
440                 <li>
441                   <label for="SQLfieldname_[% letter.message_transport_type %]">Message body:</label>
442                   [% IF letter.message_transport_type == 'sms' %]
443                     <span id="sms_counter">[% IF letter.content && letter.content.length > 0 %][% letter.content.length %][% ELSE %]0[% END %]/160 characters</span>
444                   [% END %]
445                   <table>
446                     <tr>
447                       <td>
448                         <select name="SQLfieldname" id="SQLfieldname_[% letter.message_transport_type %]" multiple="multiple" size="9">
449                           [% FOREACH SQLfieldname IN SQLfieldnames %]
450                             <option value="[% SQLfieldname.value %]">[% SQLfieldname.text %]</option>
451                           [% END %]
452                         </select>
453                       </td>
454                         <td class="actions">
455                             <button type="button" data-containerid="[% letter.message_transport_type %]" class="btn btn-default btn-sm insert">Insert <i class="fa fa-long-arrow-right"></i></button>
456                         </td>
457                       <td><textarea name="content" id="content_[% letter.message_transport_type %]" cols="80" rows="15">[% letter.content %]</textarea></td>
458                     </tr>
459                   </table>
460                 </li>
461               </ol>
462             </fieldset>
463             [% END %]
464             </div>
465         </div> <!-- / #transport-types -->
466         [% END %]
467         [% IF Koha.Preference('TranslateNotices') %]
468         </div>
469         [% END %]
470
471         [% IF code.search('DGST') %] <span class="overdue">Warning, this is a template for a Digest, as such, any references to branch data ( e.g. branches.branchname ) will refer to the borrower's home branch.</span> [% END %]
472         <fieldset class="action"><input type="submit" id="submit_form" value="Submit" class="button" /> <a class="cancel" href="/cgi-bin/koha/tools/letter.pl">Cancel</a></fieldset>
473       <input type="hidden" name="searchfield" value="[% searchfield %]" />
474     </form>
475 [% END %]
476
477 [% IF ( add_validate or copy_validate) %]
478         Data recorded
479         <form action="[% action %]" method="post">
480         <input type="submit" value="OK" />
481         </form>
482 [% END %]
483
484 [% IF ( delete_confirm ) %]
485     <div class="dialog alert">
486         <h3>Delete notice?</h3>
487         <table>
488             <thead>
489             <tr>
490                 <th>Library</th>
491                 <th>Module</th>
492                 <th>Code</th>
493                 <th>Name</th>
494             </tr>
495             </thead>
496             <tr>
497                 <td>[% IF letter.branchcode %][% Branches.GetName( letter.branchcode ) %][% ELSE %](All libraries)[% END %]</td>
498                 <td>[% letter.module %]</td>
499                 <td>[% letter.code %]</td>
500                 <td>[% letter.name %]</td>
501             </tr>
502         </table>
503             <form action="[% action %]" method="post">
504             <input type="hidden" name="op" value="delete_confirmed">
505             <input type="hidden" name="branchcode" value="[% letter.branchcode %]" />
506             <input type="hidden" name="code" value="[% letter.code %]" />
507             <input type="hidden" name="module" value="[% letter.module %]" />
508             <button type="submit" class="approve"><i class="fa fa-check"></i> Yes, delete</button>
509         </form>
510
511         <form action="[% action %]" method="get">
512             <button type="submit" class="deny"><i class="fa fa-times"></i> No, do not delete</button>
513         </form>
514     </div>
515 [% END %]
516
517 [% IF ( delete_confirmed ) %]
518         Data deleted
519         <form action="[% action %]" method="post">
520         <input type="submit" value="OK" />
521         </form>
522 [% END %]
523
524 </div>
525 </div>
526 [% UNLESS add_form or copy_form %]
527     <div class="yui-b noprint">
528         [% INCLUDE 'tools-menu.inc' %]
529     </div>
530 [% END %]
531 </div>
532 [% INCLUDE 'intranet-bottom.inc' %]