Skip to content

Instantly share code, notes, and snippets.

@jmertic
Created July 12, 2013 17:01
Show Gist options
  • Save jmertic/5986008 to your computer and use it in GitHub Desktop.
Save jmertic/5986008 to your computer and use it in GitHub Desktop.
Example of adding a field to a layout, that can work thru a post_install script in a loadable module ( copied from http://codesearch.epicom.com/displayFile.php?filename=./EpicomsQuickBooksIntegration/scripts/pre_install.php&q=ParserFactory )
<?php
function pre_install()
{
global $current_user;
require_once('include/utils.php');
require_once('include/utils/file_utils.php');
require_once('config.php');
require_once('include/MVC/Controller/SugarController.php');
require_once('modules/ModuleBuilder/controller.php');
require_once('modules/ModuleBuilder/parsers/ParserFactory.php');
$account_fields_dv = array(
'esb_listid_c',
'esb_status_c',
'esb_sync_c',
'esb_last_sync_c',
'esb_balance_c',
'esb_days_outstanding_c',
'esb_terms_c'
);
$account_fields_ev = array('esb_sync_c');
$product_fields_dv = array(
'esb_listid_c',
'esb_item_type_c',
'esb_sync_c',
'esb_last_sync_c',
'esb_income_account_c',
'esb_expense_account_c',
'esb_cogs_account_c',
'esb_asset_account_c'
);
$product_fields_ev = array('esb_sync_c', 'esb_item_type_c');
$quote_fields_dv = array('esb_sync_c', 'esb_last_sync_c', 'esb_listid_c', 'esb_qb_transactions_quotes_name');
$quote_fields_ev = array('esb_sync_c');
$layoutFields = array();
foreach ($account_fields_dv as $field) {
$layoutFields[$field] = array('name' => $field);
}
addField2View('Accounts', $layoutFields, 'detailview');
$layoutFields = array();
foreach ($product_fields_dv as $field) {
$layoutFields[$field] = array('name' => $field);
}
addField2View('ProductTemplates', $layoutFields, 'detailview');
$layoutFields = array();
foreach ($account_fields_ev as $field) {
$layoutFields[$field] = array('name' => $field);
}
addField2View('Accounts', $layoutFields, 'editview');
$layoutFields = array();
foreach ($product_fields_ev as $field) {
$layoutFields[$field] = array('name' => $field);
}
addField2View('ProductTemplates', $layoutFields, 'editview');
$layoutFields = array();
foreach ($quote_fields_dv as $field) {
$layoutFields[$field] = array('name' => $field);
}
addField2View('Quotes', $layoutFields, 'detailview');
$layoutFields = array();
foreach ($quote_fields_ev as $field) {
$layoutFields[$field] = array('name' => $field);
}
addField2View('Quotes', $layoutFields, 'editview');
$saved_report = new SavedReport();
$result = $saved_report->save_report(-1, 1, "QuickBooks - Outstanding Balances", "Accounts", "detailed_summary", '{"display_columns":[{"name":"name","label":"Name","table_key":"self"},{"name":"esb_balance_c","label":"Outstanding Balance","table_key":"self"},{"name":"esb_days_outstanding_c","label":"Days Outstanding","table_key":"self"},{"name":"phone_office","label":"Office Phone","table_key":"self"},{"name":"esb_status_c","label":"Status","table_key":"self"}],"module":"Accounts","group_defs":[{"name":"name","label":"Name","table_key":"self","type":"name"}],"summary_columns":[{"name":"esb_balance_c","label":"SUM: Outstanding Balance","field_type":"currency","group_function":"sum","table_key":"self"},{"name":"name","label":"Name","table_key":"self"}],"report_name":"Outstanding Accounts","chart_type":"vBarF","do_round":1,"chart_description":"","numerical_chart_column":"self:esb_balance_c:sum","numerical_chart_column_type":"","assigned_user_id":"1","report_type":"summary","full_table_list":{"self":{"value":"Accounts","module":"Accounts","label":"Accounts","dependents":[]}},"filters_def":{"Filter_1":{"operator":"AND","0":{"name":"esb_listid_c","table_key":"self","qualifier_name":"not_empty","input_name0":"not_empty","input_name1":"on"},"1":{"name":"esb_balance_c","table_key":"self","qualifier_name":"greater","input_name0":"0","input_name1":"on"},"2":{"name":"esb_days_outstanding_c","table_key":"self","qualifier_name":"greater","input_name0":"0","input_name1":"on"}}}}', 1, '1', 'none');
sugar_cache_clear('app_list_strings.en_us');
}
function addField2View ($module, $layoutFields, $view) {
echo "<br /><b> Updating $module module $view with custom fields.</b><br />";
$parser = ParserFactory::getParser($view, $module);
foreach ($parser->_viewdefs['panels'] as $panelName => $panel) {
foreach($panel as $rowIndex => $panelRow) {
foreach($panelRow as $columnIndex => $panelColumn) {
if (is_array($panelColumn) && isset($panelColumn['name'])) {
$fieldName = $panelColumn['name'];
} else {
$fieldName = $panelColumn;
}
if(array_key_exists($fieldName, $layoutFields)) {
$parser->_viewdefs['panels'][$panelName][$rowIndex][$columnIndex] = $layoutFields[$fieldName];
echo ("<b>$fieldName</b> field added in $module $view.<br />");
unset($layoutFields[$fieldName]);
}
}
}
}
$row = $column = 0;
foreach ($layoutFields as $panelName => $panelDef) {
$panels = array_keys($parser->_viewdefs['panels']);
$parser->_viewdefs['panels']['LBL_QUICKBOOKS_PLUGIN'][$row][$column] = $panelDef;
echo ("<strong>$panelName</strong> field added to $module $view View.<br />");
$column = ($column > 0) ? 0 : 1;
if($column === 0) $row++;
}
$parser->handleSave(false);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment