1

我有一个应用程序,我可以在其中创建一个项目,并且在项目内部,我可以创建任务。对于每个任务,我可以添加一个百分比并计算一个价格(示例图 1)。

然后我有一个报告页面,我想在其中计算同一项目的所有任务的所有价格(示例图 2)。现在我使用了一个逻辑代码,该代码适用于同一项目中的其他总和(示例图 3),但是当我将此代码用于所有任务的百分比总和时,它无法正常工作(示例图 4,在这张图片中我显示数组不是总和)

图片1:
图片1

图 2(但这里的问题是只有第一个数组是正确的,而另一个不是):
图 2(但这里的问题是只有第一个数组是正确的,其他的不是)

图片 3(相同的代码 - 效果很好):
图 3(相同的代码 - 效果很好)

代码:

if($projectTaskIds && count($projectTaskIds)){

    $realTime = 0;
    $estimateCost = 0;
    $itemName = '';
    $realCost = 0;
    $realCostArr = array();
    $totalCalEArr = array();

    foreach ($projectTaskIds as $key => $projectTaskId) {

        // echo $projectTaskId['id'];
        // echo "<br>";
        $calB = 0;
        $calC = 0;
        
        $itemtotal = 0;
        $items = get_items_by_type('task', $projectTaskId['id']);
        if($items && count($items) > 0){
            $itemNo = 1;
            foreach ($items as $key => $item) {
                $itemtotal += ($item["rate"]*$item["qty"]);
                $itemName .= '<div>'.$itemNo.'.'.$item["description"].' <b>('.round($item["qty"]).')</b>'.'</div>';
                $itemNo++;
            }
        }
            
        // =============== the code that doesn't work ============
        $calF = get_task_user_hourly_rate($assignees_id[0]); // hourly_rate
        $calG = get_task_custom_billable_amount($aRow['id']);
             
        if($aRow['task_item_percentage']){
            $calE = ((round($itemtotal + ((($calF * $aRow['task_duration'] / 60))))*($aRow['task_item_percentage']/100)))+(round($itemtotal + (($calF * $aRow['task_duration'] / 60)))); // additionalPriceTotal
         
        }
        else {
            $calE = ($itemtotal+$aRow['task_item_manual_total_price']-$itemtotal);
        }
        $totalCalE = $calE;
        $totalCalEArr[] = $totalCalE;
        
        if($totalCalEArr && count($totalCalEArr) > 0){
            $totalsCalEaMount = 0;
            foreach ($totalCalEArr as $key => $totalvalue) {
                $totalsCalEaMount += $totalvalue;
            }
        }
        // =============== the code that doesnt work ============

        $realTime += get_calc_task_real_logged_time($projectTaskId['id']);
        $calB = get_task_custom_billable_amount($projectTaskId['id']);
        
        if($aRow['task_item_percentage']){
            $calC = ((round($itemtotal + ((($calF * $aRow['task_duration'] / 60))))*($aRow['task_item_percentage']/100)))+(round($itemtotal + (($calF * $aRow['task_duration'] / 60)))); // additionalPriceTotal
        } else {
            $calC = ($itemtotal+$aRow['task_item_manual_total_price']-$itemtotal);
        }

        $estimateCost += round($itemtotal+($calA * $aRow['task_duration'] / 60)); 
        $realCost = round($itemtotal+$calB);
        
//           if($calC = 0){  $realCost = round($itemtotal+$calB);} else { $realCost = round($itemtotal+$calB+$calC);
// }
        $realCostArr[] = $realCost;

    }
    if($realCostArr && count($realCostArr) > 0){
        $realCostAmount = 0;
        foreach ($realCostArr as $key => $reslcostvalue) {
            $realCostAmount += $reslcostvalue;
        }
    }
}

$outputName = '';
$relName = '';
$row[] = $loop;

if ($aRow['rel_name']) {
    $relName = task_rel_name($aRow['rel_name'], $aRow['rel_id'], $aRow['rel_type']);
    $link = task_rel_link($aRow['rel_id'], $aRow['rel_type']);
    $relName = '<span class="hide"> - </span><a class="text-muted task-table-related" data-toggle="tooltip" title="' . _l('task_related_to') . '" href="' . $link . '">' . $relName . '</a>';
}

$row[] = $relName;
$row[] = count($projectTaskIds);
$row[] = $itemName;
$row[] = $aRow['task_duration']*count($projectTaskIds);
$row[] = round($realTime/60);
$row[] = round($estimateCost);
$row[] = round($realCostAmount);
$row[] = '';
$row[] = $totalCalEArr; // display as array or $row[] = $totalsCalEaMount; to display as a sum
$output['aaData'][] = $row;
$loop++;
}
4

0 回答 0