Files
pmgr/views/elements/customers.ctp
abijah cf0da7d3c2 Added query ability to the customer grid. There is a bug with the paging code, but it roughly works.
git-svn-id: file:///svn-source/pmgr/branches/ledger_transactions_20090605/site@109 97e9348a-65ac-dc4b-aefc-98561f571b83
2009-06-13 21:20:11 +00:00

121 lines
4.5 KiB
PHP

<?php /* -*- mode:PHP -*- */
if (!isset($caption))
$caption = '<H2>'.$this->pageTitle.'</H2>';
if (!isset($limit))
$limit = 20;
if (!isset($limitOptions))
$limitOptions = array(10, 20, 50, 200);
if (!isset($height))
$height = 'auto';
// Do some prework to bring in the appropriate libraries
$imgpath = '/pmgr/site/css/jqGrid/basic/images';
$html->css('jqGrid/basic/grid', null, null, false);
$html->css('jqGrid/jqModal', null, null, false);
$javascript->link('jqGrid/jquery.jqGrid.js', false);
$javascript->link('jqGrid/js/jqModal', false);
$javascript->link('jqGrid/js/jqDnR', false);
// Define the table columns
$cols = array();
$cols['ID'] = array('index' => 'Customer.id', 'width' => '30', 'align' => 'center');
if (isset($customers[0]['ContactsCustomer']))
$cols['Relationship'] = array('index' => 'ContactsCustomer.type', 'width' => '75', 'align' => 'left');
$cols['Name'] = array('index' => 'Customer.name', 'width' => '150', 'align' => 'left');
$cols['Last Name'] = array('index' => 'PrimaryContact.last_name', 'width' => '100', 'align' => 'left');
$cols['First Name'] = array('index' => 'PrimaryContact.first_name', 'width' => '100', 'align' => 'left');
$cols['Leases'] = array('index' => 'lease_count', 'width' => '60', 'align' => 'center');
$cols['Comment'] = array('index' => 'Customer.comment', 'width' => '300', 'align' => 'left');
// Some of the columns should not be sortable
foreach (array_intersect_key($cols, array('Comment'=>1)) AS $k => $v)
$cols[$k]['sortable'] = false;
// Create the javascript code for jqGrid to create each table column
$colModels = array();
foreach ($cols AS $col) {
$col['name'] = $col['index'];
$colModels[] =
'{ ' . implode(", ",
array_map(create_function
('$k, $v',
'return "$k:".($v===false?"false":"\'$v\'");'),
array_keys($col),
array_values($col))) .
'}';
}
// Save just the column indices (fields)
$colFields= array_map(create_function('$col', 'return $col["index"];'), $cols);
// Define the URL to fetch data from.
// To prevent having to keep the controller and the view
// in sync on which fields need to be queried by the
// controller in order to be accessible to the view,
// we'll just pass the desired fields to the controller
// as part of the data fetch.
$url = $html->url(array('controller' => 'customers',
'action' => 'jqGridData',
'debug' => 0,
));
// OK, now that everything is in place, get out of PHP mode,
// and add the javascript code (along with a touch of HTML)
// to kick this thing off.
?>
<script type="text/javascript"><!--
jQuery(document).ready(function(){
// return;
jQuery("#customer-list").jqGrid({
url: '<?php echo $url; ?>',
datatype: 'xml',
mtype: 'GET',
postData: { action: '<?php echo $action; ?>',
fields: '<?php echo serialize($colFields); ?>' },
colNames: [ '<?php echo implode("', '", array_keys($cols)); ?>' ],
colModel: [ <?php echo "\n " . implode(",\n ", $colModels); ?> ],
pager: jQuery('#customer-pager'),
height: '<?php echo $height; ?>',
rowNum: <?php echo $limit; ?>,
rowList: [<?php echo implode(",",$limitOptions); ?>],
sortname: 'Customer.id',
sortorder: "ASC",
viewrecords: true,
imgpath: '<?php echo $imgpath; ?>',
caption: <?php echo $caption ? "'$caption'" : "null"; ?>,
});
});
--></script>
<div id="everything">
<table id="customer-list" class="scroll"></table>
<div id="customer-pager" class="scroll" style="text-align:center;"></div>
</div>
<input type="BUTTON" id="bsdata" value="Search" />
<script type="text/javascript"><!--
$("#bsdata").click(function(){
jQuery("#customer-list").searchGrid(
{sopt:['cn','bw','eq','ne','lt','gt','ew']}
);
});
--></script>
<?php
/* <div><a href="#" onClick="$('#debug').html(htmlEncode($('#everything').html())); return false;">Get Table Code</a></div> */
/* <div id="debug"></div> */
/* <P> */
/* <input type="text" id="debval" value="1.0em"><BR> */
/* <a href="#" onClick="$('#load_customer-list').css('display', 'inline'); return false;">Show Loading</a><BR> */
/* <a href="#" onClick="$('#load_customer-list').css('margin-top', $('#debval').val()); return false;">Set Top Margin</a><BR> */
/* <a href="#" onClick="$('#load_customer-list').css('margin-left', $('#debval').val()); return false;">Set Left Margin</a><BR> */
?>