CRM-15789 - Remove civicrm.css styles redundant with jQuery UI
[civicrm-core.git] / templates / CRM / Financial / Form / Search.tpl
CommitLineData
6a488035
TO
1{*
2 +--------------------------------------------------------------------+
39de6fd5 3 | CiviCRM version 4.6 |
6a488035 4 +--------------------------------------------------------------------+
819d0d41 5 | Copyright CiviCRM LLC (c) 2004-2014 |
6a488035
TO
6 +--------------------------------------------------------------------+
7 | This file is a part of CiviCRM. |
8 | |
9 | CiviCRM is free software; you can copy, modify, and distribute it |
10 | under the terms of the GNU Affero General Public License |
11 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
12 | |
13 | CiviCRM is distributed in the hope that it will be useful, but |
14 | WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
16 | See the GNU Affero General Public License for more details. |
17 | |
18 | You should have received a copy of the GNU Affero General Public |
19 | License and the CiviCRM Licensing Exception along |
20 | with this program; if not, contact CiviCRM LLC |
21 | at info[AT]civicrm[DOT]org. If you have questions about the |
22 | GNU Affero General Public License or the licensing of CiviCRM, |
23 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
24 +--------------------------------------------------------------------+
25*}
26
27{* Financial search component. *}
28<div id="enableDisableStatusMsg" class="crm-container" style="display:none"></div>
29<div class="crm-submit-buttons">
52604b19 30 <a accesskey="N" href="{crmURL p='civicrm/financial/batch' q="reset=1&action=add&context=$batchStatus"}" id="newBatch" class="button"><span><div class="icon ui-icon-circle-plus"></div>{ts}New Accounting Batch{/ts}</span></a>
6a488035
TO
31</div>
32<div class="crm-form-block crm-search-form-block">
33 <div class="crm-accordion-wrapper crm-activity_search-accordion">
34 <div class="crm-accordion-header">
35 {ts}Filter Results{/ts}
36 </div>
37 <div class="crm-accordion-body">
38 <div id="financial-search-form" class="crm-block crm-form-block">
39 <table class="form-layout-compressed">
40 {* Loop through all defined search criteria fields (defined in the buildForm() function). *}
41 {foreach from=$elements item=element}
42 <tr class="crm-financial-search-form-block-{$element}">
43 <td class="label">{$form.$element.label}</td>
44 <td>{$form.$element.html}</td>
45 </tr>
46 {/foreach}
47 </table>
48 </div>
49 </div>
50 </div>
51</div>
52<div class="form-layout-compressed">{$form.batch_update.html}&nbsp;{$form.submit.html}</div><br/>
24e7a504 53<table id="crm-batch-selector-{$batchStatus}" class="row-highlight">
6a488035
TO
54 <thead>
55 <tr>
56 <th class="crm-batch-checkbox">{$form.toggleSelect.html}</th>
57 <th class="crm-batch-name">{ts}Batch Name{/ts}</th>
58 <th class="crm-batch-payment_instrument">{ts}Payment Instrument{/ts}</th>
59 <th class="crm-batch-item_count">{ts}Item Count{/ts}</th>
60 <th class="crm-batch-total">{ts}Total Amount{/ts}</th>
61 <th class="crm-batch-status">{ts}Status{/ts}</th>
62 <th class="crm-batch-created_by">{ts}Created By{/ts}</th>
63 <th></th>
64 </tr>
65 </thead>
66</table>
67{include file="CRM/Form/validate.tpl"}
68{literal}
69<script type="text/javascript">
3cc60a06 70CRM.$(function($) {
6a488035
TO
71 var batchSelector;
72 buildBatchSelector();
6f9cd76f 73 $("#batch_update").prop('disabled', false);
6a488035 74
f8db8a66
CW
75 $('#financial-search-form :input')
76 .change(function() {
77 if (!$(this).hasClass('crm-inline-error')) {
78 batchSelector.fnDraw();
79 }
80 })
81 .keypress(function(event) {
82 if (event.which == 13) {
83 event.preventDefault();
84 $(this).change();
85 return false;
86 }
87 });
6a488035
TO
88
89 var checkedRows = [];
90 function buildBatchSelector() {
91 var ZeroRecordText = {/literal}'<div class="status messages">{ts escape="js"}No Accounting Batches match your search criteria.{/ts}</div>'{literal};
92 var sourceUrl = {/literal}'{crmURL p="civicrm/ajax/batchlist" h=0 q="snippet=4&context=financialBatch"}'{literal};
93
24e7a504 94 batchSelector = $('#crm-batch-selector-{/literal}{$batchStatus}{literal}').dataTable({
6a488035
TO
95 "bFilter" : false,
96 "bAutoWidth" : false,
97 "aaSorting" : [],
98 "aoColumns" : [
99 {sClass:'crm-batch-checkbox', bSortable:false},
100 {sClass:'crm-batch-name'},
101 {sClass:'crm-batch-payment_instrument'},
102 {sClass:'crm-batch-item_count right'},
103 {sClass:'crm-batch-total right'},
104 {sClass:'crm-batch-status'},
105 {sClass:'crm-batch-created_by'},
106 {sClass:'crm-batch-links', bSortable:false},
107 ],
108 "bProcessing": true,
109 "asStripClasses" : ["odd-row", "even-row"],
110 "sPaginationType": "full_numbers",
111 "sDom" : '<"crm-datatable-pager-top"lfp>rt<"crm-datatable-pager-bottom"ip>',
112 "bServerSide": true,
113 "bJQueryUI": true,
114 "sAjaxSource": sourceUrl,
115 "iDisplayLength": 25,
116 "oLanguage": {
117 "sZeroRecords": ZeroRecordText,
118 "sProcessing": {/literal}"{ts escape='js'}Processing...{/ts}"{literal},
119 "sLengthMenu": {/literal}"{ts escape='js'}Show _MENU_ entries{/ts}"{literal},
120 "sInfo": {/literal}"{ts escape='js'}Showing _START_ to _END_ of _TOTAL_ entries{/ts}"{literal},
121 "sInfoEmpty": {/literal}"{ts escape='js'}Showing 0 to 0 of 0 entries{/ts}"{literal},
122 "sInfoFiltered": {/literal}"{ts escape='js'}(filtered from _MAX_ total entries) {/ts}"{literal},
123 "sSearch": {/literal}"{ts escape='js'}Search:{/ts}"{literal},
124 "oPaginate": {
125 "sFirst": {/literal}"{ts escape='js'}First{/ts}"{literal},
126 "sPrevious": {/literal}"{ts escape='js'}Previous{/ts}"{literal},
127 "sNext": {/literal}"{ts escape='js'}Next{/ts}"{literal},
128 "sLast": {/literal}"{ts escape='js'}Last{/ts}"{literal}
129 }
130 },
131 "fnServerParams": function (aoData) {
132 $('#financial-search-form :input').each(function() {
133 if ($(this).val()) {
134 aoData.push(
135 {name:$(this).attr('id'), value: $(this).val()}
136 );
137 }
138 });
139 checkedRows = [];
24e7a504 140 $("#crm-batch-selector-{/literal}{$batchStatus}{literal} input.select-row:checked").each(function() {
6a488035
TO
141 checkedRows.push('#' + $(this).attr('id'));
142 });
143 },
144 "fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
145 var box = $(aData[0]);
146 var id = box.attr('id').replace('check_', '');
147 $(nRow).addClass('crm-entity').attr('data-entity', 'batch').attr('data-id', id).attr('data-status_id', box.attr('data-status_id'));
148 $('td:eq(1)', nRow).wrapInner('<div class="crm-editable crmf-title" />');
149 return nRow;
150 },
151 "fnDrawCallback": function(oSettings) {
18afc30c 152 // FIXME: trigger crmLoad and crmEditable would happen automatically
24e7a504 153 $('.crm-editable', '#crm-batch-selector-{/literal}{$batchStatus}{literal}').crmEditable();
6a488035
TO
154 $("#toggleSelect").prop('checked', false);
155 if (checkedRows.length) {
156 $(checkedRows.join(',')).prop('checked', true).change();
157 }
158 }
159 });
160 }
161
162 function editRecords(records, op) {
163 records = validateOp(records, op);
164 if (records.length) {
165 $("#enableDisableStatusMsg").dialog({
166 title: {/literal}'{ts escape="js"}Confirm Changes{/ts}'{literal},
167 modal: true,
6a488035
TO
168 open:function() {
169 switch (op) {{/literal}
170 case 'reopen':
171 var msg = '<h3>{ts escape="js"}Are you sure you want to re-open:{/ts}</h3>';
172 break;
173 case 'delete':
174 var msg = '<h3>{ts escape="js"}Are you sure you want to delete:{/ts}</h3>';
175 break;
176 case 'close':
177 var msg = '<h3>{ts escape="js"}Are you sure you want to close:{/ts}</h3>';
178 break;
179 case 'export':
180 var msg = '<h3>{ts escape="js"}Export:{/ts}</h3>\
181 <div>\
182 <label>{ts escape="js"}Format:{/ts}</label>\
183 <select class="export-format">\
184 <option value="IIF">IIF</option>\
185 <option value="CSV">CSV</option>\
186 </select>\
187 </div>';
188 break;
189 {literal}}
190 msg += listRecords(records, op == 'close' || op == 'export');
191 $('#enableDisableStatusMsg').show().html(msg);
192 },
193 buttons: {
194 {/literal}"{ts escape='js'}Cancel{/ts}"{literal}: function() {
195 $(this).dialog("close");
196 },
197 {/literal}"{ts escape='js'}OK{/ts}{literal}": function() {
198 saveRecords(records, op);
199 $(this).dialog("close");
200 }
201 }
202 });
203 }
204 }
205
206 function listRecords(records, compareValues) {
207 var txt = '<ul>',
208 mismatch = false;
209 for (var i in records) {
210 var $tr = $('tr[data-id=' + records[i] + ']');
211 txt += '<li>' + $('.crmf-title', $tr).text();
212 if (compareValues) {
213 $('.actual-value.crm-error', $tr).each(function() {
214 mismatch = true;
215 var $th = $tr.closest('table').find('th').eq($(this).closest('td').index());
216 var $expected = $(this).siblings('.expected-value');
217 var label = $th.text();
218 var actual = $(this).text();
219 var expected = $expected.text();
220 txt += {/literal}'<div class="messages crm-error"><strong>' +
221 label + ' {ts escape="js"}mismatch.{/ts}</strong><br />{ts escape="js"}Expected{/ts}: ' + expected + '<br />{ts escape="js"}Current Total{/ts}: ' + actual + '</div>'{literal};
222 });
223 }
224 txt += '</li>';
225 }
226 txt += '</ul>';
227 if (mismatch) {
228 txt += {/literal}'<div class="messages status">{ts escape="js"}Click OK to override and update expected values.{/ts}</div>'{literal}
229 }
230 return txt;
231 }
232
233 function saveRecords(records, op) {
234 if (op == 'export') {
235 return exportRecords(records);
236 }
237 var postUrl = CRM.url('civicrm/ajax/rest', 'className=CRM_Financial_Page_AJAX&fnName=assignRemove');
238 //post request and get response
239 $.post(postUrl, {records: records, recordBAO: 'CRM_Batch_BAO_Batch', op: op, key: {/literal}"{crmKey name='civicrm/ajax/ar'}"{literal}},
240 function(response) {
241 //this is custom status set when record update success.
242 if (response.status == 'record-updated-success') {
243 CRM.alert(listRecords(records), op == 'delete' ? {/literal}'{ts escape="js"}Deleted{/ts}' : '{ts escape="js"}Updated{/ts}'{literal}, 'success');
244 batchSelector.fnDraw();
245 }
246 else {
247 CRM.alert({/literal}'{ts escape="js"}An error occurred while processing your request.{/ts}', $("#batch_update option[value=" + op + "]").text() + ' {ts escape="js"}Error{/ts}'{literal}, 'error');
248 }
249 },
250 'json').error(serverError);
251 }
252
253 function exportRecords(records) {
94ef27b7 254 var query = {'batch_id': records, 'export_format': $('select.export-format').val()};
6a488035 255 var exportUrl = CRM.url('civicrm/financial/batch/export', 'reset=1');
94ef27b7
CW
256 // jQuery redirect expects all query args as an object, so extract them from crm url
257 var urlParts = exportUrl.split('?');
258 $.each(urlParts[1].split('&'), function(key, val) {
259 var q = val.split('=');
260 query[q[0]] = q[1];
261 });
262 $().redirect(urlParts[0], query, 'GET');
263 setTimeout(function() {batchSelector.fnDraw();}, 4000);
6a488035
TO
264 }
265
266 function validateOp(records, op) {
267 switch (op) {
268 case 'reopen':
269 var notAllowed = [1, 5];
270 break;
271 case 'close':
272 var notAllowed = [2, 5];
273 break;
274 case 'export':
275 var notAllowed = [5];
276 break;
277 default:
278 return records;
279 }
280 var len = records.length;
281 var invalid = {};
282 var i = 0;
283 while (i < len) {
284 var status = $('tr[data-id='+records[i]+']').data('status_id');
285 if ($.inArray(status, notAllowed) >= 0) {
286 $('#check_' + records[i] + ':checked').prop('checked', false).change();
287 invalid[status] = invalid[status] || [];
288 invalid[status].push(records[i]);
289 records.splice(i, 1);
290 --len;
291 }
292 else {
293 i++;
294 }
295 }
296 for (status in invalid) {
297 i = invalid[status];
298 var msg = (i.length == 1 ? {/literal}'{ts escape="js"}This record already has the status{/ts}' : '{ts escape="js"}The following records already have the status{/ts}'{literal}) + ' ' + $('tr[data-id='+i[0]+'] .crm-batch-status').text() + ':' + listRecords(i);
299 CRM.alert(msg, {/literal}'{ts escape="js"}Cannot{/ts} '{literal} + $("#batch_update option[value=" + op + "]").text());
300 }
301 return records;
302 }
303
304 function serverError() {
305 CRM.alert({/literal}'{ts escape="js"}No response from the server. Check your internet connection and try reloading the page.{/ts}', '{ts escape="js"}Network Error{/ts}'{literal}, 'error');
306 }
307
308 $('#Go').click(function() {
309 var op = $("#batch_update").val();
310 if (op == "") {
311 CRM.alert({/literal}'{ts escape="js"}Please select an action from the menu.{/ts}', '{ts escape="js"}No Action Selected{/ts}'{literal});
312 }
313 else if (!$("input.select-row:checked").length) {
314 CRM.alert({/literal}'{ts escape="js"}Please select one or more batches for this action.{/ts}', '{ts escape="js"}No Batches Selected{/ts}'{literal});
315 }
316 else {
317 records = [];
318 $("input.select-row:checked").each(function() {
319 records.push($(this).attr('id').replace('check_', ''));
320 });
321 editRecords(records, op);
322 }
323 return false;
324 });
325
326 $('#crm-container').on('click', 'a.action-item[href="#"]', function(event) {
327 event.stopImmediatePropagation();
328 editRecords([$(this).closest('tr').attr('data-id')], $(this).attr('rel'));
329 return false;
330 });
331
332});
333
334</script>
335{/literal}