public function generateTabsForAutoLoad (){ if ( $_SESSION['tabs_to_auto_load']['client_service_level_settings']) { $client_id_to_rewiev = intval($_SESSION['tabs_to_auto_load']['client_service_level_settings']['client_id']); $client = Clients::model()->with('service_settings', 'service_payments','company')->findByPk($client_id_to_rewiev); if ($client) { $serviceLevels = ServiceLevelSettings::getServiceLevelsOptionsList(); $settings = $client->service_settings; $items = ServiceLevelSettings::getServiceLevelsOptionsList(); $summary_sl_settings = ServiceLevelSettings::getSummarySettings($client_id_to_rewiev); $dcss = DelayedClientServiceSettings::model()->findByPk($client_id_to_rewiev); $pending_client_service_settings = PendingClientServiceSettings::model()->findByAttributes(array( 'Client_ID'=> $client->Client_ID, 'Approved'=>1 )); $view_data = $this->renderPartial('client_service_level_settings' , array( 'client' => $client, 'settings' => $settings, 'payments' => $client->service_payments, 'serviceLevels' => $serviceLevels, 'items'=>$items, 'summary_sl_settings'=>$summary_sl_settings, 'pending_client_service_settings'=>$pending_client_service_settings, 'dcss'=>$dcss ),true); $return_array['client_service_level_settings']['auto_loaded_data'] = $view_data; $return_array['client_service_level_settings']['client'] = $client; } } if ( $_SESSION['tabs_to_auto_load']['client_users_list_appr_value']) { $client_id_to_rewiev = intval($_SESSION['tabs_to_auto_load']['client_users_list_appr_value']['client_id']); $approvers_array = UsersClientList::getApproversArray($client_id_to_rewiev); $view_data = $this->renderPartial('client_users_list_appr_value' , array( 'approvers_array'=>$approvers_array, ),true); $return_array['client_users_list_appr_value']['auto_loaded_data'] = $view_data; $return_array['client_users_list_appr_value']['client'] = Clients::model()->with('company', 'users')->findByPk($client_id_to_rewiev);; } return $return_array; }
public static function createDelayedFromData($client_id,$service_level,$additional_users,$additional_projects,$additional_storage,$active_to,$active_from,$fee) { $dcss = DelayedClientServiceSettings::model()->findByPk($client_id); if (!$dcss) { $dcss = new DelayedClientServiceSettings(); $dcss->Client_ID = $client_id; } $dcss->Service_Level_ID = $service_level; $dcss->Additional_Users =$additional_users; $dcss->Additional_Projects = $additional_projects; $dcss->Additional_Storage = $additional_storage; $dcss->Active_To = date('Y-m-d',strtotime($active_to)); $dcss->Active_From = date('Y-m-d',strtotime($active_from)); $dcss->Fee = $fee; $dcss->save(); }
/** * Add client Payment, apply new settings and update 'Active To' date * @param $clientID * @param $amount * @param $date */ public static function addClientPayment($clientID, $amount, $date, $monthly_payment,$paydoc_number='auto') { $client = Clients::model()->with('service_settings', 'pending_service_settings','company.adreses')->findByPk($clientID); //$user = Users::model()->with('person')->findByPk(Yii::app()->user->userID); //$uid = UsersClientList::model()->findByAttributes(array('Client_ID'=>$clientID))->User_ID; $user = Users::model()->with('person')->findByPk(Yii::app()->user->userID); $sumToPay=$amount; //$sum_settings = ServiceLevelSettings::getSummarySettings($clientID); if ($client && $amount > 0 && preg_match('/^\d{4}\-\d{2}\-\d{2}$/', $date)) { $pendingSettings = $client->pending_service_settings; $currentSettings = $client->service_settings; $dcss = DelayedClientServiceSettings::model()->findByPk(Yii::app()->user->clientID); if($dcss) {$dcss->delete();} $sum_settings = ClientServiceSettings::getBaseTierValues(explode(',',$pendingSettings->Service_Level_ID)); //variables for email notification, not for logic $settingsBefore = "Level : ".$currentSettings->Service_Level_ID." Users:".$currentSettings->Additional_Users." Projects:".$currentSettings->Additional_Projects." Storage : ". $currentSettings->Additional_Storage; $dateBefore=date_format(date_create($currentSettings->Active_To),'Y-m-d'); $tierNameBefore=ServiceLevelSettings::model()->findByPk($currentSettings->Service_Level_ID)->Tier_Name; $settings_are_delayed = $pendingSettings->Pending_Active_From=='0000-00-00' ? 0 : 1; // begin transaction $transaction = Yii::app()->db->beginTransaction(); try { $payment = new ServicePayments(); $payment->Client_ID = $clientID; $payment->Payment_Date = $date; $payment->Payment_Amount = $amount; $payment->Payment_Amount = $paydoc_number; if ($payment->validate()) { // save payment $payment->save(); //echo "Payment validated and saved\n"; $dateFrom = $currentSettings->Active_To; if ($dateFrom < date('Y-m-d')) { $dateFrom = date('Y-m-d'); } // apply new settings if necessary if ($pendingSettings && $amount >= $pendingSettings->Fee_To_Upgrade && !$monthly_payment && !$settings_are_delayed) { $currentSettings->Service_Level_ID = $pendingSettings->Service_Level_ID; $currentSettings->Additional_Users = $pendingSettings->Additional_Users-$sum_settings['Users_Count']; $currentSettings->Additional_Projects = $pendingSettings->Additional_Projects;//-$sum_settings['Projects_Count']; $currentSettings->Additional_Storage = $pendingSettings->Additional_Storage;//-$sum_settings['Storage_Count']; $currentSettings->Active_To = $pendingSettings->Pending_Active_To; $currentSettings->Fee = $pendingSettings->Fee; $currentSettings->save(); $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); // $amount -= $pendingSettings->getCurrentAmountToUpgrade($dateFrom); $pendingSettings->delete(); } if ($pendingSettings && $amount >= $pendingSettings->Fee_To_Upgrade && !$monthly_payment && $settings_are_delayed) { /// DelayedClientServiceSettings::createDelayedFromPending($pendingSettings,$clientID,$sum_settings['Users_Count'], $sum_settings['Projects_Count'],$sum_settings['Storage_Count'] ); /* $dcss->Additional_Users = $pendingSettings->Additional_Users-$sum_settings['Users_Count']; $dcss->Additional_Projects = $pendingSettings->Additional_Projects-$sum_settings['Projects_Count']; $dcss->Additional_Storage = $pendingSettings->Additional_Storage-$sum_settings['Storage_Count'];*/ } // update Active_To date if ( $monthly_payment) { /*$addDays = ceil($amount/($currentSettings->Fee/self::DEFAULT_DAYS_IN_MONTH)); $dateOb = date_create($dateFrom); date_add($dateOb, date_interval_create_from_date_string($addDays . ' days')); $activeTo = date_format($dateOb, 'Y-m-d');*/ $number_of_periods = floor($amount/$currentSettings->Fee); $activeTo = strtotime(date("m/d/Y", strtotime($dateFrom)) . " +".$number_of_periods." month"); $currentSettings->Active_To = date('Y-m-d',$activeTo); $currentSettings->save(); if ( $pendingSettings ) { //we need to update active_to date in the pending settings. $pendingSettings->Pending_Active_To = date('Y-m-d',$activeTo); $pendingSettings->save(); } } $transaction->commit(); //variables for email notification, not for logic $email=$user->person->Email; $settingsAfter = "Level : ".$currentSettings->Service_Level_ID." Users:".$currentSettings->Additional_Users." Projects:".$currentSettings->Additional_Projects." Storage : ". $currentSettings->Additional_Storage; $dateAfter=date_format(date_create($currentSettings->Active_To),'Y-m-d'); $tierNameAfter=ServiceLevelSettings::model()->findByPk($currentSettings->Service_Level_ID)->Tier_Name; $company_name=$client->company->Company_Name; Mail::notifyAdminAboutStripePaymentExecuted($email,$company_name,$settingsBefore,$settingsAfter,$tierNameBefore,$tierNameAfter,$dateBefore,$dateAfter,$sumToPay); } else { Yii::app()->user->setFlash('error', "ServicePayments validation error!"); } } catch(Exception $e) { $transaction->rollback(); } } }