/** * Specifies the access control rules. * This method is used by the 'accessControl' filter. * @return array access control rules */ public function accessRules() { return array( array('allow', // allow authenticated user to perform 'create' and 'update' actions 'actions'=>array('clearpcstoreviewsession'), 'users'=>array('*'), ), array('allow', // allow authenticated user to perform 'create' and 'update' actions 'actions'=>array('index', 'detail', 'getlistbysearchquery', 'getpcinfo', 'addpcsitemstosession', 'printdocument', 'setdocidtoprintdocument', 'senddocumentbyemail'), 'expression'=>function() { $users = array('admin', 'user', 'approver', 'processor', 'db_admin', 'client_admin'); $clientID = isset(Yii::app()->user->clientID) ? Yii::app()->user->clientID : 0; $companyServiceLevel = ClientServiceSettings::getClientServiceSettings($clientID); $tier_settings = isset(Yii::app()->user->tier_settings) ? Yii::app()->user->tier_settings : null ;//array of aggregated settings for current user if (isset(Yii::app()->user->id) && in_array(Yii::app()->user->id, $users) && $companyServiceLevel && isset($tier_settings['pc']) && $companyServiceLevel->Active_To >= date('Y-m-d')) { return true; } return false; }, ), array('deny', // deny all users 'users'=>array('*'), ), ); }
public static function checkDate($date,$client_id){ $dcss = self::model()->findByPk($client_id); if ($dcss) { if (strtotime($date) >= strtotime($dcss->Active_From)) { $currentSettings = ClientServiceSettings::model()->findByPk($client_id); $currentSettings->Service_Level_ID = $dcss->Service_Level_ID; $currentSettings->Additional_Users = $dcss->Additional_Users; $currentSettings->Additional_Projects = $dcss->Additional_Projects; $currentSettings->Additional_Storage = $dcss->Additional_Storage; $currentSettings->Active_To = $dcss->Active_To; $currentSettings->Fee = $dcss->Fee; $currentSettings->save(); $dcss->delete(); } } }
'items'=> $items, 'level_ids'=>$level_ids, 'summary_sl_settings'=>$summary_sl_settings )); ?></td> <td id="set_count_users"><?php echo $summary_sl_settings['Users_Count'];?></td> <td id="set_count_projects"><?php echo $summary_sl_settings['Projects_Count'];?></td> <td id="set_count_storage"><?php echo $summary_sl_settings['Storage_Count'];?></td> <td id="set_base_fee"><?php echo number_format($summary_sl_settings['Base_Fee'], 2);?></td> </tr> <tr> <td>Added</td> <?php $tiers_str = $summary_sl_settings['Tiers_Str']; $base_level_settings = ClientServiceSettings::getBaseTierValues(explode(',',$tiers_str)); ?> <td><?php echo CHtml::activeTextField($settings, "Additional_Users", array( 'class' => 'input_in_grid qty_cell', 'disabled' =>(Yii::app()->user->id=='db_admin') ? false : true, 'style'=>'background:'.(Yii::app()->user->id=='db_admin' ? 'white' : ''), 'data-fee' => $base_level_settings['Max_Add_User_Fee'], 'maxlength'=>3 ));?></td> <td><?php echo CHtml::activeTextField($settings, "Additional_Projects", array( 'class' => 'input_in_grid qty_cell', 'disabled' =>(Yii::app()->user->id=='db_admin') ? false : true, 'style'=>'background:'.(Yii::app()->user->id=='db_admin' ? 'white' : ''), 'data-fee' => $base_level_settings['Max_Add_Project_Fee'], 'maxlength'=>3 ));?></td>
/** * Recalculate Pending Settings (based on number of day ) * @param $pcss * @param $active_to * @param $monthly_price */ public static function recalculateSettings($pcss,$active_to,$monthly_price) { $css = ClientServiceSettings::model()->findByPk($pcss->Client_ID); //for pending settings $datetime1 = date_create(date('Y-m-d')); $datetime2 = date_create($active_to); $diff = date_diff($datetime1, $datetime2, true); $days_to_charge = $diff->days; //for previous settings $datetime_prev1 = date_create($css->Active_To); $datetime_prev2 = date_create($active_to); $diff = date_diff($datetime_prev1, $datetime_prev2, true); $days_to_charge_prev = $diff->days; $added_price = ($monthly_price - $css->Fee); $added_price_til_the_end = floatval($added_price /30 * $days_to_charge); $base_price_till_the_end = floatval($css->Fee /30 * $days_to_charge_prev); $total_price_till_the_end = $added_price_til_the_end + $base_price_till_the_end; $pcss->Fee = round($monthly_price,2); $pcss->Fee_To_Upgrade = round($total_price_till_the_end,2); $pcss->save(); }
/** * Returns array of summarized settings for current client * @return array Tier_Name,Users_Count, Projects_Count, Storage_Count, Base_Fee, Additional_Users,Additional_Projects,Additional_Storage,Additional_Fee */ public static function getSummarySettings($client_id) { $result = array(); $i= 0; $limiter =''; $client_id = $client_id ? $client_id :Yii::app()->user->clientID; $css = ClientServiceSettings::model()->findByPk($client_id); $result['Tiers_Str'] = $css->Service_Level_ID; $tiers_array = explode(',',$result['Tiers_Str']); foreach ($tiers_array as $id) { $settings = ServiceLevelSettings::model()->findByPk($id); if ($i != 0) {$limiter = ', ';} if ($settings->Service_Level_ID == 1) { $w9_exist =true; $w9_price = $settings->Base_Fee; $result['levels_checksum']+=1; } if ($settings->Service_Level_ID == 2) { $result['levels_checksum']+=5; } if ($settings->Service_Level_ID == 3) { $result['levels_checksum']+=10; }if ($settings->Service_Level_ID == 4) { $result['levels_checksum']+=20; } $result['Tier_Name'] .= $limiter.$settings->Tier_Name; $i++; } $add_users_price = $settings->Additional_User_Fee; $add_projects_price = $settings->Additional_Project_Fee; $add_storage_price = $settings->Additional_Storage_Fee; $result['Base_Fee'] = ClientServiceSettings::CalculateBaseFee($tiers_array); $result['Users_Count'] = $settings->Users_Count; $result['Projects_Count'] = $settings->Projects_Count; $result['Storage_Count'] = $settings->Storage_Count; $result['Additional_Users'] =$css->Additional_Users; $result['Additional_Projects'] =$css->Additional_Projects; $result['Additional_Storage'] =$css->Additional_Storage; $result['Storage_Index'] = ServiceLevelSettings::getStorageIndexByValue($css->Additional_Storage); $result['Additional_Fee'] = $add_users_price * $css->Additional_Users + $add_projects_price*($css->Additional_Projects) + $add_storage_price* ($result['Storage_Index']); //$result['Additional_Storage'] =$settings-> Additional_Storage; $users = UsersClientList::model()->findAllByAttributes(array( 'Client_ID'=>$client_id )); $result['Used_Users'] =count($users); $result['Used_Projects'] = Projects::clientProjectUsage(); $result['Used_Storage'] = ceil(Images::getUsedStorage($client_id)); return $result; }
/** * Update company service level and add payment */ public function actionUpdateCompanyServiceLevel() { if (isset($_POST['ClientServiceSettings']) && is_array($_POST['ClientServiceSettings']) && isset($_POST['Tiers']) && is_array($_POST['Tiers']) ) { $client_id = intval($_POST['ClientServiceSettings']['Client_ID']); $css = ClientServiceSettings::model()->findByPk($client_id); $pcss = PendingClientServiceSettings::model()->findByPk($client_id); if ($pcss) {$pending_fee = $pcss->Fee;} $client = $css->client; //1) add payment $amount = floatval($_POST['add_payment_amount']); $date = trim($_POST['add_payment_date']); $number = trim($_POST['add_payment_number']); $date = Helper::checkDate($date); $users = intval($_POST['ClientServiceSettings']['Additional_Users']); $projects = intval($_POST['ClientServiceSettings']['Additional_Projects']); $storage = intval($_POST['ClientServiceSettings']['Additional_Storage']); $min_max_is_valid = ClientServiceSettings::CheckMinMaxValues($users,$projects,$storage); if ($min_max_is_valid) { if ($client && $amount > 0 && preg_match('/^\d{4}\-\d{2}\-\d{2}$/', $date)) { $result = ServicePayments::addJustPayment($client_id, $amount, $date,$number,''); } } //2) update settings if ($css && $client && $min_max_is_valid) { $_POST['ClientServiceSettings']['Active_To'] = Helper::checkDate($_POST['ClientServiceSettings']['Active_To']); $css->setAttributes($_POST['ClientServiceSettings']); //$css->Additional_Storage--; //$companyServiceSettings->Service_Level_ID = implode(',',$_POST['Tiers']); //$fee = ClientServiceSettings::Calculation($css->Additional_Users,$css->Additional_Projects,$css->Additional_Storage,$css->Active_To,$css->Service_Level_ID,$client_id); //new settings and prices $base_fee_new = ClientServiceSettings::CalculateBaseFee(explode(',',$css->Service_Level_ID)); $add_fee_new = ClientServiceSettings::CalculateAddFee($css->Additional_Users,$css->Additional_Projects,$css->Additional_Storage); $fee = $base_fee_new + $add_fee_new; $css->Additional_Storage--; /**$fee = $amount ? $amount : ClientServiceSettings::getFeeByValues( $companyServiceSettings->Service_Level_ID, $companyServiceSettings->Additional_Users, $companyServiceSettings->Additional_Projects, $companyServiceSettings->Additional_Storage ); */ //$periods = Helper::calculatePeriodsBetweenDates(date('m/d/Y'),$companyServiceSettings->Active_To); $css->Fee = $fee; //* $periods; if ($css->validate()) { $css->save(); if ($pcss) $pcss->delete(); if ($css->Active_To >= date('Y-m-d') && $client->Client_Status == Clients::NOT_ACTIVE) { $client->activate(); } $user_client_settings = $client->service_settings; $user_tier_settings = TiersSettings::agregateTiersSettings($user_client_settings->Service_Level_ID); Yii::app()->user->setState('tier_settings', $user_tier_settings); } } Yii::app()->user->setFlash('success', "Settings added"); $this->redirect('/admin?tab=service'); } }
public function recalculate() { $base_fee_prev = ClientServiceSettings::CalculateBaseFee(explode(',',$this->Service_Level_ID)); $add_fee_prev = ClientServiceSettings::CalculatePrevAddFee($this->Additional_Users,$this->Additional_Projects,$this->Additional_Storage); $monthly_price_prev = $base_fee_prev + $add_fee_prev; $this->Fee = $monthly_price_prev; $this->save(); }
/** * Generate invoice * @param $clientID * @param $amount */ public static function generateInvoice($clientID, $userID, $amount) { $client = Clients::model()->with('company.adreses')->findByPk($clientID); $user = Users::model()->with('person')->findByPk($userID); $settingsToPay= PendingClientServiceSettings::model()->findByAttributes(array( 'Client_ID'=>$clientID, 'Approved'=>1 ) ); if($settingsToPay) { //$str = ServiceLevelSettings::getSummaryName($settingsToPay->Service_Level_ID); $sum_settings = ServiceLevelSettings::getSummarySettings($clientID); $tierName=$sum_settings['Tier_Name']; $data['service']['total_users'] = $settingsToPay->Additional_Users ; $data['service']['total_projects'] = $settingsToPay->Additional_Projects ; $data['service']['total_storage'] = $settingsToPay->Additional_Storage ; $data['service']['added_users'] = $settingsToPay->Additional_Users - $sum_settings['Users_Count']; $data['service']['added_projects'] = $settingsToPay->Additional_Projects ; $data['service']['added_storage'] = $settingsToPay->Additional_Storage ; $active_to = $settingsToPay->Pending_Active_To; } else { $settingsToPay= ClientServiceSettings::model()->findByPk($clientID); $sum_settings = ServiceLevelSettings::getSummarySettings($clientID); $tierName=$sum_settings['Tier_Name']; $data['service']['total_users'] = $settingsToPay->Additional_Users + $sum_settings['Users_Count']; $data['service']['total_projects'] = $settingsToPay->Additional_Projects + $sum_settings['Projects_Count']; $data['service']['total_storage'] = $settingsToPay->Additional_Storage + $sum_settings['Storage_Count']; $data['service']['added_users'] = $settingsToPay->Additional_Users; $data['service']['added_projects'] = $settingsToPay->Additional_Projects; $data['service']['added_storage'] = $settingsToPay->Additional_Storage; $active_to = $settingsToPay->Active_To; } $summary_sl_settings = ServiceLevelSettings::getSummarySettings($clientID); $data['company_to']['company_name']=$client->company->Company_Name; $data['company_to']['street']=$client->company->adreses[0]->Address1; $data['company_to']['city']=$client->company->adreses[0]->City." ".$client->company->adreses[0]->ZIP;; $data['company_to']['country']=$client->company->adreses[0]->Country; $data['company_to']['email']=$user->person->Email; $data['company_to']['phone']=$user->person->Mobile_Phone; $data['invoice']['number']=Aps::generateInvoiceNumber($clientID); $data['invoice']['date']=date("M d, Y",time()); $data['invoice']['due_date']=date("M d, Y",time()); $data['invoice']['due_date']=date("M d, Y",time()); $data['invoice']['amount_due']=$amount; $data['service']['service_name']=$tierName; /*$data['service']['Users']=$summary_sl_settings['Additional_Users']+$summary_sl_settings['Users_Count']; $data['service']['Projects']=$summary_sl_settings['Additional_Projects']+$summary_sl_settings['Projects_Count']; $data['service']['Storage']=$summary_sl_settings['Additional_Storage']+$summary_sl_settings['Storage_Count'];*/ $data['service']['active_to'] = $active_to; // get content for pdf $content = Yii::app()->controller->renderPartial('application.views.myaccount.invoice_template', array( 'data'=>$data, ), true); $fileName = date("Y_m_d_H_i_s") . '.pdf'; Yii::import('ext.html2pdf.HTML2PDF'); $html2pdf = new HTML2PDF('P', 'A4', 'en'); $html2pdf->writeHTML($content); $html2pdf->Output($fileName, 'I'); die; }