I made a model and managed to reference the user module fields in suitecrmās standard pdf templates, but there is no button to activate the generation module. how to proceed?
Are you trying to do this?
You can provide screenshots for more clarification.
You need to create a custom button action. This has to be done by code (note this only works in SuiteCRM 7, I donāt know how to do this in 8).
Iāve done this before many times. Hereās a link. What I have done where I needed this functionality was make the module a ālegacyā module in SuiteCRM 8 and then use this SuiteCRM method to show the button and button action.
I did this in suitecrm 8ā¦ can I do something similar? about the button?
I read and referenced the entire module this way, but the button does not exist
This method will not work for SuiteCRM 8. Iām not really an expert on SuiteCRM 8 customizations yet.
You do have the option of making the module a legacy module and then this method will work.
but isnāt the user module already a legacy?
Not sure, but if it is then this will work. I have made modules legacy modules in SuiteCRM 8 and used this method to add a PDF button.
I managed to place a button, but when I press it I get the following message in a new tab: There is no action by that name: generatePdf
the buttonās code:
$this->dv->defs['templateMeta']['form']['buttons'][] = array(
'customCode' => '<input type="button" class="button" onClick="window.open(\'index.php?module=pdf_template&action=generatePdf&record={$fields.id.value}&template_type=Users\', \'_blank\');" value="Generate PDF">',
);
(in view.detail.php
The last step you need to call the function on click.
for this, the easiest way is to copy the view.detail.php file from quotes or invoice module (see directory below) and replace it in the directory custom/modules/āyour moduleā/views/view.detail.php You will replace existing module name with the module you are editing in a few spots:
(example:)
<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
require_once('include/MVC/View/views/view.detail.php');
class cust_GradesViewDetail extends ViewDetail {
function __construct(){
parent::__construct();
}
/**
* @deprecated deprecated since version 7.6, PHP4 Style Constructors are deprecated and will be remove in 7.8, please update your code, use __construct instead
*/
function cust_GradesViewDetail(){
$deprecatedMessage = 'PHP4 Style Constructors are deprecated and will be remove in 7.8, please update your code';
if(isset($GLOBALS['log'])) {
$GLOBALS['log']->deprecated($deprecatedMessage);
}
else {
trigger_error($deprecatedMessage, E_USER_DEPRECATED);
}
self::__construct();
}
function display(){
$this->populateInvoiceTemplates();
$this->displayPopupHtml();
parent::display();
}
function populateInvoiceTemplates(){
global $app_list_strings;
$sql = "SELECT id, name FROM aos_pdf_templates WHERE deleted = 0 AND type='cust_Grades' AND active = 1";
$res = $this->bean->db->query($sql);
$app_list_strings['template_ddown_c_list'] = array();
while($row = $this->bean->db->fetchByAssoc($res)){
$app_list_strings['template_ddown_c_list'][$row['id']] = $row['name'];
}
}
function displayPopupHtml(){
global $app_list_strings,$app_strings, $mod_strings;
$templates = array_keys($app_list_strings['template_ddown_c_list']);
if($templates){
echo ' <div id="popupDiv_ara" style="display:none;position:fixed;top: 39%; left: 41%;opacity:1;z-index:9999;background:#FFFFFF;">
<form id="popupForm" action="index.php?entryPoint=generatePdf" method="post">
<table style="border: #000 solid 2px;padding-left:40px;padding-right:40px;padding-top:10px;padding-bottom:10px;font-size:110%;" >
<tr height="20">
<td colspan="2">
<b>'.$app_strings['LBL_SELECT_TEMPLATE'].':-</b>
</td>
</tr>';
foreach($templates as $template){
$template = str_replace('^','',$template);
$js = "document.getElementById('popupDivBack_ara').style.display='none';document.getElementById('popupDiv_ara').style.display='none';var form=document.getElementById('popupForm');if(form!=null){form.templateID.value='".$template."';form.submit();}else{alert('Error!');}";
echo '<tr height="20">
<td width="17" valign="center"><a href="#" onclick="'.$js.'"><img src="themes/default/images/txt_image_inline.gif" width="16" height="16" /></a></td>
<td><b><a href="#" onclick="'.$js.'">'.$app_list_strings['template_ddown_c_list'][$template].'</a></b></td></tr>';
}
echo ' <input type="hidden" name="templateID" value="" />
<input type="hidden" name="task" value="pdf" />
<input type="hidden" name="module" value="'.$_REQUEST['module'].'" />
<input type="hidden" name="uid" value="'.$this->bean->id.'" />
</form>
<tr style="height:10px;"><tr><tr><td colspan="2"><button style=" display: block;margin-left: auto;margin-right: auto" onclick="document.getElementById(\'popupDivBack_ara\').style.display=\'none\';document.getElementById(\'popupDiv_ara\').style.display=\'none\';return false;">Cancel</button></td></tr>
</table>
</div>
<div id="popupDivBack_ara" onclick="this.style.display=\'none\';document.getElementById(\'popupDiv_ara\').style.display=\'none\';" style="top:0px;left:0px;position:fixed;height:100%;width:100%;background:#000000;opacity:0.5;display:none;vertical-align:middle;text-align:center;z-index:9998;">
</div>
<script>
function showPopup(task){
var form=document.getElementById(\'popupForm\');
var ppd=document.getElementById(\'popupDivBack_ara\');
var ppd2=document.getElementById(\'popupDiv_ara\');
if('.count($templates).' == 1){
form.task.value=task;
form.templateID.value=\''.$template.'\';
form.submit();
}else if(form!=null && ppd!=null && ppd2!=null){
ppd.style.display=\'block\';
ppd2.style.display=\'block\';
form.task.value=task;
}else{
alert(\'Error!\');
}
}
</script>';
}
else{
echo '<script>
function showPopup(task){
alert(\''.$mod_strings['LBL_NO_TEMPLATE'].'\');
}
</script>';
}
}
}
Replace the within the code, module names above with themodule you want to add.
In this case I replaced āAOS_Invoicesā with ācust_Gradesā for the āGradesā custom module.
After you are finished go to Admin > Repair > Quick Repair and Rebuild and let finish Final step is to create a PDF Template for the desired module. Then test by creating or editing a record and use the edit > Print PDF function.
Note: If any directory of file does not exist within the ācustomā add the proper directories and file where needed. Do not edit files outside of the ācustomā directory because edits outside of this, are not upgrade safe.
I followed your instructions, but an error occurred when displaying the buttons, all the action buttons including the print pdf button disappeared
Make sure the module is inlegacy mode.
public/legacy/custom/MODULE
No, this is not it. Legacy mode is about module_routing
settings.
Also make sure you do a repair and rebuild after making code changes. Also, I copied from the invoice module which had PDF fuctionality, you might want to also try copying from the Accounts module. (it would have to come from legacy)
I managed to get the buttons back to normal, implement code from another module, AOS_invoices, but the error continues to displayā¦ this is my code from the users module:
if (!defined('sugarEntry') || !sugarEntry) {
die('Not A Valid Entry Point');
}
require_once('modules/Users/UserViewHelper.php');
#[\AllowDynamicProperties]
class UsersViewDetail extends ViewDetail
{
public function __construct()
{
parent::__construct();
}
public function preDisplay()
{
global $current_user, $app_strings, $sugar_config;
if (!isset($this->bean->id)) {
// No reason to set everything up just to have it fail in the display() call
return;
}
$metadataFile = $this->getMetaDataFile();
$this->dv = new DetailView2();
$this->dv->ss =& $this->ss;
$this->dv->setup(
$this->module,
$this->bean,
$metadataFile,
get_custom_file_if_exists('modules/Users/tpls/DetailView.tpl')
);
$viewHelper = new UserViewHelper($this->ss, $this->bean, 'DetailView');
$viewHelper->setupAdditionalFields();
$errors = "";
$msgGood = false;
if (isset($_REQUEST['pwd_set']) && $_REQUEST['pwd_set'] != 0) {
if ($_REQUEST['pwd_set'] == '4') {
require_once('modules/Users/password_utils.php');
$errors .= canSendPassword();
} else {
$errors .= translate('LBL_NEW_USER_PASSWORD_3' . $_REQUEST['pwd_set'], 'Users');
$msgGood = true;
}
} else {
// IF BEAN USER IS LOCKOUT
if ($this->bean->getPreference('lockout') == '1') {
$errors .= translate('ERR_USER_IS_LOCKED_OUT', 'Users');
}
}
$this->ss->assign("ERRORS", $errors);
$this->ss->assign(
"ERROR_MESSAGE",
$msgGood ? translate('LBL_PASSWORD_SENT', 'Users') : translate('LBL_CANNOT_SEND_PASSWORD', 'Users')
);
$this->ss->assign("CURRENT_USER_ID", $GLOBALS['current_user']->id);
if ((
is_admin($current_user) || $_REQUEST['record'] == $current_user->id
)
&& !empty($sugar_config['default_user_name'])
&& $sugar_config['default_user_name'] == $this->bean->user_name
&& isset($sugar_config['lock_default_user_name'])
&& $sugar_config['lock_default_user_name']) {
$this->dv->defs['templateMeta']['form']['buttons'][] = 'EDIT';
} elseif (is_admin($current_user) || ($GLOBALS['current_user']->isAdminForModule('Users') && !$this->bean->is_admin)
|| $_REQUEST['record'] == $current_user->id) {
$this->dv->defs['templateMeta']['form']['buttons'][] = 'EDIT';
if ((
is_admin($current_user) || $GLOBALS['current_user']->isAdminForModule('Users')
)) {
if (!$current_user->is_group) {
$this->dv->defs['templateMeta']['form']['buttons'][] = array('customCode' => "<input id='duplicate_button' title='" . $app_strings['LBL_DUPLICATE_BUTTON_TITLE'] . "' accessKey='" . $app_strings['LBL_DUPLICATE_BUTTON_KEY'] . "' class='button' onclick=\"this.form.return_module.value='Users'; this.form.return_action.value='DetailView'; this.form.isDuplicate.value=true; this.form.action.value='EditView'\" type='submit' name='Duplicate' value='" . $app_strings['LBL_DUPLICATE_BUTTON_LABEL'] . "'>");
$this->dv->defs['templateMeta']['form']['buttons'][] = array('customCode' => "<input name='delete' id='delete_button' title='" . $app_strings['LBL_DELETE_BUTTON_LABEL'] . "' type='button' class='button' onclick='confirmDelete();' value='" . $app_strings['LBL_DELETE_BUTTON_LABEL'] . "'>");
if (!$this->bean->portal_only && !$this->bean->is_group && !$this->bean->external_auth_only
&& isset($sugar_config['passwordsetting']['SystemGeneratedPasswordON']) && $sugar_config['passwordsetting']['SystemGeneratedPasswordON']) {
$this->dv->defs['templateMeta']['form']['buttons'][] = array('customCode' => '<input title="'.translate('LBL_GENERATE_PASSWORD_BUTTON_TITLE', 'Users').'" class="button" LANGUAGE=javascript data-toggle="dropdown" onclick="generatepwd(\'{$fields.id.value}\');" type="button" name="password" value="'.translate('LBL_GENERATE_PASSWORD_BUTTON_LABEL', 'Users').'">');
}
}
}
}
require_once('modules/AOS_PDF_Templates/formLetter.php');
formLetter::DVPopupHtml('Accounts');
// Adiciona o botĆ£o personalizado para "Print as PDF"
$this->dv->defs['templateMeta']['form']['buttons'][] = array(
'customCode' => '<input type="button" class="button" onClick="window.open(\'index.php?module=pdf_template&action=generatePdf&record={$fields.id.value}&template_type=Users\', \'_blank\');" value="Generate PDF">',
);
$this->dv->defs['templateMeta']['form']['buttons'][] = array('customCode' => '<input title="'.translate('LBL_RESET_PREFERENCES', 'Users').'" class="button" LANGUAGE=javascript onclick="if(confirm(\''.translate('LBL_RESET_PREFERENCES_WARNING_USER', 'Users').'\')) window.location=\'index.php?module=Users&action=resetPreferences&reset_preferences=true&record={$fields.id.value}\';" type="button" name="password" value="'.translate('LBL_RESET_PREFERENCES', 'Users').'">');
$this->dv->defs['templateMeta']['form']['buttons'][] = array('customCode' => '<input title="'.translate('LBL_RESET_HOMEPAGE', 'Users').'" class="button" LANGUAGE=javascript onclick="if(confirm(\''.translate('LBL_RESET_HOMEPAGE_WARNING', 'Users').'\')) window.location=\'index.php?module=Users&action=DetailView&reset_homepage=true&record={$fields.id.value}\';" type="button" name="password" value="'.translate('LBL_RESET_HOMEPAGE', 'Users').'">');
$show_roles = (!($this->bean->is_group == '1' || $this->bean->portal_only == '1'));
if (is_admin($this->bean)) {
$show_roles = false;
}
$this->ss->assign('SHOW_ROLES', $show_roles);
// Mark whether or not the user is a group or portal user
$this->ss->assign(
'IS_GROUP_OR_PORTAL',
($this->bean->is_group == '1' || $this->bean->portal_only == '1') ? true : false
);
if ($show_roles) {
ob_start();
require_once('modules/ACLRoles/DetailUserAccess.php');
$role_html = ob_get_contents();
ob_end_clean();
$this->ss->assign('ROLE_HTML', $role_html);
}
}
public function getMetaDataFile()
{
$userType = 'Regular';
if ($this->bean->is_group == 1) {
$userType = 'Group';
}
if ($userType != 'Regular') {
$oldType = $this->type;
$this->type = $oldType . 'group';
}
$metadataFile = parent::getMetaDataFile();
if ($userType != 'Regular') {
$this->type = $oldType;
}
return $metadataFile;
}
public function display()
{
$this->populateInvoiceTemplates();
$this->displayPopupHtml();
parent::display();
}
public function populateInvoiceTemplates()
{
global $app_list_strings;
$sql = "SELECT id, name FROM aos_pdf_templates WHERE deleted = 0 AND type='Users' AND active = 1";
$res = $this->bean->db->query($sql);
$app_list_strings['template_ddown_c_list'] = array();
while ($row = $this->bean->db->fetchByAssoc($res)) {
$app_list_strings['template_ddown_c_list'][$row['id']] = $row['name'];
}
}
public function displayPopupHtml()
{
global $app_list_strings,$app_strings, $mod_strings;
$templates = array_keys($app_list_strings['template_ddown_c_list']);
if ($templates) {
echo ' <div id="popupDiv_ara" class="pdf-templates-modal">
<form id="popupForm" action="index.php?entryPoint=generatePdf" method="post">
<table style="font-size:110%;">
<tr height="20">
<td colspan="2" style="padding-bottom: 0.5em;">
<b>'.$app_strings['LBL_SELECT_TEMPLATE'].':</b>
</td>
</tr>';
foreach ($templates as $template) {
$template = str_replace('^', '', $template);
$js = "document.getElementById('popupDivBack_ara').style.display='none';document.getElementById('popupDiv_ara').style.display='none';var form=document.getElementById('popupForm');if(form!=null){form.templateID.value='".$template."';form.submit();}else{alert('Error!');}";
echo '<tr height="20">
<td width="17" valign="center"><a href="#" onclick="'.$js.'">
'.SugarThemeRegistry::current()->getImage('PDF_Templates.svg').'
</a></td>
<td style="padding-top: 0.2em;"><b style="margin-left: 0.2em;"><a href="#" onclick="'.$js.'">'.$app_list_strings['template_ddown_c_list'][$template].'</a></b></td></tr>';
}
echo ' <input type="hidden" name="templateID" value="" />
<input type="hidden" name="task" value="pdf" />
<input type="hidden" name="module" value="'.$_REQUEST['module'].'" />
<input type="hidden" name="uid" value="'.$this->bean->id.'" />
</form>
<tr style="height:10px;"><tr><tr><td colspan="2"><button style=" display: block;margin-left: auto;margin-right: auto" onclick="document.getElementById(\'popupDivBack_ara\').style.display=\'none\';document.getElementById(\'popupDiv_ara\').style.display=\'none\';return false;">Cancel</button></td></tr>
</table>
</div>
<div id="popupDivBack_ara" onclick="this.style.display=\'none\';document.getElementById(\'popupDiv_ara\').style.display=\'none\';" style="top:0px;left:0px;position:fixed;height:100%;width:100%;background-color:#E9E9E9;opacity:0.7;display:none;vertical-align:middle;text-align:center;z-index:9998;">
</div>
<script>
function showPopup(task){
var form=document.getElementById(\'popupForm\');
var ppd=document.getElementById(\'popupDivBack_ara\');
var ppd2=document.getElementById(\'popupDiv_ara\');
if('.count($templates).' == 1){
form.task.value=task;
form.templateID.value=\''.$template.'\';
form.submit();
}else if(form!=null && ppd!=null && ppd2!=null){
ppd.style.display=\'block\';
ppd2.style.display=\'block\';
form.task.value=task;
}else{
alert(\'Error!\');
}
}
</script>';
} else {
echo '<script>
function showPopup(task){
alert(\''.$mod_strings['LBL_NO_TEMPLATE'].'\');
}
</script>';
}
}
}