Cost-Benefit-Projection/admin/helpers/sum.php

1578 lines
76 KiB
PHP

<?php
/*----------------------------------------------------------------------------------| www.giz.de |----/
Deutsche Gesellschaft für International Zusammenarbeit (GIZ) Gmb
/-------------------------------------------------------------------------------------------------------/
@version 3.5.x
@build 27th May, 2022
@created 15th June, 2012
@package Cost Benefit Projection
@subpackage sum.php
@author Llewellyn van der Merwe <http://www.vdm.io>
@owner Deutsche Gesellschaft für International Zusammenarbeit (GIZ) Gmb
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
/-------------------------------------------------------------------------------------------------------/
Cost Benefit Projection Tool.
/------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
/**
* Calculation Class
**/
// uncomment for dev
error_reporting(0);
// make sure to include the negative finder file
include_once 'negativefinder.php';
class Sum
{
public $totals;
public $items;
public $interventions;
// set some basic defaults
protected $company;
protected $genders = array('male' => 'males','female' => 'females');
protected $ages = array('15-19','20-24','25-29','30-34','35-39','40-44','45-49','50-54','55-59','60-64');
public function __construct($data = null)
{
// set data to class
if ($data)
{
$this->company = $data;
// first set the user
if ($this->setCompany())
{
// do the calculation for days lost
if($this->setDaysLost())
{
// do the calculation for cost
if($this->setCost())
{
// do the calculation for interventions
if($this->setInterventions())
{
return true;
}
}
}
}
}
return false;
}
public function setCompany()
{
if(CostbenefitprojectionHelper::checkObject($this->company))
{
// main switch
$usecountry = false;
// public switch
if (isset($this->company->public))
{
$usecountry = true;
$cKey = 'id';
}
else
{
$cKey = 'country';
}
// set array of json objects to convert to array
$jsonObjects = array('percentmale','percentfemale','country_percentmale','country_percentfemale','country_maledeath','country_femaledeath','country_maleyld','country_femaleyld');
$removeArray = array(
'asset_id','not_required','published','created_by','country_created_by','country_created','country_version','country_hits','country_ordering',
'modified_by','country_asset_id','created','modified','version','hits','ordering','country_published','country_modified_by','country_modified','country_maledeath','country_femaledeath','country_maleyld','country_femaleyld',
'idCompanyScaling_factorC',$cKey.'CountryHealth_dataB',$cKey.'CountryHealth_dataBB','causesrisksIdCauseriskG','causesrisksIdCauseriskGG','idCompanyInterventionD','countryCountryInterventionDD','idCountryInterventionDD');
foreach ($jsonObjects as $jsonObject)
{
if (isset($this->company->$jsonObject) && CostbenefitprojectionHelper::isJson($this->company->$jsonObject))
{
// convert to array
$array = json_decode($this->company->$jsonObject,true);
if (CostbenefitprojectionHelper::checkArray($array))
{
$this->company->$jsonObject = array();
foreach ($array as $option => $values)
{
if (CostbenefitprojectionHelper::checkArray($values))
{
foreach ($values as $nr => $value)
{
$this->company->{$jsonObject}[$nr][$option] = $value;
}
}
}
}
}
}
// if company has not causerisks selected fall back on country
if ($usecountry || (isset($this->company->causesrisks) && !CostbenefitprojectionHelper::checkArray($this->company->causesrisks)) || $this->company->department == 1)
{
$this->company->causesrisks = $this->company->country_causesrisks;
$this->company->medical_turnovers_males = $this->company->males * ($this->company->country_medical_turnovers/100000);
$this->company->medical_turnovers_females = $this->company->females * ($this->company->country_medical_turnovers/100000);
$this->company->sick_leave_males = $this->company->males * $this->company->country_sick_leave;
$this->company->sick_leave_females = $this->company->females * $this->company->country_sick_leave;
$this->company->datayear = $this->company->country_datayear;
$this->company->total_healthcare = ($this->company->country_healthcare/100) * $this->company->total_salary;
$this->company->working_days = $this->company->country_working_days;
$this->company->productivity_losses = $this->company->country_productivity_losses;
$usecountry = true;
}
// percent sorting
$percentSort = array('percentmale','percentfemale','country_percentmale','country_percentfemale');
foreach ($percentSort as $sort)
{
$point = $sort;
if (isset($this->company->$sort) && !CostbenefitprojectionHelper::checkArray($this->company->$sort) && strpos($sort, 'country') === false)
{
$sort = 'country_'.$sort;
}
if (isset($this->company->$sort) && CostbenefitprojectionHelper::checkArray($this->company->$sort))
{
$bucket = array();
foreach ($this->company->$sort as $value)
{
$bucket[$value['age']] = (int) $value['percent'];
}
$this->company->$point = $bucket;
}
}
// country totals sorting
$countrySort = array(
'country_maledeath' => array('gender' => 'male', 'type' => 'death'),
'country_femaledeath' => array('gender' => 'female', 'type' => 'death'),
'country_maleyld' => array('gender' => 'male', 'type' => 'yld'),
'country_femaleyld' => array('gender' => 'female', 'type' => 'yld'));
$this->company->country_yld = 0;
$this->company->country_death = 0;
foreach ($countrySort as $sort => $tar)
{
if (isset($this->company->$sort) && CostbenefitprojectionHelper::checkArray($this->company->$sort))
{
foreach ($this->company->$sort as $value)
{
if ($this->company->datayear == $value['year'])
{
$this->company->{'country_'.$tar['type']} += $value['number'];
}
}
}
}
// country health totals sorting
$specialSort = array('maledeath','maleyld','femaledeath','femaleyld');
$keepData = array();
if (isset($this->company->{$cKey.'CountryHealth_dataB'}) && CostbenefitprojectionHelper::checkArray($this->company->{$cKey.'CountryHealth_dataB'}) && !$usecountry)
{
$healthBucket = array();
foreach ($this->company->{$cKey.'CountryHealth_dataB'} as $healthData)
{
$healthBucket[$healthData->causerisk] = new stdClass();
foreach ($specialSort as $sort)
{
if (isset($healthData->$sort) && CostbenefitprojectionHelper::isJson($healthData->$sort))
{
// convert to array
$array = json_decode($healthData->$sort,true);
if (CostbenefitprojectionHelper::checkArray($array))
{
foreach ($array as $option => $values)
{
if (CostbenefitprojectionHelper::checkArray($values))
{
foreach ($values as $nr => $value)
{
$healthBucket[$healthData->causerisk]->{$sort}[$nr][$option] = $value;
}
}
}
}
}
}
// number sorting
foreach ($specialSort as $sort)
{
if (isset($healthBucket[$healthData->causerisk]->$sort) && CostbenefitprojectionHelper::checkArray($healthBucket[$healthData->causerisk]->$sort))
{
$bucket = array();
foreach ($healthBucket[$healthData->causerisk]->$sort as $value)
{
if (CostbenefitprojectionHelper::checkArray($value))
{
$buket[$value['age']] = $value['number'];
}
}
$healthBucket[$healthData->causerisk]->$sort = $buket;
}
}
// check if we should keep any other data
if (CostbenefitprojectionHelper::checkArray($keepData))
{
// set data to keep
foreach ($keepData as $keep)
{
$healthBucket[$healthData->causerisk]->$keep = $healthData->$keep;
}
}
}
}
elseif (isset($this->company->{$cKey.'CountryHealth_dataBB'}) && CostbenefitprojectionHelper::checkArray($this->company->{$cKey.'CountryHealth_dataBB'}) && $usecountry)
{
$healthBucket = array();
foreach ($this->company->{$cKey.'CountryHealth_dataBB'} as $healthData)
{
$healthBucket[$healthData->causerisk] = new stdClass();
foreach ($specialSort as $sort)
{
if (isset($healthData->$sort) && CostbenefitprojectionHelper::isJson($healthData->$sort))
{
// convert to array
$array = json_decode($healthData->$sort,true);
if (CostbenefitprojectionHelper::checkArray($array))
{
foreach ($array as $option => $values)
{
if (CostbenefitprojectionHelper::checkArray($values))
{
foreach ($values as $nr => $value)
{
$healthBucket[$healthData->causerisk]->{$sort}[$nr][$option] = $value;
}
}
}
}
}
}
// number sorting
foreach ($specialSort as $sort)
{
if (isset($healthBucket[$healthData->causerisk]->$sort) && CostbenefitprojectionHelper::checkArray($healthBucket[$healthData->causerisk]->$sort))
{
$bucket = array();
foreach ($healthBucket[$healthData->causerisk]->$sort as $value)
{
if (CostbenefitprojectionHelper::checkArray($value))
{
$buket[$value['age']] = $value['number'];
}
}
$healthBucket[$healthData->causerisk]->$sort = $buket;
}
}
// check if we should keep any other data
if (CostbenefitprojectionHelper::checkArray($keepData))
{
// set data to keep
foreach ($keepData as $keep)
{
$healthBucket[$healthData->causerisk]->$keep = $healthData->$keep;
}
}
}
}
// set health data
$this->company->healthData = $healthBucket;
unset($healthBucket);
// set company scaling
$keepData = array(
'yld_scaling_factor_males',
'yld_scaling_factor_females',
'mortality_scaling_factor_males',
'mortality_scaling_factor_females',
'presenteeism_scaling_factor_males',
'presenteeism_scaling_factor_females',
'health_scaling_factor'
);
$scalingBucket = array();
if (isset($this->company->idCompanyScaling_factorC) && CostbenefitprojectionHelper::checkArray($this->company->idCompanyScaling_factorC))
{
// use the compony set values
foreach ($this->company->idCompanyScaling_factorC as $scalingFactor)
{
$scalingBucket[$scalingFactor->causerisk] = new stdClass();
foreach ($keepData as $keep)
{
$scalingBucket[$scalingFactor->causerisk]->$keep = $scalingFactor->$keep;
}
}
}
else
{
// set defaults
foreach ($this->company->causesrisks as $scalingFactor)
{
$scalingBucket[$scalingFactor] = new stdClass();
foreach ($keepData as $keep)
{
$scalingBucket[$scalingFactor]->$keep = 1;
}
}
}
// set scaling factors
$this->company->scalingFactors = $scalingBucket;
unset($scalingBucket);
// set Cause/Risk Details
$keepData = array(
'id',
'ref',
'name',
'alias',
'category',
'description'
);
if (isset($this->company->causesrisksIdCauseriskG) && CostbenefitprojectionHelper::checkArray($this->company->causesrisksIdCauseriskG) && !$usecountry)
{
foreach ($this->company->causesrisksIdCauseriskG as $causesrisks)
{
$this->items[$causesrisks->id] = new stdClass();
$this->items[$causesrisks->id]->details = new stdClass();
foreach ($keepData as $keep)
{
$this->items[$causesrisks->id]->details->$keep = $causesrisks->$keep;
}
}
}
elseif (isset($this->company->causesrisksIdCauseriskGG) && CostbenefitprojectionHelper::checkArray($this->company->causesrisksIdCauseriskGG) && $usecountry)
{
foreach ($this->company->causesrisksIdCauseriskGG as $causesrisks)
{
$this->items[$causesrisks->id] = new stdClass();
$this->items[$causesrisks->id]->details = new stdClass();
foreach ($keepData as $keep)
{
$this->items[$causesrisks->id]->details->$keep = $causesrisks->$keep;
}
}
}
// set company insterventions
$keepData = array(
'id',
'name',
'coverage',
'duration',
'description',
'reference',
'share',
'type'
);
$insterventionBucket = array();
if (isset($this->company->idCompanyInterventionD) && CostbenefitprojectionHelper::checkArray($this->company->idCompanyInterventionD))
{
foreach ($this->company->idCompanyInterventionD as $key => $intervention)
{
$insterventionBucket[$key] = new stdClass();
foreach ($keepData as $keep)
{
$insterventionBucket[$key]->$keep = $intervention->$keep;
}
// load the most important part, the actual intervention data
$array = json_decode($intervention->intervention,true);
if (CostbenefitprojectionHelper::checkArray($array))
{
$insterventionBucket[$key]->data = array();
foreach ($array as $option => $values)
{
if (CostbenefitprojectionHelper::checkArray($values))
{
foreach ($values as $nr => $value)
{
if ('causerisk' == $option)
{
$insterventionBucket[$key]->data[$nr]['id'] = $value;
$insterventionBucket[$key]->data[$nr]['allias'] = CostbenefitprojectionHelper::getVar('causerisk', $value, 'id', 'alias');
}
else
{
// set values
$insterventionBucket[$key]->data[$nr][$option] = $value;
}
}
}
}
}
}
}
elseif ($usecountry || (isset($this->company->{$cKey.'CountryInterventionDD'}) && CostbenefitprojectionHelper::checkArray($this->company->{$cKey.'CountryInterventionDD'})))
{
foreach ($this->company->{$cKey.'CountryInterventionDD'} as $key => $intervention)
{
$insterventionBucket[$key] = new stdClass();
foreach ($keepData as $keep)
{
$insterventionBucket[$key]->$keep = $intervention->$keep;
}
// load the most important part, the actual intervention data
$array = json_decode($intervention->intervention,true);
if (CostbenefitprojectionHelper::checkArray($array))
{
$insterventionBucket[$key]->data = array();
foreach ($array as $option => $values)
{
if (CostbenefitprojectionHelper::checkArray($values))
{
foreach ($values as $nr => $value)
{
if ('causerisk' == $option)
{
$insterventionBucket[$key]->data[$nr]['id'] = $value;
$insterventionBucket[$key]->data[$nr]['allias'] = CostbenefitprojectionHelper::getVar('causerisk', $value, 'id', 'alias');
}
else
{
// set values
$insterventionBucket[$key]->data[$nr][$option] = $value;
}
}
}
}
}
}
}
// set intervention to company data
$this->company->interventions = $insterventionBucket;
unset($insterventionBucket);
// remove undeeded values
if (CostbenefitprojectionHelper::checkArray($removeArray))
{
foreach ($removeArray as $remove)
{
// remove value if set
if (isset($this->company->$remove))
{
unset($this->company->$remove);
}
}
}
return true;
}
return false;
}
/**
* Do calculation for days lost.
*
* @return array
*
*/
protected function setDaysLost()
{
if(CostbenefitprojectionHelper::checkArray($this->company->causesrisks))
{
// set global totals morbidity
$this->totals['total_morbidity_raw'] = 0;
$this->totals['total_morbidity_interim'] = 0;
$this->totals['total_morbidity_scaled'] = 0;
$this->totals['total_morbidity_unscaled'] = 0;
// set global totals mortality
$this->totals['total_mortality_raw'] = 0;
$this->totals['total_mortality_interim'] = 0;
$this->totals['total_mortality_scaled'] = 0;
$this->totals['total_mortality_unscaled'] = 0;
// set global totals presenteesim
$this->totals['total_presenteeism_scaled'] = 0;
$this->totals['total_presenteeism_unscaled'] = 0;
// set global totals day_lost_mortality
$this->totals['total_days_lost_mortality_scaled'] = 0;
$this->totals['total_days_lost_mortality_unscaled'] = 0;
// set global totals day_lost
$this->totals['total_days_lost_scaled'] = 0;
$this->totals['total_days_lost_unscaled'] = 0;
// set global totals estimated_burden
$this->totals['total_estimated_burden'] = 0;
// work with each gender
foreach($this->genders as $gender => $genders)
{
// gender totals morbidity raw
$this->totals[$genders.'_morbidity_raw'] = 0;
$this->totals[$genders.'_mortality_raw'] = 0;
$this->totals[$genders.'_morbidity_interim'] = 0;
$this->totals[$genders.'_mortality_interim'] = 0;
// gender totals morbidity
$this->totals[$genders.'_morbidity_scaled'] = 0;
$this->totals[$genders.'_morbidity_unscaled'] = 0;
// gender totals mortality
$this->totals[$genders.'_mortality_scaled'] = 0;
$this->totals[$genders.'_mortality_unscaled'] = 0;
// gender totals presenteeism
$this->totals[$genders.'_presenteeism_scaled'] = 0;
$this->totals[$genders.'_presenteeism_unscaled'] = 0;
// gender totals day_lost_mortality
$this->totals[$genders.'_days_lost_mortality_scaled'] = 0;
$this->totals[$genders.'_days_lost_mortality_unscaled'] = 0;
// gender totals day_lost
$this->totals[$genders.'_days_lost_scaled'] = 0;
$this->totals[$genders.'_days_lost_unscaled'] = 0;
}
///////////////////////////////////////////////////////
// ------ set morbidity for each cause/risk ------ //
///////////////////////////////////////////////////////
// set morbidity_raw
foreach($this->company->causesrisks as $id)
{
// work with each gender
foreach($this->genders as $gender => $genders)
{
$this->items[$id]->$gender = new stdClass();
// work with each age group
foreach($this->ages as $age)
{
if (isset($this->company->{'percent'.$gender}[$age]))
{
// set each gender and age group
$this->items[$id]->$gender->$age = new stdClass();
// continue only if we have a value
$goodToGo = true;
// fix missing values
if(!isset($this->company->healthData[$id]->{$gender.'yld'}[$age]))
{
$this->company->healthData[$id]->{$gender.'yld'}[$age] = 0;
$goodToGo = false;
}
// set the YLD
$this->items[$id]->$gender->$age->yld = $this->company->healthData[$id]->{$gender.'yld'}[$age];
if ($goodToGo)
{
// set the estimated_burden of this age group & gender & cause
$this->items[$id]->$gender->$age->estimated_burden = ($this->items[$id]->$gender->$age->yld / $this->company->country_yld)*100;
if (!isset($this->items[$id]->subtotal_estimated_burden))
{
$this->items[$id]->subtotal_estimated_burden = $this->items[$id]->$gender->$age->estimated_burden;
}
else
{
$this->items[$id]->subtotal_estimated_burden += $this->items[$id]->$gender->$age->estimated_burden;
}
// set the totals for estimated_burden
$this->totals['total_estimated_burden'] = $this->totals['total_estimated_burden'] + $this->items[$id]->$gender->$age->estimated_burden;
}
else
{
$this->items[$id]->subtotal_estimated_burden = 0;
}
// set the morbidity raw
$this->items[$id]->$gender->$age->morbidity_raw = ( $this->company->healthData[$id]->{$gender.'yld'}[$age]/100000 )
* $this->company->$genders * ($this->company->{'percent'.$gender}[$age]/100);
// set total for morbidity_raw
$this->totals['total_morbidity_raw'] = $this->totals['total_morbidity_raw'] + $this->items[$id]->$gender->$age->morbidity_raw;
$this->totals[$genders.'_morbidity_raw'] = $this->totals[$genders.'_morbidity_raw'] + $this->items[$id]->$gender->$age->morbidity_raw;
}
}
}
}
// check estimated burden
if (100 < $this->totals['total_estimated_burden'])
{
foreach ($this->items as $item)
{
if (isset($item->subtotal_estimated_burden) && 0 != $item->subtotal_estimated_burden)
{
// adjust the subtotal to 100 %
$item->subtotal_estimated_burden = ($item->subtotal_estimated_burden * 100) / $this->totals['total_estimated_burden'];
}
}
// bring down the estimate to 100 %
$this->totals['total_estimated_burden'] = 100;
}
// set morbidity_unscaled & morbidity_interim
foreach($this->company->causesrisks as $id)
{
// work with each gender
foreach($this->genders as $gender => $genders)
{
// work with each age group
foreach($this->ages as $age)
{
if (isset($this->company->{'percent'.$gender}[$age]))
{
// set each gender and age group morbidity_unscaled
$this->items[$id]->$gender->$age->morbidity_unscaled = $this->items[$id]->$gender->$age->morbidity_raw
* $this->company->{'sick_leave_'.$genders} / $this->totals[$genders.'_morbidity_raw'];
// set total each cause/risk morbidity_unscaled
if (!isset($this->items[$id]->subtotal_morbidity_unscaled))
{
$this->items[$id]->subtotal_morbidity_unscaled = $this->items[$id]->$gender->$age->morbidity_unscaled;
}
else
{
$this->items[$id]->subtotal_morbidity_unscaled += $this->items[$id]->$gender->$age->morbidity_unscaled;
}
// set total each cause/risk per gender morbidity_unscaled
if (!isset($this->items[$id]->{$gender.'_morbidity_unscaled'}))
{
$this->items[$id]->{$gender.'_morbidity_unscaled'} = $this->items[$id]->$gender->$age->morbidity_unscaled;
}
else
{
$this->items[$id]->{$gender.'_morbidity_unscaled'} += $this->items[$id]->$gender->$age->morbidity_unscaled;
}
// set total for morbidity_unscaled per gender
$this->totals[$genders.'_morbidity_unscaled'] = $this->totals[$genders.'_morbidity_unscaled'] + $this->items[$id]->$gender->$age->morbidity_unscaled;
// set total for morbidity_unscaled
$this->totals['total_morbidity_unscaled'] = $this->totals['total_morbidity_unscaled'] + $this->items[$id]->$gender->$age->morbidity_unscaled;
// set the basic department
if($this->company->department == 2)
{
// set each gender and age group
$this->items[$id]->$gender->$age->morbidity_interim = $this->items[$id]->$gender->$age->morbidity_unscaled * $this->company->scalingFactors[$id]->{'yld_scaling_factor_'.$genders};
}
else
{
// set each gender and age group
$this->items[$id]->$gender->$age->morbidity_interim = $this->items[$id]->$gender->$age->morbidity_unscaled * 1;
}
// set total for morbidity_interim
$this->totals['total_morbidity_interim'] = $this->totals['total_morbidity_interim'] + $this->items[$id]->$gender->$age->morbidity_interim;
$this->totals[$genders.'_morbidity_interim'] = $this->totals[$genders.'_morbidity_interim'] + $this->items[$id]->$gender->$age->morbidity_interim;
// set the basic department
if($this->company->department == 2)
{
// set each gender and age group
$this->items[$id]->$gender->$age->presenteeism_unscaled = $this->items[$id]->$gender->$age->morbidity_unscaled
* $this->company->country_presenteeism;
}
else
{
// set each gender and age group
$this->items[$id]->$gender->$age->presenteeism_unscaled = $this->items[$id]->$gender->$age->morbidity_unscaled
* $this->company->country_presenteeism * 1;
}
// set total each cause/risk presenteeism_unscaled
if (!isset($this->items[$id]->subtotal_presenteeism_unscaled))
{
$this->items[$id]->subtotal_presenteeism_unscaled = $this->items[$id]->$gender->$age->presenteeism_unscaled;
}
else
{
$this->items[$id]->subtotal_presenteeism_unscaled += $this->items[$id]->$gender->$age->presenteeism_unscaled;
}
// set total each cause/risk per gender morbidity_unscaled
if (!isset($this->items[$id]->{$gender.'_presenteeism_unscaled'}))
{
$this->items[$id]->{$gender.'_presenteeism_unscaled'} = $this->items[$id]->$gender->$age->presenteeism_unscaled;
}
else
{
$this->items[$id]->{$gender.'_presenteeism_unscaled'} += $this->items[$id]->$gender->$age->presenteeism_unscaled;
}
// set total for presenteeism_unscaled per gender
$this->totals[$genders.'_presenteeism_unscaled'] = $this->totals[$genders.'_presenteeism_unscaled'] + $this->items[$id]->$gender->$age->presenteeism_unscaled;
// set total for presenteeism_unscaled
$this->totals['total_presenteeism_unscaled'] = $this->totals['total_presenteeism_unscaled'] + $this->items[$id]->$gender->$age->presenteeism_unscaled;
}
}
}
}
// set morbidity_scaled
foreach($this->company->causesrisks as $id)
{
// work with each gender
foreach($this->genders as $gender => $genders)
{
// work with each age group
foreach($this->ages as $age)
{
if (isset($this->company->{'percent'.$gender}[$age]))
{
// set each gender and age group
$this->items[$id]->$gender->$age->morbidity_scaled = $this->items[$id]->$gender->$age->morbidity_interim
* $this->company->{'sick_leave_'.$genders} / $this->totals[$genders.'_morbidity_interim'];
// set total each cause/risk
if (!isset($this->items[$id]->subtotal_morbidity_scaled))
{
$this->items[$id]->subtotal_morbidity_scaled = $this->items[$id]->$gender->$age->morbidity_scaled;
}
else
{
$this->items[$id]->subtotal_morbidity_scaled += $this->items[$id]->$gender->$age->morbidity_scaled;
}
// set total each cause/risk per gender
if (!isset($this->items[$id]->{$gender.'_morbidity_scaled'}))
{
$this->items[$id]->{$gender.'_morbidity_scaled'} = $this->items[$id]->$gender->$age->morbidity_scaled;
}
else
{
$this->items[$id]->{$gender.'_morbidity_scaled'} += $this->items[$id]->$gender->$age->morbidity_scaled;
}
// set total for morbidity_scaled per gender
$this->totals[$genders.'_morbidity_scaled'] = $this->totals[$genders.'_morbidity_scaled'] + $this->items[$id]->$gender->$age->morbidity_scaled;
// set total for morbidity_scaled
$this->totals['total_morbidity_scaled'] = $this->totals['total_morbidity_scaled'] + $this->items[$id]->$gender->$age->morbidity_scaled;
// set the basic department
if($this->company->department == 2)
{
// set each gender and age group
$this->items[$id]->$gender->$age->presenteeism_scaled = $this->items[$id]->$gender->$age->morbidity_scaled
* $this->company->country_presenteeism * $this->company->scalingFactors[$id]->{'presenteeism_scaling_factor_'.$genders};
}
else
{
// set each gender and age group
$this->items[$id]->$gender->$age->presenteeism_scaled = $this->items[$id]->$gender->$age->morbidity_scaled
* $this->company->country_presenteeism * 1;
}
// set total each cause/risk presenteeism_scaled
if (!isset($this->items[$id]->subtotal_presenteeism_scaled))
{
$this->items[$id]->subtotal_presenteeism_scaled = $this->items[$id]->$gender->$age->presenteeism_scaled;
}
else
{
$this->items[$id]->subtotal_presenteeism_scaled += $this->items[$id]->$gender->$age->presenteeism_scaled;
}
// set total each cause/risk per gender morbidity_scaled
if (!isset($this->items[$id]->{$gender.'_presenteeism_scaled'}))
{
$this->items[$id]->{$gender.'_presenteeism_scaled'} = $this->items[$id]->$gender->$age->presenteeism_scaled;
}
else
{
$this->items[$id]->{$gender.'_presenteeism_scaled'} += $this->items[$id]->$gender->$age->presenteeism_scaled;
}
// set total for presenteeism_scaled per gender
$this->totals[$genders.'_presenteeism_scaled'] = $this->totals[$genders.'_presenteeism_scaled'] + $this->items[$id]->$gender->$age->presenteeism_scaled;
// set total for presenteeism_scaled
$this->totals['total_presenteeism_scaled'] = $this->totals['total_presenteeism_scaled'] + $this->items[$id]->$gender->$age->presenteeism_scaled;
}
}
}
}
///////////////////////////////////////////////////////
// ------ set mortality for each cause/risk ------ //
///////////////////////////////////////////////////////
// set mortality_raw
foreach($this->company->causesrisks as $id)
{
// work with each gender
foreach($this->genders as $gender => $genders)
{
// work with each age group
foreach($this->ages as $age)
{
if (isset($this->company->{'percent'.$gender}[$age]))
{
// set each gender and age group
// fix missing values
if(!isset($this->company->healthData[$id]->{$gender.'death'}[$age]))
{
$this->company->healthData[$id]->{$gender.'death'}[$age] = 0;
}
$this->items[$id]->$gender->$age->death = $this->company->healthData[$id]->{$gender.'death'}[$age];
$this->items[$id]->$gender->$age->mortality_raw = ( $this->company->healthData[$id]->{$gender.'death'}[$age]/100000 )
* $this->company->$genders * ($this->company->{'percent'.$gender}[$age]/100);
// set total for mortality_raw
$this->totals['total_mortality_raw'] = $this->totals['total_mortality_raw'] + $this->items[$id]->$gender->$age->mortality_raw;
$this->totals[$genders.'_mortality_raw'] = $this->totals[$genders.'_mortality_raw'] + $this->items[$id]->$gender->$age->mortality_raw;
}
}
}
}
// set mortality_unscaled & mortality_interim
foreach($this->company->causesrisks as $id)
{
// work with each gender
foreach($this->genders as $gender => $genders)
{
// work with each age group
foreach($this->ages as $age)
{
if (isset($this->company->{'percent'.$gender}[$age]))
{
// set each gender and age group
$this->items[$id]->$gender->$age->mortality_unscaled = $this->items[$id]->$gender->$age->mortality_raw
* $this->company->{'medical_turnovers_'.$genders} / $this->totals[$genders.'_mortality_raw'];
// set total each cause/risk
if(!isset($this->items[$id]->subtotal_mortality_unscaled))
{
$this->items[$id]->subtotal_mortality_unscaled = $this->items[$id]->$gender->$age->mortality_unscaled;
}
else
{
$this->items[$id]->subtotal_mortality_unscaled += $this->items[$id]->$gender->$age->mortality_unscaled;
}
// set total each cause/risk per gender
if(!isset($this->items[$id]->{$gender.'_mortality_unscaled'}))
{
$this->items[$id]->{$gender.'_mortality_unscaled'} = $this->items[$id]->$gender->$age->mortality_unscaled;
}
else
{
$this->items[$id]->{$gender.'_mortality_unscaled'} += $this->items[$id]->$gender->$age->mortality_unscaled;
}
// set total for mortality_unscaled per gender
$this->totals[$genders.'_mortality_unscaled'] = $this->totals[$genders.'_mortality_unscaled'] + $this->items[$id]->$gender->$age->mortality_unscaled;
// set total for mortality_unscaled
$this->totals['total_mortality_unscaled'] = $this->totals['total_mortality_unscaled'] + $this->items[$id]->$gender->$age->mortality_unscaled;
// set the basic department
if($this->company->department == 2)
{
// set each gender and age group
$this->items[$id]->$gender->$age->mortality_interim = $this->items[$id]->$gender->$age->mortality_unscaled * $this->company->scalingFactors[$id]->{'mortality_scaling_factor_'.$genders};
}
else
{
// set each gender and age group
$this->items[$id]->$gender->$age->mortality_interim = $this->items[$id]->$gender->$age->mortality_unscaled * 1;
}
// set total for mortality_interim
$this->totals['total_mortality_interim'] = $this->totals['total_mortality_interim'] + $this->items[$id]->$gender->$age->mortality_interim;
$this->totals[$genders.'_mortality_interim'] = $this->totals[$genders.'_mortality_interim'] + $this->items[$id]->$gender->$age->mortality_interim;
// set each gender and age group days_lost_mortality_unscaled
$this->items[$id]->$gender->$age->days_lost_mortality_unscaled = $this->items[$id]->$gender->$age->mortality_unscaled
* $this->company->working_days * $this->company->productivity_losses;
// set total each cause/risk days_lost_mortality_unscaled
if(!isset($this->items[$id]->subtotal_days_lost_mortality_unscaled))
{
$this->items[$id]->subtotal_days_lost_mortality_unscaled = $this->items[$id]->$gender->$age->days_lost_mortality_unscaled;
}
else
{
$this->items[$id]->subtotal_days_lost_mortality_unscaled += $this->items[$id]->$gender->$age->days_lost_mortality_unscaled;
}
// set total each cause/risk per gender days_lost_mortality_unscaled
if(!isset($this->items[$id]->{$gender.'_days_lost_mortality_unscaled'}))
{
$this->items[$id]->{$gender.'_days_lost_mortality_unscaled'} = $this->items[$id]->$gender->$age->days_lost_mortality_unscaled;
}
else
{
$this->items[$id]->{$gender.'_days_lost_mortality_unscaled'} += $this->items[$id]->$gender->$age->days_lost_mortality_unscaled;
}
// set total for days_lost_mortality_unscaled per gender
$this->totals[$genders.'_days_lost_mortality_unscaled'] = $this->totals[$genders.'_days_lost_mortality_unscaled'] + $this->items[$id]->$gender->$age->days_lost_mortality_unscaled;
// set total for days_lost_mortality_unscaled
$this->totals['total_days_lost_mortality_unscaled'] = $this->totals['total_days_lost_mortality_unscaled'] + $this->items[$id]->$gender->$age->days_lost_mortality_unscaled;
}
}
}
}
// set mortality_scaled
foreach($this->company->causesrisks as $id)
{
// work with each gender
foreach($this->genders as $gender => $genders)
{
// work with each age group
foreach($this->ages as $age)
{
if (isset($this->company->{'percent'.$gender}[$age]))
{
// set each gender and age group
$this->items[$id]->$gender->$age->mortality_scaled = $this->items[$id]->$gender->$age->mortality_interim
* $this->company->{'medical_turnovers_'.$genders} / $this->totals[$genders.'_mortality_interim'];
// set total each cause/risk
if(!isset($this->items[$id]->subtotal_mortality_scaled))
{
$this->items[$id]->subtotal_mortality_scaled = $this->items[$id]->$gender->$age->mortality_scaled;
}
else
{
$this->items[$id]->subtotal_mortality_scaled += $this->items[$id]->$gender->$age->mortality_scaled;
}
// set total each cause/risk per gender
if(!isset($this->items[$id]->{$gender.'_mortality_scaled'}))
{
$this->items[$id]->{$gender.'_mortality_scaled'} = $this->items[$id]->$gender->$age->mortality_scaled;
}
else
{
$this->items[$id]->{$gender.'_mortality_scaled'} += $this->items[$id]->$gender->$age->mortality_scaled;
}
// set total for mortality_scaled per gender
$this->totals[$genders.'_mortality_scaled'] = $this->totals[$genders.'_mortality_scaled'] + $this->items[$id]->$gender->$age->mortality_scaled;
// set total for mortality_scaled
$this->totals['total_mortality_scaled'] = $this->totals['total_mortality_scaled'] + $this->items[$id]->$gender->$age->mortality_scaled;
// set each gender and age group days_lost_mortality_scaled
$this->items[$id]->$gender->$age->days_lost_mortality_scaled = $this->items[$id]->$gender->$age->mortality_scaled
* $this->company->working_days * $this->company->productivity_losses;
// set total each cause/risk days_lost_mortality_scaled
if(!isset($this->items[$id]->subtotal_days_lost_mortality_scaled))
{
$this->items[$id]->subtotal_days_lost_mortality_scaled = $this->items[$id]->$gender->$age->days_lost_mortality_scaled;
}
else
{
$this->items[$id]->subtotal_days_lost_mortality_scaled += $this->items[$id]->$gender->$age->days_lost_mortality_scaled;
}
// set total each cause/risk per gender days_lost_mortality_scaled
if(!isset($this->items[$id]->{$gender.'_days_lost_mortality_scaled'}))
{
$this->items[$id]->{$gender.'_days_lost_mortality_scaled'} = $this->items[$id]->$gender->$age->days_lost_mortality_scaled;
}
else
{
$this->items[$id]->{$gender.'_days_lost_mortality_scaled'} += $this->items[$id]->$gender->$age->days_lost_mortality_scaled;
}
// set total for days_lost_mortality_scaled per gender
$this->totals[$genders.'_days_lost_mortality_scaled'] = $this->totals[$genders.'_days_lost_mortality_scaled'] + $this->items[$id]->$gender->$age->days_lost_mortality_scaled;
// set total for days_lost_mortality_scaled
$this->totals['total_days_lost_mortality_scaled'] = $this->totals['total_days_lost_mortality_scaled'] + $this->items[$id]->$gender->$age->days_lost_mortality_scaled;
}
}
// set gender days lost unscaled per cause/risk
$this->items[$id]->{$gender.'_days_lost_unscaled'} = $this->items[$id]->{$gender.'_morbidity_unscaled'}
+ $this->items[$id]->{$gender.'_days_lost_mortality_unscaled'}
+ $this->items[$id]->{$gender.'_presenteeism_unscaled'};
// set gender days lost scaled per cause/risk
$this->items[$id]->{$gender.'_days_lost_scaled'} = $this->items[$id]->{$gender.'_morbidity_scaled'}
+ $this->items[$id]->{$gender.'_days_lost_mortality_scaled'}
+ $this->items[$id]->subtotal_presenteeism_scaled;
// set gender global total days lost unscaled
$this->totals[$genders.'_days_lost_unscaled'] = $this->totals[$genders.'_days_lost_unscaled']
+ $this->items[$id]->{$gender.'_days_lost_unscaled'};
// set gender global total days lost scaled
$this->totals[$genders.'_days_lost_scaled'] = $this->totals[$genders.'_days_lost_scaled']
+ $this->items[$id]->{$gender.'_days_lost_scaled'};
}
// set subtotal days lost unscaled per cause/risk
$this->items[$id]->{'subtotal_days_lost_unscaled'} = $this->items[$id]->subtotal_morbidity_unscaled
+ $this->items[$id]->subtotal_days_lost_mortality_unscaled
+ $this->items[$id]->subtotal_presenteeism_unscaled;
// set subtotal days lost scaled per cause/risk
$this->items[$id]->{'subtotal_days_lost_scaled'} = $this->items[$id]->subtotal_morbidity_scaled
+ $this->items[$id]->subtotal_days_lost_mortality_scaled
+ $this->items[$id]->subtotal_presenteeism_scaled;
// set global total days lost unscaled
$this->totals['total_days_lost_unscaled'] = $this->totals['total_days_lost_scaled']
+ $this->items[$id]->{'subtotal_days_lost_unscaled'};
// set global total days lost scaled
$this->totals['total_days_lost_scaled'] = $this->totals['total_days_lost_scaled']
+ $this->items[$id]->{'subtotal_days_lost_scaled'};
} return true;
} return false;
}
/**
* Do calculation for cost.
*
* @return array
*
*/
protected function setCost()
{
if(CostbenefitprojectionHelper::checkArray($this->company->causesrisks))
{
// the total cost in Money
$this->totals['total_costmoney_scaled'] = 0;
$this->totals['total_costmoney_unscaled'] = 0;
// set global totals morbidity
$this->totals['total_costmoney_morbidity_scaled'] = 0;
$this->totals['total_costmoney_morbidity_unscaled'] = 0;
// set global totals mortality
$this->totals['total_costmoney_mortality_scaled'] = 0;
$this->totals['total_costmoney_mortality_unscaled'] = 0;
// set global totals presenteesim
$this->totals['total_costmoney_presenteeism_scaled'] = 0;
$this->totals['total_costmoney_presenteeism_unscaled'] = 0;
// the total cost in Values only
$this->totals['total_cost_scaled'] = 0;
$this->totals['total_cost_unscaled'] = 0;
// set global totals morbidity
$this->totals['total_cost_morbidity_scaled'] = 0;
$this->totals['total_cost_morbidity_unscaled'] = 0;
// set global totals mortality
$this->totals['total_cost_mortality_scaled'] = 0;
$this->totals['total_cost_mortality_unscaled'] = 0;
// set global totals presenteesim
$this->totals['total_cost_presenteeism_scaled'] = 0;
$this->totals['total_cost_presenteeism_unscaled'] = 0;
// work with each gender
foreach($this->genders as $gender => $genders)
{
// gender totals morbidity
$this->totals[$genders.'_costmoney_morbidity_scaled'] = 0;
$this->totals[$genders.'_costmoney_morbidity_unscaled'] = 0;
// gender totals mortality
$this->totals[$genders.'_costmoney_mortality_scaled'] = 0;
$this->totals[$genders.'_costmoney_mortality_unscaled'] = 0;
// gender totals presenteeism
$this->totals[$genders.'_costmoney_presenteeism_scaled'] = 0;
$this->totals[$genders.'_costmoney_presenteeism_unscaled'] = 0;
// gender totals
$this->totals[$genders.'_costmoney_scaled'] = 0;
$this->totals[$genders.'_costmoney_unscaled'] = 0;
// gender totals morbidity
$this->totals[$genders.'_cost_morbidity_scaled'] = 0;
$this->totals[$genders.'_cost_morbidity_unscaled'] = 0;
// gender totals mortality
$this->totals[$genders.'_cost_mortality_scaled'] = 0;
$this->totals[$genders.'_cost_mortality_unscaled'] = 0;
// gender totals presenteeism
$this->totals[$genders.'_cost_presenteeism_scaled'] = 0;
$this->totals[$genders.'_cost_presenteeism_unscaled'] = 0;
// gender totals
$this->totals[$genders.'_cost_scaled'] = 0;
$this->totals[$genders.'_cost_unscaled'] = 0;
}
//////////////////////////////////////////////////
// ------ set cost for each cause/risk ------ //
//////////////////////////////////////////////////
// set cost_morbidity
foreach($this->company->causesrisks as $id)
{
// work with each gender
foreach($this->genders as $gender => $genders)
{
// work with each age group
foreach($this->ages as $age)
{
if (isset($this->company->{'percent'.$gender}[$age]))
{
// unscaled ///////////////
// set each gender and age group morbidity_unscaled
$this->items[$id]->$gender->$age->cost_morbidity_unscaled = $this->items[$id]->$gender->$age->morbidity_unscaled
* (( $this->company->total_salary / (( $this->company->males + $this->company->females)
* $this->company->working_days))
+ $this->company->total_healthcare / $this->totals['total_morbidity_unscaled']);
// set total each cause/risk cost_morbidity_unscaled
if(!isset($this->items[$id]->subtotal_cost_morbidity_unscaled))
{
$this->items[$id]->subtotal_cost_morbidity_unscaled = $this->items[$id]->$gender->$age->cost_morbidity_unscaled;
}
else
{
$this->items[$id]->subtotal_cost_morbidity_unscaled += $this->items[$id]->$gender->$age->cost_morbidity_unscaled;
}
// set total each cause/risk per gender cost_morbidity_unscaled
if(!isset($this->items[$id]->{$gender.'_cost_morbidity_unscaled'}))
{
$this->items[$id]->{$gender.'_cost_morbidity_unscaled'} = $this->items[$id]->$gender->$age->cost_morbidity_unscaled;
}
else
{
$this->items[$id]->{$gender.'_cost_morbidity_unscaled'} += $this->items[$id]->$gender->$age->cost_morbidity_unscaled;
}
// set total for cost_morbidity_unscaled
$this->totals['total_cost_morbidity_unscaled'] = $this->totals['total_cost_morbidity_unscaled'] + $this->items[$id]->$gender->$age->cost_morbidity_unscaled;
// set total for cost_morbidity_unscaled per gender
$this->totals[$genders.'_cost_morbidity_unscaled'] = $this->totals[$genders.'_cost_morbidity_unscaled'] + $this->items[$id]->$gender->$age->cost_morbidity_unscaled;
// scaled /////////////////
// set each gender and age group morbidity_scaled
$this->items[$id]->$gender->$age->cost_morbidity_scaled = $this->items[$id]->$gender->$age->morbidity_scaled
* (( $this->company->total_salary / ($this->company->males + $this->company->females)
/ $this->company->working_days )
+ $this->company->total_healthcare / $this->totals['total_morbidity_scaled']);
// set total each cause/risk cost_morbidity_scaled
if(!isset($this->items[$id]->subtotal_cost_morbidity_scaled))
{
$this->items[$id]->subtotal_cost_morbidity_scaled = $this->items[$id]->$gender->$age->cost_morbidity_scaled;
}
else
{
$this->items[$id]->subtotal_cost_morbidity_scaled += $this->items[$id]->$gender->$age->cost_morbidity_scaled;
}
// set total each cause/risk per gender cost_morbidity_scaled
if(!isset($this->items[$id]->{$gender.'_cost_morbidity_scaled'}))
{
$this->items[$id]->{$gender.'_cost_morbidity_scaled'} = $this->items[$id]->$gender->$age->cost_morbidity_scaled;
}
else
{
$this->items[$id]->{$gender.'_cost_morbidity_scaled'} += $this->items[$id]->$gender->$age->cost_morbidity_scaled;
}
// set total for cost_morbidity_scaled
$this->totals['total_cost_morbidity_scaled'] = $this->totals['total_cost_morbidity_scaled'] + $this->items[$id]->$gender->$age->cost_morbidity_scaled;
// set total for cost_morbidity_scaled per gender
$this->totals[$genders.'_cost_morbidity_scaled'] = $this->totals[$genders.'_cost_morbidity_scaled'] + $this->items[$id]->$gender->$age->cost_morbidity_scaled;
}
}
}
}
// set cost_presenteeism
foreach($this->company->causesrisks as $id)
{
// work with each gender
foreach($this->genders as $gender => $genders)
{
// work with each age group
foreach($this->ages as $age)
{
if (isset($this->company->{'percent'.$gender}[$age]))
{
// unscaled ///////////////
// set each gender and age group cost_presenteeism_unscaled
$this->items[$id]->$gender->$age->cost_presenteeism_unscaled = $this->items[$id]->$gender->$age->presenteeism_unscaled
* ( $this->company->total_salary / (( $this->company->males + $this->company->females)
* $this->company->working_days));
// set total each cause/risk cost_presenteeism_unscaled
if(!isset($this->items[$id]->subtotal_cost_presenteeism_unscaled))
{
$this->items[$id]->subtotal_cost_presenteeism_unscaled = $this->items[$id]->$gender->$age->cost_presenteeism_unscaled;
}
else
{
$this->items[$id]->subtotal_cost_presenteeism_unscaled += $this->items[$id]->$gender->$age->cost_presenteeism_unscaled;
}
// set total each cause/risk per gender cost_presenteeism_unscaled
if(!isset($this->items[$id]->{$gender.'_cost_presenteeism_unscaled'}))
{
$this->items[$id]->{$gender.'_cost_presenteeism_unscaled'} = $this->items[$id]->$gender->$age->cost_presenteeism_unscaled;
}
else
{
$this->items[$id]->{$gender.'_cost_presenteeism_unscaled'} += $this->items[$id]->$gender->$age->cost_presenteeism_unscaled;
}
// set total for cost_presenteeism_unscaled
$this->totals['total_cost_presenteeism_unscaled'] = $this->totals['total_cost_presenteeism_unscaled']
+ $this->items[$id]->$gender->$age->cost_presenteeism_unscaled;
// set total for cost_presenteeism_unscaled per gender
$this->totals[$genders.'_cost_presenteeism_unscaled'] = $this->totals[$genders.'_cost_presenteeism_unscaled']
+ $this->items[$id]->$gender->$age->cost_presenteeism_unscaled;
// scaled /////////////////
// set each gender and age group cost_presenteeism_scaled
$this->items[$id]->$gender->$age->cost_presenteeism_scaled = $this->items[$id]->$gender->$age->presenteeism_scaled
* ( $this->company->total_salary / (( $this->company->males + $this->company->females)
* $this->company->working_days));
// set total each cause/risk cost_presenteeism_scaled
if(!isset($this->items[$id]->subtotal_cost_presenteeism_scaled))
{
$this->items[$id]->subtotal_cost_presenteeism_scaled = $this->items[$id]->$gender->$age->cost_presenteeism_scaled;
}
else
{
$this->items[$id]->subtotal_cost_presenteeism_scaled += $this->items[$id]->$gender->$age->cost_presenteeism_scaled;
}
// set total each cause/risk per gender cost_presenteeism_scaled
if(!isset($this->items[$id]->{$gender.'_cost_presenteeism_scaled'}))
{
$this->items[$id]->{$gender.'_cost_presenteeism_scaled'} = $this->items[$id]->$gender->$age->cost_presenteeism_scaled;
}
else
{
$this->items[$id]->{$gender.'_cost_presenteeism_scaled'} += $this->items[$id]->$gender->$age->cost_presenteeism_scaled;
}
// set total for cost_presenteeism_scaled
$this->totals['total_cost_presenteeism_scaled'] = $this->totals['total_cost_presenteeism_scaled']
+ $this->items[$id]->$gender->$age->cost_presenteeism_scaled;
// set total for cost_presenteeism_scaled per gender
$this->totals[$genders.'_cost_presenteeism_scaled'] = $this->totals[$genders.'_cost_presenteeism_scaled']
+ $this->items[$id]->$gender->$age->cost_presenteeism_scaled;
}
}
}
}
// set Cost_mortality
foreach($this->company->causesrisks as $id)
{
// work with each gender
foreach($this->genders as $gender => $genders)
{
// work with each age group
foreach($this->ages as $age)
{
if (isset($this->company->{'percent'.$gender}[$age]))
{
// unscaled ///////////////
// set each gender and age group cost_mortality_unscaled
$this->items[$id]->$gender->$age->cost_mortality_unscaled = $this->items[$id]->$gender->$age->days_lost_mortality_unscaled
* ( $this->company->total_salary / (( $this->company->males + $this->company->females)
* $this->company->working_days));
// set total each cause/risk cost_mortality_unscaled
if(!isset($this->items[$id]->subtotal_cost_mortality_unscaled))
{
$this->items[$id]->subtotal_cost_mortality_unscaled = $this->items[$id]->$gender->$age->cost_mortality_unscaled;
}
else
{
$this->items[$id]->subtotal_cost_mortality_unscaled += $this->items[$id]->$gender->$age->cost_mortality_unscaled;
}
// set total each cause/risk per gender cost_mortality_unscaled
if(!isset($this->items[$id]->{$gender.'_cost_mortality_unscaled'}))
{
$this->items[$id]->{$gender.'_cost_mortality_unscaled'} = $this->items[$id]->$gender->$age->cost_mortality_unscaled;
}
else
{
$this->items[$id]->{$gender.'_cost_mortality_unscaled'} += $this->items[$id]->$gender->$age->cost_mortality_unscaled;
}
// set total for cost_mortality_unscaled
$this->totals['total_cost_mortality_unscaled'] = $this->totals['total_cost_mortality_unscaled']
+ $this->items[$id]->$gender->$age->cost_mortality_unscaled;
// set total for cost_mortality_unscaled per gender
$this->totals[$genders.'_cost_mortality_unscaled'] = $this->totals[$genders.'_cost_mortality_unscaled']
+ $this->items[$id]->$gender->$age->cost_mortality_unscaled;
// scaled /////////////////
// set each gender and age group cost_mortality_scaled
$this->items[$id]->$gender->$age->cost_mortality_scaled = $this->items[$id]->$gender->$age->days_lost_mortality_scaled
* ( $this->company->total_salary / (( $this->company->males + $this->company->females)
* $this->company->working_days));
// set total each cause/risk cost_mortality_scaled
if(!isset($this->items[$id]->subtotal_cost_mortality_scaled))
{
$this->items[$id]->subtotal_cost_mortality_scaled = $this->items[$id]->$gender->$age->cost_mortality_scaled;
}
else
{
$this->items[$id]->subtotal_cost_mortality_scaled += $this->items[$id]->$gender->$age->cost_mortality_scaled;
}
// set total each cause/risk per gender cost_mortality_scaled
if(!isset($this->items[$id]->{$gender.'_cost_mortality_scaled'}))
{
$this->items[$id]->{$gender.'_cost_mortality_scaled'} = $this->items[$id]->$gender->$age->cost_mortality_scaled;
}
else
{
$this->items[$id]->{$gender.'_cost_mortality_scaled'} += $this->items[$id]->$gender->$age->cost_mortality_scaled;
}
// set total for cost_mortality_scaled
$this->totals['total_cost_mortality_scaled'] = $this->totals['total_cost_mortality_scaled']
+ $this->items[$id]->$gender->$age->cost_mortality_scaled;
// set total for cost_mortality_scaled per gender
$this->totals[$genders.'_cost_mortality_scaled'] = $this->totals[$genders.'_cost_mortality_scaled']
+ $this->items[$id]->$gender->$age->cost_mortality_scaled;
}
}
// unscaled ///////////////
$this->items[$id]->{$gender.'_cost_unscaled'} = $this->items[$id]->{$gender.'_cost_morbidity_unscaled'}
+ $this->items[$id]->{$gender.'_cost_mortality_unscaled'}
+ $this->items[$id]->{$gender.'_cost_presenteeism_unscaled'};
// scaled ///////////////
$this->items[$id]->{$gender.'_cost_scaled'} = $this->items[$id]->{$gender.'_cost_morbidity_scaled'}
+ $this->items[$id]->{$gender.'_cost_mortality_scaled'}
+ $this->items[$id]->{$gender.'_cost_presenteeism_scaled'};
// set total for gender cost_unscaled
$this->totals[$genders.'_cost_unscaled'] = $this->totals[$genders.'_cost_unscaled']
+ $this->items[$id]->{$gender.'_cost_unscaled'};
// set total for gender cost_scaled
$this->totals[$genders.'_cost_scaled'] = $this->totals[$genders.'_cost_scaled']
+ $this->items[$id]->{$gender.'_cost_scaled'};
}
// unscaled ///////////////
$this->items[$id]->subtotal_cost_unscaled = $this->items[$id]->subtotal_cost_morbidity_unscaled
+ $this->items[$id]->subtotal_cost_mortality_unscaled
+ $this->items[$id]->subtotal_cost_presenteeism_unscaled;
// scaled ///////////////
$this->items[$id]->subtotal_cost_scaled = $this->items[$id]->subtotal_cost_morbidity_scaled
+ $this->items[$id]->subtotal_cost_mortality_scaled
+ $this->items[$id]->subtotal_cost_presenteeism_scaled;
// set global total cost
$this->totals['total_cost_unscaled'] = $this->totals['total_cost_unscaled'] + $this->items[$id]->subtotal_cost_unscaled;
$this->totals['total_cost_scaled'] = $this->totals['total_cost_scaled'] + $this->items[$id]->subtotal_cost_scaled;
}
// turn values into money
foreach($this->company->causesrisks as $id)
{
// work with each gender
foreach($this->genders as $gender => $genders)
{
// work with each age group
foreach($this->ages as $age)
{
if (isset($this->company->{'percent'.$gender}[$age]))
{
// set each gender and age group costmoney_morbidity_unscaled
$this->items[$id]->$gender->$age->costmoney_morbidity_unscaled = $this->makeMoney((float)$this->items[$id]->$gender->$age->cost_morbidity_unscaled);
// set each gender and age group costmoney_morbidity_scaled
$this->items[$id]->$gender->$age->costmoney_morbidity_scaled = $this->makeMoney((float)$this->items[$id]->$gender->$age->cost_morbidity_scaled);
// set each gender and age group costmoney_presenteeism_unscaled
$this->items[$id]->$gender->$age->costmoney_presenteeism_unscaled = $this->makeMoney((float)$this->items[$id]->$gender->$age->cost_presenteeism_unscaled);
// set each gender and age group costmoney_presenteeism_scaled
$this->items[$id]->$gender->$age->costmoney_presenteeism_scaled = $this->makeMoney((float)$this->items[$id]->$gender->$age->cost_presenteeism_scaled);
// set each gender and age group costmoney_mortality_unscaled
$this->items[$id]->$gender->$age->costmoney_mortality_unscaled = $this->makeMoney((float)$this->items[$id]->$gender->$age->cost_mortality_unscaled);
// set each gender and age group costmoney_mortality_scaled
$this->items[$id]->$gender->$age->costmoney_mortality_scaled = $this->makeMoney((float)$this->items[$id]->$gender->$age->cost_mortality_scaled);
}
}
//// --- add all cost per gender --- ////
// set total each cause/risk per gender costmoney_morbidity_unscaled
$this->items[$id]->{$gender.'_costmoney_morbidity_unscaled'} = $this->makeMoney((float)$this->items[$id]->{$gender.'_cost_morbidity_unscaled'});
// set total each cause/risk per gender costmoney_morbidity_scaled
$this->items[$id]->{$gender.'_costmoney_morbidity_scaled'} = $this->makeMoney((float)$this->items[$id]->{$gender.'_cost_morbidity_scaled'});
// set total each cause/risk per gender costmoney_mortality_unscaled
$this->items[$id]->{$gender.'_costmoney_mortality_unscaled'} = $this->makeMoney((float)$this->items[$id]->{$gender.'_cost_mortality_unscaled'});
// set total each cause/risk per gender costmoney_mortality_scaled
$this->items[$id]->{$gender.'_costmoney_mortality_scaled'} = $this->makeMoney((float)$this->items[$id]->{$gender.'_cost_mortality_scaled'});
// set total each cause/risk per gender costmoney_presenteeism_unscaled
$this->items[$id]->{$gender.'_costmoney_presenteeism_unscaled'} = $this->makeMoney((float)$this->items[$id]->{$gender.'_cost_presenteeism_unscaled'});
// set total each cause/risk per gender costmoney_presenteeism_scaled
$this->items[$id]->{$gender.'_costmoney_presenteeism_scaled'} = $this->makeMoney((float)$this->items[$id]->{$gender.'_cost_presenteeism_scaled'});
// set total each subtotal_costmoney_unscale
$this->items[$id]->{$gender.'_costmoney_unscaled'} = $this->makeMoney((float)$this->items[$id]->{$gender.'_cost_unscaled'});
// set total each subtotal_costmoney_scaled
$this->items[$id]->{$gender.'_costmoney_scaled'} = $this->makeMoney((float)$this->items[$id]->{$gender.'_cost_scaled'});
// gender totals morbidity
$this->totals[$genders.'_costmoney_morbidity_scaled'] = $this->makeMoney((float)$this->totals[$genders.'_cost_morbidity_scaled']);
$this->totals[$genders.'_costmoney_morbidity_unscaled'] = $this->makeMoney((float)$this->totals[$genders.'_cost_morbidity_unscaled']);
// gender totals mortality
$this->totals[$genders.'_costmoney_mortality_scaled'] = $this->makeMoney((float)$this->totals[$genders.'_cost_mortality_scaled']);
$this->totals[$genders.'_costmoney_mortality_unscaled'] = $this->makeMoney((float)$this->totals[$genders.'_cost_mortality_unscaled']);
// gender total presenteeism
$this->totals[$genders.'_costmoney_presenteeism_unscaled'] = $this->makeMoney((float)$this->totals[$genders.'_cost_presenteeism_unscaled']);
$this->totals[$genders.'_costmoney_presenteeism_scaled'] = $this->makeMoney((float)$this->totals[$genders.'_cost_presenteeism_scaled']);
// set total gender costmoney
$this->totals[$genders.'_costmoney_unscaled'] = $this->makeMoney((float)$this->totals[$genders.'_cost_unscaled']);
$this->totals[$genders.'_costmoney_scaled'] = $this->makeMoney((float)$this->totals[$genders.'_cost_scaled']);
}
// set total each cause/risk costmoney_morbidity_unscaled
$this->items[$id]->subtotal_costmoney_morbidity_unscaled = $this->makeMoney((float)$this->items[$id]->subtotal_cost_morbidity_unscaled);
// set total each cause/risk costmoney_morbidity_scaled
$this->items[$id]->subtotal_costmoney_morbidity_scaled = $this->makeMoney((float)$this->items[$id]->subtotal_cost_morbidity_scaled);
// set total each cause/risk costmoney_mortality_unscaled
$this->items[$id]->subtotal_costmoney_mortality_unscaled = $this->makeMoney((float)$this->items[$id]->subtotal_cost_mortality_unscaled);
// set total each cause/risk costmoney_mortality_scaled
$this->items[$id]->subtotal_costmoney_mortality_scaled = $this->makeMoney((float)$this->items[$id]->subtotal_cost_mortality_scaled);
// set total each cause/risk costmoney_presenteeism_unscaled
$this->items[$id]->subtotal_costmoney_presenteeism_unscaled = $this->makeMoney((float)$this->items[$id]->subtotal_cost_presenteeism_unscaled);
// set total each cause/risk costmoney_presenteeism_scaled
$this->items[$id]->subtotal_costmoney_presenteeism_scaled = $this->makeMoney((float)$this->items[$id]->subtotal_cost_presenteeism_scaled);
// set total each subtotal_costmoney_unscale
$this->items[$id]->subtotal_costmoney_unscaled = $this->makeMoney((float)$this->items[$id]->subtotal_cost_unscaled);
// set total each subtotal_costmoney_scaled
$this->items[$id]->subtotal_costmoney_scaled = $this->makeMoney((float)$this->items[$id]->subtotal_cost_scaled);
}
// set global totals morbidity
$this->totals['total_costmoney_morbidity_scaled'] = $this->makeMoney((float)$this->totals['total_cost_morbidity_scaled']);
$this->totals['total_costmoney_morbidity_unscaled'] = $this->makeMoney((float)$this->totals['total_cost_morbidity_unscaled']);
// set global totals mortality
$this->totals['total_costmoney_mortality_scaled'] = $this->makeMoney((float)$this->totals['total_cost_mortality_scaled']);
$this->totals['total_costmoney_mortality_unscaled'] = $this->makeMoney((float)$this->totals['total_cost_mortality_unscaled']);
// set global totals presenteesim
$this->totals['total_costmoney_presenteeism_scaled'] = $this->makeMoney((float)$this->totals['total_cost_presenteeism_scaled']);
$this->totals['total_costmoney_presenteeism_unscaled'] = $this->makeMoney((float)$this->totals['total_cost_presenteeism_unscaled']);
// set global totals COST
$this->totals['total_costmoney_scaled'] = $this->makeMoney((float)$this->totals['total_cost_scaled']);
$this->totals['total_costmoney_unscaled'] = $this->makeMoney((float)$this->totals['total_cost_unscaled']);
return true;
} return false;
}
/**
* Set the interventions related to this Company.
*
* @return array
*
*/
protected function setInterventions()
{
// now set the result set
if(CostbenefitprojectionHelper::checkArray($this->company->causesrisks) && isset($this->company->interventions) && CostbenefitprojectionHelper::checkArray($this->company->interventions)){
$i = 0;
foreach ($this->company->interventions as $mainkey => $item)
{
// make sure duration is set
if (!isset($item->duration) || !is_numeric($item->duration) || 1 > $item->duration)
{
$item->duration = 1;
}
$this->interventions[$i]["id"] = $item->id;
$this->interventions[$i]["name"] = $item->name;
$this->interventions[$i]["description"] = $item->description;
$this->interventions[$i]["duration"] = $item->duration;
$this->interventions[$i]["coverage"] = $item->coverage;
$this->interventions[$i]["type"] = $item->type;
$this->interventions[$i]['found'] = array();
$this->interventions[$i]['not_found'] = array();
// set totals
$this->interventions[$i]['totals']['cost_per_employee'] = 0;
$this->interventions[$i]['totals']['costmoney_per_employee'] = 0;
$this->interventions[$i]['totals']['cost_of_problem_scaled'] = 0;
$this->interventions[$i]['totals']['cost_of_problem_unscaled'] = 0;
$this->interventions[$i]['totals']['costmoney_of_problem_scaled'] = 0;
$this->interventions[$i]['totals']['costmoney_of_problem_unscaled'] = 0;
$this->interventions[$i]['totals']['contribution_to_cost_scaled'] = 0;
$this->interventions[$i]['totals']['contribution_to_cost_unscaled'] = 0;
$this->interventions[$i]['totals']['cost'] = 0;
$this->interventions[$i]['totals']['costmoney'] = 0;
$this->interventions[$i]['totals']['benefit_scaled'] = 0;
$this->interventions[$i]['totals']['benefit_unscaled'] = 0;
$this->interventions[$i]['totals']['benefitmoney_scaled'] = 0;
$this->interventions[$i]['totals']['benefitmoney_unscaled'] = 0;
$this->interventions[$i]['totals']['net_benefit_scaled'] = 0;
$this->interventions[$i]['totals']['net_benefit_unscaled'] = 0;
$this->interventions[$i]['totals']['net_benefitmoney_scaled'] = 0;
$this->interventions[$i]['totals']['net_benefitmoney_unscaled'] = 0;
// now load the cause/risk that are linked to this user
$a = 0;
// set values
foreach ($item->data as $key => $value){
if(in_array($value['id'],$this->company->causesrisks)){
// set array of causes/risk ids
$this->interventions[$i]['found'][$value['id']] = $this->items[$value['id']]->details->name;
// set local cause/risk values
$this->interventions[$i]['items'][$a] = $value;
$this->interventions[$i]['items'][$a]['name'] = $this->items[$value['id']]->details->name;
$this->interventions[$i]['items'][$a]['cost_of_problem_unscaled'] = $this->items[$value['id']]->subtotal_cost_unscaled * $item->duration;
$this->interventions[$i]['items'][$a]['cost_of_problem_scaled'] = $this->items[$value['id']]->subtotal_cost_scaled * $item->duration;
$this->interventions[$i]['items'][$a]['costmoney_of_problem_unscaled'] = $this->makeMoney((float)$this->interventions[$i]['items'][$a]['cost_of_problem_unscaled']);
$this->interventions[$i]['items'][$a]['costmoney_of_problem_scaled'] = $this->makeMoney((float)$this->interventions[$i]['items'][$a]['cost_of_problem_scaled']);
$this->interventions[$i]['items'][$a]['cost'] = ($this->interventions[$i]["coverage"] /100)
* $value['cpe'] * ($this->company->males + $this->company->females);
// turn into money
$this->interventions[$i]['items'][$a]['costmoney'] = $this->makeMoney((float)$this->interventions[$i]['items'][$a]['cost']);
$this->interventions[$i]['items'][$a]['benefit_unscaled'] = ($this->interventions[$i]["coverage"] /100) * ($value['mbr'] /100)
* ($this->items[$value['id']]->subtotal_cost_morbidity_unscaled
+ $this->items[$value['id']]->subtotal_cost_presenteeism_unscaled)
+ ($value['mtr']/100) * $this->items[$value['id']]->subtotal_cost_mortality_unscaled
* $item->duration;
$this->interventions[$i]['items'][$a]['benefit_scaled'] = ($this->interventions[$i]["coverage"] /100) * ($value['mbr'] /100)
* ($this->items[$value['id']]->subtotal_cost_morbidity_scaled
+ $this->items[$value['id']]->subtotal_cost_presenteeism_scaled)
+ ($value['mtr']/100) * $this->items[$value['id']]->subtotal_cost_mortality_scaled
* $item->duration;
// turn into money
$this->interventions[$i]['items'][$a]['benefitmoney_unscaled'] = $this->makeMoney((float)$this->interventions[$i]['items'][$a]['benefit_unscaled']);
$this->interventions[$i]['items'][$a]['benefitmoney_scaled'] = $this->makeMoney((float)$this->interventions[$i]['items'][$a]['benefit_scaled']);
$this->interventions[$i]['items'][$a]['net_benefit_unscaled'] = $this->interventions[$i]['items'][$a]['benefit_unscaled']
- $this->interventions[$i]['items'][$a]['cost'];
$this->interventions[$i]['items'][$a]['net_benefit_scaled'] = $this->interventions[$i]['items'][$a]['benefit_scaled']
- $this->interventions[$i]['items'][$a]['cost'];
// turn into money
$this->interventions[$i]['items'][$a]['net_benefitmoney_unscaled'] = $this->makeMoney((float)$this->interventions[$i]['items'][$a]['net_benefit_unscaled']);
$this->interventions[$i]['items'][$a]['net_benefitmoney_scaled'] = $this->makeMoney((float)$this->interventions[$i]['items'][$a]['net_benefit_scaled']);
// set ratio
$this->interventions[$i]['items'][$a]['benefit_ratio_unscaled'] = $this->interventions[$i]['items'][$a]['benefit_unscaled']
/ $this->interventions[$i]['items'][$a]['cost'];
$this->interventions[$i]['items'][$a]['benefit_ratio_scaled'] = $this->interventions[$i]['items'][$a]['benefit_scaled']
/ $this->interventions[$i]['items'][$a]['cost'];
$this->interventions[$i]['items'][$a]['costmoney_per_employee'] = $this->makeMoney((float)$value['cpe']);
// set totals
$this->interventions[$i]['totals']['cost'] = $this->interventions[$i]['totals']['cost']
+ $this->interventions[$i]['items'][$a]['cost'];
$this->interventions[$i]['totals']['benefit_scaled'] = $this->interventions[$i]['totals']['benefit_scaled']
+ $this->interventions[$i]['items'][$a]['benefit_scaled'];
$this->interventions[$i]['totals']['benefit_unscaled'] = $this->interventions[$i]['totals']['benefit_unscaled']
+ $this->interventions[$i]['items'][$a]['benefit_unscaled'];
$this->interventions[$i]['totals']['net_benefit_scaled'] = $this->interventions[$i]['totals']['net_benefit_scaled']
+ $this->interventions[$i]['items'][$a]['net_benefit_scaled'];
$this->interventions[$i]['totals']['net_benefit_unscaled'] = $this->interventions[$i]['totals']['net_benefit_unscaled']
+ $this->interventions[$i]['items'][$a]['net_benefit_unscaled'];
$this->interventions[$i]['totals']['cost_per_employee'] = $this->interventions[$i]['totals']['cost_per_employee'] + $value['cpe'];
$this->interventions[$i]['totals']['cost_of_problem_scaled'] = $this->interventions[$i]['totals']['cost_of_problem_scaled']
+ $this->interventions[$i]['items'][$a]['cost_of_problem_scaled'];
$this->interventions[$i]['totals']['cost_of_problem_unscaled'] = $this->interventions[$i]['totals']['cost_of_problem_unscaled']
+ $this->interventions[$i]['items'][$a]['cost_of_problem_unscaled'];
} else {
$this->interventions[$i]['not_found'][$value['id']] = CostbenefitprojectionHelper::getVar('causerisk', $value['id'], 'id', 'name');
}
$a++;
}
// contribution_to_cost
$a = 0;
foreach ($item->data as $key => $value){
if(in_array($value['id'],$this->company->causesrisks)){
$this->interventions[$i]['items'][$a]['contribution_to_cost_unscaled'] = ($this->interventions[$i]['items'][$a]['cost_of_problem_unscaled']
/ $this->interventions[$i]['totals']['cost_of_problem_unscaled']) * 100;
$this->interventions[$i]['items'][$a]['contribution_to_cost_scaled'] = ($this->interventions[$i]['items'][$a]['cost_of_problem_scaled']
/ $this->interventions[$i]['totals']['cost_of_problem_scaled']) * 100;
// set totals
$this->interventions[$i]['totals']['contribution_to_cost_scaled'] = $this->interventions[$i]['totals']['contribution_to_cost_scaled']
+ $this->interventions[$i]['items'][$a]['contribution_to_cost_scaled'];
$this->interventions[$i]['totals']['contribution_to_cost_unscaled'] = $this->interventions[$i]['totals']['contribution_to_cost_unscaled']
+ $this->interventions[$i]['items'][$a]['contribution_to_cost_unscaled'];
}
$a++;
}
// set total money
$this->interventions[$i]['totals']['costmoney_per_employee'] = $this->makeMoney((float)$this->interventions[$i]['totals']['cost_per_employee']);
$this->interventions[$i]['totals']['costmoney_of_problem_scaled'] = $this->makeMoney((float)$this->interventions[$i]['totals']['cost_of_problem_scaled']);
$this->interventions[$i]['totals']['costmoney_of_problem_unscaled'] = $this->makeMoney((float)$this->interventions[$i]['totals']['cost_of_problem_unscaled']);
$this->interventions[$i]['totals']['costmoney'] = $this->makeMoney((float)$this->interventions[$i]['totals']['cost']);
$this->interventions[$i]['totals']['benefitmoney_scaled'] = $this->makeMoney((float)$this->interventions[$i]['totals']['benefit_scaled']);
$this->interventions[$i]['totals']['benefitmoney_unscaled'] = $this->makeMoney((float)$this->interventions[$i]['totals']['benefit_unscaled']);
$this->interventions[$i]['totals']['net_benefitmoney_scaled'] = $this->makeMoney((float)$this->interventions[$i]['totals']['net_benefit_scaled']);
$this->interventions[$i]['totals']['net_benefitmoney_unscaled'] = $this->makeMoney((float)$this->interventions[$i]['totals']['net_benefit_unscaled']);
if (isset($this->interventions[$i]['items']))
{
$this->interventions[$i]['nr_found'] = sizeof($this->interventions[$i]['items']);
}
else
{
$this->interventions[$i]['nr_found'] = 0;
}
if (isset($this->interventions[$i]['not_found']))
{
$this->interventions[$i]['nr_not_found'] = sizeof($this->interventions[$i]['not_found']);
}
else
{
$this->interventions[$i]['nr_not_found'] = 0;
}
$i++;
} return true;
} $this->interventions = false;
}
public function makeMoney($number)
{
if (is_numeric($number))
{
$negativeFinderObj = new NegativeFinder(new Expression("$number"));
$negative = $negativeFinderObj->isItNegative() ? TRUE : FALSE;
}
else
{
throw new Exception('ERROR! ('.$number.') is not a number!');
}
if (!$negative)
{
$format = $this->company->currency_positivestyle;
$sign = '+';
}
else
{
$format = $this->company->currency_negativestyle;
$sign = '-';
$number = abs($number);
}
$setupNumber = number_format((float)$number, (int)$this->company->currency_decimalplace, $this->company->currency_decimalsymbol, ' '); //$this->company->currency_thousands TODO);
$search = array('{sign}', '{number}', '{symbol}');
$replace = array($sign, $setupNumber, $this->company->currency_symbol);
$moneyMade = str_replace ($search,$replace,$format);
return $moneyMade;
}
}