使用SugarCRM创建发票时,在发票明细中有单位和单价的数量。我想自动填充现场线价格,这只是上述两个字段的产物。 这是我在custom / modules / C_Inc_Invoice_Detail目录中添加的内容:
logic_hook.php
<?php
$hook_version = 1;
$hook_array = array();
$hook_array['after_save'] = array();
$hook_array['after_save'][] = array(
1,
'Auto Fill Line price',
'custom/modules/C_Inv_Invoice_Detail/autofilllineprice.php',
'AutoFillLinePrice',
'autofilllineprice'
);
?>
和autofilllineprice.php:
<?php
//prevents directly accessing this file from a web browser
if
(!defined('sugarEntry') ||!sugarEntry) die('Not A Valid Entry Point');
class AutoFillLinePrice {
function autofilllineprice($bean, $event, $arguments){
$line_price = $bean->unit_price * $bean->number_units;
}
}
?>
你可以建议吗?
答案 0 :(得分:0)
这篇文章没有直接回答这个问题,但它记录了完成类似要求所涉及的步骤。 SugarCE-6.5.22中的帐户模块的字段年度收入,它显示在 DetailView 中,如下所示。
以下是添加新字段所涉及的步骤,该字段显示转换为其他货币的此字段的值。
自定义\扩展\模块\帐户\分机\ Vardefs \ custom_fields.php 强>
<?php
if (!defined('sugarEntry') ||!sugarEntry) die('Not A Valid Entry Point');
$dictionary['Account']['fields']['annual_revenue_inr'] = array(
'name' => 'annual_revenue_inr',
'vname' => 'LBL_ANNUAL_REVENUE_INR',
'label'=>'LBL_ANNUAL_REVENUE_INR',
'type' => 'name',
'module' => 'Accounts',
'source' => 'non-db',
'studio' => array('detailview'=>true),
'default_value' => '',
'help' => 'Annual Revenue(INR)',
'comment' => 'Annual Revenue(INR)',
'reportable' => true,
'audited' => false,
'duplicate_merge' => false,
'importable' => 'true',
);
?>
自定义\扩展\模块\帐户\分机\语言\ en_us_custom_fields.php 强>
<?php
if (!defined('sugarEntry') ||!sugarEntry) die('Not A Valid Entry Point');
$mod_strings['LBL_ANNUAL_REVENUE_INR'] = 'Annual Revenue(INR)';
?>
添加这两个文件后,我们需要运行 Admin - &gt; Repair - &gt; Quick Repair and Rebuild 。完成后,如果我们打开管理员 - >工作室并展开帐户 - &gt;布局 - &gt; DetailView ,我们应该会看到我们的新内容在那里创建了字段。我们可以将它拖放到我们希望它出现的布局中,然后单击保存&amp;部署即可。
现在,这个新字段应该在帐户的详细信息视图中可见。
自定义\扩展\模块\帐户\分机\钩\ annual_revenue_hook.php 强>
<?php
if (!defined('sugarEntry') ||!sugarEntry) die('Not A Valid Entry Point');
class AnnualRevenue {
function computeAnnualRevenueINR($bean, $event, $arguments){
$bean->annual_revenue_inr = $bean->annual_revenue * 100;
}
}
?>
要注册上面的钩子,我们需要编辑模块的logic_hooks.php文件并添加以下行:
自定义\模块\帐户\ logic_hooks.php 强>
//Create a new array that holds after_retrieve event hooks if not present already
$hook_array['after_retrieve'] = Array();
//Register our annual revenue hook for computing new currency value
$hook_array['after_retrieve'][]= Array(1, 'Compute Annual Revenue in INR', 'custom/Extension/modules/Accounts/Ext/hooks/annual_revenue_hook.php','AnnualRevenue', 'computeAnnualRevenueINR');
完成这些步骤后,我们应该会在详细信息视图中看到填充新货币的值,如下所示:
也可以从相关模块获取数据。例如,我们需要计算与此帐户相关联的所有机会的总和,然后添加到我们的新字段中。以下是完成它的步骤:
第一步是获取模块之间的关系信息,在这种情况下,在帐户和机会之间。我们需要打开文件 modules \ Accounts \ vardefs.php 并搜索机会。它应该给我们以下信息。
'opportunities' =>
array (
'name' => 'opportunities',
'type' => 'link',
'relationship' => 'accounts_opportunities',
'module'=>'Opportunities',
'bean_name'=>'Opportunity',
'source'=>'non-db',
'vname'=>'LBL_OPPORTUNITY',
),
然后,我们可以打开管理员 - >工作室,展开帐户 - &gt;关系,找到关系类型,如下所示:
现在我们已经确定了关系信息,我们可以编辑现有的钩子,如下所示:
自定义\扩展\模块\帐户\分机\钩\ annual_revenue_hook.php 强>
<?php
if (!defined('sugarEntry') ||!sugarEntry) die('Not A Valid Entry Point');
class AnnualRevenue {
function computeAnnualRevenueINR($bean, $event, $arguments){
$bean->annual_revenue_inr = $bean->annual_revenue * 100;
$bean->load_relationship('opportunities');
$opportunities = $bean->opportunities->getBeans();
//Every account has multiple opportunities i.e array of Opportunity
foreach($opportunities as $opportunity){
$bean->annual_revenue_inr = $bean->annual_revenue_inr + $opportunity->amount;
}
}
}
?>
上面的代码现在应该将annual_revenue乘以100,并将所有相关的机会与它相加,以计算year_revenue_inr的值。