@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; } }