public static function Calculation($users,$projects,$storage,$active_to,$tiers_str,$client_id,$active_from='') {

        $css = ClientServiceSettings::model()->findByPk($client_id);
        if ($css->CheckMinMax($users,$projects,$storage)) {

            $tiers_str_before = $css->Service_Level_ID;
            $tiers_arr_before = explode(',',$tiers_str_before);
            //we need to divide inputted settings into base and additional
            $base_level_settings_before = ClientServiceSettings::getBaseTierValues($tiers_arr_before);
            $base_level_settings_after = ClientServiceSettings::getBaseTierValues(explode(',',$tiers_str));

            $levels_check_sum_before = ClientServiceSettings::getLevelsCheckSum($tiers_arr_before);
            $levels_check_sum_after = ClientServiceSettings::getLevelsCheckSum(explode(',',$tiers_str));

            $count_sum_before = $css->Additional_Users + $css->Additional_Projects + $css->Additional_Storage + $base_level_settings_before['Users_Count'] + $base_level_settings_before['Projects_Count'] + $base_level_settings_before['Storage_Count'] + $levels_check_sum_before;
            $count_sum_after = $users + $projects + $storage + $levels_check_sum_after;// + $base_level_settings_after['Users_Count'] + $base_level_settings_after['Projects_Count'] + $base_level_settings_after['Storage_Count'];
            $service_level_grown =($count_sum_after > $count_sum_before) ? 1 : 0;
            $active_to_date_changed = (strtotime($css->Active_To)< strtotime($active_to)) ? 1 : 0;
            $service_level_grown = $active_to_date_changed ? 1 : $service_level_grown;

            $base_fee_after = ClientServiceSettings::CalculateBaseFee(explode(',',$tiers_str));

            //extra(additional)
            $add_users = intval($users) - $base_level_settings_after['Users_Count'];//- $css->Additional_Users ;
            $add_users = ( $add_users > 0 ) ? $add_users : 0;

            $add_projects = $projects - $base_level_settings_after['Projects_Count'];//-$css->Additional_Projects ;
            $add_projects = ( $add_projects > 0 ) ? $add_projects : 0;

            $add_storage = $storage - $base_level_settings_after['Storage_Count'];//-$css->Additional_Storage ;
            $add_storage = ( $add_storage > 0 ) ? $add_storage : 0;

            $add_fee = $add_users * $base_level_settings_after['Max_Add_User_Fee'] + $add_projects * $base_level_settings_after['Max_Add_Project_Fee'] + $add_storage * $base_level_settings_after['Max_Add_Storage_Fee'];
            $new_monthly_price = $base_fee_after + $add_fee;

            $old_add_fee  = $css->Additional_Users * $base_level_settings_after['Max_Add_User_Fee'] + $css->Additional_Projects * $base_level_settings_after['Max_Add_Project_Fee'] + $css->Additional_Storage * $base_level_settings_after['Max_Add_Storage_Fee'];
            $add_fee_changed = $old_add_fee -$add_fee;
            $old_monthly_price = $css->Fee;

            //1) If active_to changed, we need to calculate how many months(periods)
            $periods_for_current = Helper::calculatePeriodsBetweenDates(date('m/d/Y',strtotime($css->Active_To)),$active_to);
            $periods_for_added = Helper::calculatePeriodsBetweenDates(date('m/d/Y'),$active_to);

            //2) Multiply changes on the amount of periods
            $changed_fee = round(floatval($new_monthly_price) - floatval($old_monthly_price),2)*$periods_for_added;
            $changed_fee = ($changed_fee > 0) ? $changed_fee : 0;

            //for cases when period changed and additional settings changed
            if (!$active_from && $active_to_date_changed) {
                $changed_fee = $changed_fee + $new_monthly_price*$periods_for_current;
            }

            return array(
                'new_monthly_price'=>$new_monthly_price,
                'changed_fee'=>$changed_fee,
                'periods'=>$periods,
                'service_level_grown'=>$service_level_grown,
                'add_users'=>$add_users,
                'add_projects'=>$add_projects,
                'add_storage'=>$add_storage,

            );

        } else {
            return false;
        }


    }