更新产品价格

时间:2019-05-21 08:44:37

标签: crm sugarcrm suitecrm

基本上,我有两个模块aos_products和fsubscriptions,我想做的是在aos_products模块中的价格发生更改或更新时更新fsubscription模块中的产品价格。

我在

中尝试使用逻辑钩子将一些示例代码组合在一起以实现此目的,但仍然无法正常工作。我在这里想念什么?

已更新     

    class UpdateProductPrices
    {

        function do_UpdateProductPrices($bean, $events, $args)
        {
            global $db;

            $package_price = "SELECT price FROM aos_products WHERE deleted = 0 AND parent_type = 'FSUBSCRIPTIONS' AND parent_id = '{$this->bean->id}'";
            $GLOBALS['log']->fatal($package_price);

            $package_price = is_numeric($package_price) ? (float)$package_price : 0;

            if(!empty($package_price)){
                $bean->product_product_unit_price0 = $package_price->price;
                $bean->product_product_unit_price1 = $package_price->price;

            } else {
                $GLOBALS['log']->fatal('Product not found.');
            }
         }
      }

我将aos_products的价格更改为$ 150: enter image description here

但是在fsubscription模块中它没有改变,它仍然是$ 100: enter image description here

1 个答案:

答案 0 :(得分:1)

第一个$package_price是一个永远不会执行的查询定义,因此不会有任何数据。

第二,您应该真正考虑将suitecrm pQuery与准备好的语句数组作为参数,而不是直接在查询中使用它(sql注入)。松开类似pQuery($query, ["arg1", "arg2"])之类的内容,查询将包含?个符号,您需要在其中替换参数(遵守顺序)。

如果要在aos_products更新上启动,则需要为aos_products模块添加一个after_save逻辑钩子,因为该钩子正在被编辑。

这意味着do_UpdateProductPrices($bean, $events, $args)在此行中的$ bean参数将代表PRODUCT而不是fsubscription

第三,您需要先验证价格是否已更新if($bean->fetched_row['price']!=$bean->price){,然后再进行更新。 最后,让我们尝试一下此代码(请编辑,因为我不知道bean名称)

        function do_UpdateProductPrices($bean, $events, $args)
        {
            global $db;
            if($bean->fetched_row['price']!=$bean->price){
            //means that the price has changed
                $fsubscriptionBean = new fsubscription();
                $fsubscriptionBean->retrieve($bean->parent_id);
                $fsubscriptionBean->product_product_unit_price0 = $bean->price;
                $fsubscriptionBean->product_product_unit_price1 = $bean->price;

         }