Пример #1
0
    /**
     * ReAuthenticates a user.
     * @param int $timezoneOffset
     * @return boolean whether authentication succeeds.
     */
    public function reauthenticate($timezoneOffset = 0)
    {
        $user = Users::model()->with('person','clients')->find('User_Login=:login',
            array(':login'=>$this->username));
        if(!empty($user->User_ID)) {
            $user->Last_IP = $_SERVER['REMOTE_ADDR'];
            $user->Last_Login = date("Y-m-d H:i:s");
            $user->save();

            // Set user info
            $this->setState('userInfo', $user->person->First_Name . ' ' . $user->person->Last_Name);
            $this->setState('userID', $user->User_ID);
            $this->setState('userLogin', $user->User_Login);
            $this->setState('userTimezoneOffset', $timezoneOffset);



            // get client
            $client = false;
            foreach ($user->clients as $cl) {
                if ($cl->Client_ID == $_SESSION['last_client']) {
                    $client = $cl;
                    break;
                } else {
                    $client = $cl;
                }
            }

            //set user's tier settings

            //check for delayed settings
            DelayedClientServiceSettings::checkDate(date('Y-m-d'),$client->Client_ID);

            $user_client_settings = $client->service_settings;
            $user_tier_settings = TiersSettings::agregateTiersSettings($user_client_settings->Service_Level_ID);
            $this->setState('tier_settings', $user_tier_settings);

            if ($client && $client->company) {
                $this->setState('clientInfo', $client->company->Company_Name);
                $this->setState('clientID', $client->Client_ID);

                $userClientRow = UsersClientList::model()->findByAttributes(array(
                    'User_ID' => $user->User_ID,
                    'Client_ID' => $client->Client_ID,
                ));

                //get projects
                if ($userClientRow->hasClientAdminPrivileges()) {
                    $projects = Projects::model()->findAllByAttributes(array(
                        'Client_ID' => $client->Client_ID,
                    ));
                } else {
                    $condition = new CDbCriteria();
                    $condition->condition = "users_project_list.User_ID = '" . Yii::app()->user->userID . "'";
                    $condition->addCondition("t.Client_ID = '" . $client->Client_ID . "'");
                    $condition->join = "LEFT JOIN users_project_list ON users_project_list.Project_ID = t.Project_ID";
                    $projects = Projects::model()->findAll($condition);
                }

                if ($projects) {
                    if (isset($_SESSION['last_project']) && $_SESSION['last_project'] == 'all') {
                        $this->setState('projectInfo', 'All Projects');
                        $this->setState('projectID', 'all');
                        unset($_SESSION['last_project']);
                        $this->errorCode=self::ERROR_NONE;
                    } elseif (isset($_SESSION['last_project']) && is_numeric($_SESSION['last_project'])) {
                        foreach($projects as $project) {
                            if ($project->Project_ID == $_SESSION['last_project']) {
                                $this->setState('projectInfo', $project->Project_Name);
                                $this->setState('projectID', $project->Project_ID);
                                unset($_SESSION['last_project']);
                                $this->errorCode=self::ERROR_NONE;
                                break;
                            }
                        }
                    } else {
                        $project = $projects[0];
                        $this->setState('projectInfo', $project->Project_Name);
                        $this->setState('projectID', $project->Project_ID);
                        $this->errorCode=self::ERROR_NONE;
                    }
                } else {
                    $this->setState('projectInfo', 'No project');
                    $this->setState('projectID', 0);
                    $this->errorCode=self::ERROR_UNKNOWN_IDENTITY;
                }

                if ($userClientRow->User_Type == UsersClientList::CLIENT_ADMIN) {
                    $this->username = '******';
                } else if ($userClientRow->User_Type == UsersClientList::APPROVER) {
                    $this->username = '******';
                } else if ($userClientRow->User_Type == UsersClientList::PROCESSOR) {
                    $this->username = '******';
                } else if ($userClientRow->User_Type == UsersClientList::USER) {
                    $this->username = '******';
                } else {
                    $this->username = '******';
                }

                // reset user type if he id Admin, DB Admin OR DEC
                if ($user->User_Type == Users::ADMIN) {
                    $this->username = '******';
                } else if ($user->User_Type == Users::DB_ADMIN) {
                    $this->username = '******';
                } else if ($user->User_Type == Users::DATA_ENTRY_CLERK) {
                    $this->username = '******';
                }

                if ($user->User_Type == Users::USER) {
                    $this->setState('userType', $userClientRow->User_Type);
                } else {
                    $this->setState('userType', $user->User_Type);
                }
            } else {
                $this->setState('clientInfo', 'No company');
                $this->setState('clientID', 0);
                $this->setState('projectInfo', 'No project');
                $this->setState('projectID', 0);
                $this->setState('userType', 'Single User');
                $this->username = '******';
                $this->errorCode=self::ERROR_NONE;
            }
        }
        return !$this->errorCode;
    }
Пример #2
0
                    /**
     * 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();
            }
        }
    }
Пример #3
0
    /**
     * 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');
    }
    }
Пример #4
0
    /**
     * Returns aggregate settings for comma separated tiers ids
     * @param $tiers
     * @return null
     */
    public static function agregateTiersSettings ($tiers){
        $tiers_ids = explode(',',$tiers);
        $sum_settings_array = null;

        foreach ($tiers_ids as $tier_id) {
            if ($sum_settings_array) {
                //concatenation here
                $next_settings_array =  TiersSettings::model()->findByAttributes(array(
                    'Tier_ID'=> $tier_id
                ))->attributes;

                foreach ($next_settings_array as $field_name=>$value) {
                    if ($value) {
                        $sum_settings_array[$field_name] =
                                array_merge(
                                        $sum_settings_array[$field_name],
                                        array_diff( explode(',',$value), $sum_settings_array[$field_name] )
                                );
                    }
                }



            }  else {

                $settings = TiersSettings::model()->findByAttributes(array(
                   'Tier_ID'=> $tier_id
                ))->attributes;

                $settings = $settings ? $settings : array();

                foreach ($settings as $field_name=>$value) {
                    if ($value) {
                        $sum_settings_array[$field_name] = explode(',',$value);
                    } else {
                        $sum_settings_array[$field_name] = array();
                    }
                }
            }
        }
        //this param is html that used for dropdown in upload page
        $sum_settings_array['docsHtml']= self::htmlListFromArray($sum_settings_array['docs']);
        return $sum_settings_array;
    }