예제 #1
0
 public function testAttributesToAccount()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $super = Yii::app()->user->userModel;
     $account = AccountTestHelper::createAccountByNameForOwner('Account1', $super);
     $contact = ContactTestHelper::createContactByNameForOwner('Contact1', $super);
     $contact->officePhone = '12345';
     $contact->officeFax = '12345';
     $saved = $contact->save();
     $this->assertTrue($saved);
     $account = LeadsUtil::attributesToAccount($contact, $account);
     $this->assertEquals($contact->officePhone, $account->officePhone);
     $this->assertEquals($contact->officeFax, $account->officeFax);
 }
 public function actionConvert($id)
 {
     assert('!empty($id)');
     LeadsUtil::removeFromSession(LeadsUtil::LEAD_CONVERSION_ACCOUNT_DATA_SESSION_KEY);
     $contact = Contact::getById(intval($id));
     if (!LeadsUtil::isStateALead($contact->state)) {
         $urlParams = array('/contacts/' . $this->getId() . '/details', 'id' => $contact->id);
         $this->redirect($urlParams);
     }
     $convertToAccountSetting = LeadsModule::getConvertToAccountSetting();
     $selectAccountForm = new AccountSelectForm();
     $account = new Account();
     ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($contact);
     $userCanAccessContacts = RightsUtil::canUserAccessModule('ContactsModule', Yii::app()->user->userModel);
     $userCanAccessAccounts = RightsUtil::canUserAccessModule('AccountsModule', Yii::app()->user->userModel);
     $userCanCreateAccount = RightsUtil::doesUserHaveAllowByRightName('AccountsModule', AccountsModule::RIGHT_CREATE_ACCOUNTS, Yii::app()->user->userModel);
     LeadsControllerSecurityUtil::resolveCanUserProperlyConvertLead($userCanAccessContacts, $userCanAccessAccounts, $convertToAccountSetting);
     if (isset($_POST['AccountSelectForm'])) {
         $selectAccountForm->setAttributes($_POST['AccountSelectForm']);
         if ($selectAccountForm->validate()) {
             $account = Account::getById(intval($selectAccountForm->accountId));
             $accountPostData = array('accountId' => intval($selectAccountForm->accountId), 'SelectAccount' => true);
             LeadsUtil::storeIntoSession(LeadsUtil::LEAD_CONVERSION_ACCOUNT_DATA_SESSION_KEY, $accountPostData);
             $this->redirect(array('/leads/default/convertFinal', 'id' => $contact->id));
         }
     } elseif (isset($_POST['Account'])) {
         $account = LeadsUtil::attributesToAccountWithNoPostData($contact, $account, $_POST['Account']);
         $savedSuccessfully = false;
         $modelToStringValue = null;
         $postData = $_POST['Account'];
         $controllerUtil = static::getZurmoControllerUtil();
         $account = $controllerUtil->saveModelFromPost($postData, $account, $savedSuccessfully, $modelToStringValue, true);
         if (!$account->getErrors()) {
             $accountPostData = $postData;
             $accountPostData['CreateAccount'] = true;
             LeadsUtil::storeIntoSession(LeadsUtil::LEAD_CONVERSION_ACCOUNT_DATA_SESSION_KEY, $accountPostData);
             $this->redirect(array('/leads/default/convertFinal', 'id' => $contact->id));
         }
     } elseif (isset($_POST['AccountSkip']) || $convertToAccountSetting == LeadsModule::CONVERT_NO_ACCOUNT || $convertToAccountSetting == LeadsModule::CONVERT_ACCOUNT_NOT_REQUIRED && !$userCanAccessAccounts) {
         $accountPostData = array('AccountSkip' => true);
         LeadsUtil::storeIntoSession(LeadsUtil::LEAD_CONVERSION_ACCOUNT_DATA_SESSION_KEY, $accountPostData);
         $this->redirect(array('/leads/default/convertFinal', 'id' => $contact->id));
     } else {
         $account = LeadsUtil::attributesToAccount($contact, $account);
     }
     $progressBarAndStepsView = new LeadConversionStepsAndProgressBarForWizardView();
     $convertView = new LeadConvertView($this->getId(), $this->getModule()->getId(), $contact->id, strval($contact), $selectAccountForm, $account, $convertToAccountSetting, $userCanCreateAccount);
     $view = new LeadsPageView(ZurmoDefaultViewUtil::makeTwoStandardViewsForCurrentUser($this, $progressBarAndStepsView, $convertView));
     echo $view->render();
 }
예제 #3
0
 public function actionConvert($id)
 {
     assert('!empty($id)');
     $contact = Contact::getById(intval($id));
     if (!LeadsUtil::isStateALead($contact->state)) {
         $urlParams = array('/contacts/' . $this->getId() . '/details', 'id' => $contact->id);
         $this->redirect($urlParams);
     }
     $convertToAccountSetting = LeadsModule::getConvertToAccountSetting();
     $selectAccountForm = new AccountSelectForm();
     $account = new Account();
     ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($contact);
     $userCanAccessContacts = RightsUtil::canUserAccessModule('ContactsModule', Yii::app()->user->userModel);
     $userCanAccessAccounts = RightsUtil::canUserAccessModule('AccountsModule', Yii::app()->user->userModel);
     $userCanCreateAccount = RightsUtil::doesUserHaveAllowByRightName('AccountsModule', AccountsModule::RIGHT_CREATE_ACCOUNTS, Yii::app()->user->userModel);
     LeadsControllerSecurityUtil::resolveCanUserProperlyConvertLead($userCanAccessContacts, $userCanAccessAccounts, $convertToAccountSetting);
     if (isset($_POST['AccountSelectForm'])) {
         $selectAccountForm->setAttributes($_POST['AccountSelectForm']);
         if ($selectAccountForm->validate()) {
             $account = Account::getById(intval($selectAccountForm->accountId));
             $this->actionSaveConvertedContact($contact, $account);
         }
     } elseif (isset($_POST['Account'])) {
         $account = LeadsUtil::attributesToAccountWithNoPostData($contact, $account, $_POST['Account']);
         $account->setAttributes($_POST['Account']);
         if ($account->save()) {
             $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($contact);
             ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($account, $explicitReadWriteModelPermissions);
             if (!$account->save()) {
                 throw new NotSupportedException();
             }
             $this->actionSaveConvertedContact($contact, $account);
         }
     } elseif (isset($_POST['AccountSkip']) || $convertToAccountSetting == LeadsModule::CONVERT_NO_ACCOUNT || $convertToAccountSetting == LeadsModule::CONVERT_ACCOUNT_NOT_REQUIRED && !$userCanAccessAccounts) {
         $this->actionSaveConvertedContact($contact);
     } else {
         $account = LeadsUtil::attributesToAccount($contact, $account);
     }
     $convertView = new LeadConvertView($this->getId(), $this->getModule()->getId(), $contact->id, strval($contact), $selectAccountForm, $account, $convertToAccountSetting, $userCanCreateAccount);
     $view = new LeadsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $convertView));
     echo $view->render();
 }
예제 #4
0
 /**
  * @depends testCreateStateValues
  */
 public function testAttributesToAccount()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $industries = array('Automotive', 'Adult Entertainment', 'Financial Services', 'Mercenaries & Armaments');
     $industryFieldData = CustomFieldData::getByName('Industries');
     $industryFieldData->serializedData = serialize($industries);
     $this->assertTrue($industryFieldData->save());
     $user = UserTestHelper::createBasicUser('Bobby');
     $contact = new Contact();
     $contact->owner = $user;
     $contact->title->value = 'Mr.';
     $contact->firstName = 'Super';
     $contact->lastName = 'Man';
     $contact->companyName = 'ABC Company';
     $stateIds = ContactsUtil::getContactStateDataKeyedById();
     foreach ($stateIds as $stateId => $notUsed) {
         $stateToUse = ContactState::getById($stateId);
         break;
     }
     $contact->state = $stateToUse;
     //grab first state.
     $contact->officePhone = '1234567890';
     $contact->officeFax = '1222222222';
     $contact->industry->value = $industries[1];
     $contact->website = 'http://www.something.com';
     $contact->primaryAddress->street1 = '129 Noodle Boulevard';
     $contact->primaryAddress->street2 = 'Apartment 6000A';
     $contact->primaryAddress->city = 'Noodleville';
     $contact->primaryAddress->postalCode = '23453';
     $contact->primaryAddress->country = 'The Good Old US of A';
     $contact->secondaryAddress->street1 = '25 de Agosto 2543';
     $contact->secondaryAddress->street2 = 'Local 3';
     $contact->secondaryAddress->city = 'Ciudad de Los Fideos';
     $contact->secondaryAddress->postalCode = '5123-4';
     $contact->secondaryAddress->country = 'Latinoland';
     $this->assertTrue($contact->save());
     $id = $contact->id;
     unset($contact);
     $contact = Contact::getById($id);
     $account = new Account();
     $account = LeadsUtil::attributesToAccount($contact, $account);
     $this->assertTrue($account->save());
     $id = $account->id;
     unset($account);
     $account = Account::getById($id);
     $this->assertEquals('ABC Company', $account->name);
     $this->assertEquals('1234567890', $account->officePhone);
     $this->assertEquals('1222222222', $account->officeFax);
     $this->assertEquals('http://www.something.com', $account->website);
     $this->assertEquals($industries[1], $account->industry->value);
     $this->assertEquals('super', $account->owner->username);
     $this->assertEquals('129 Noodle Boulevard', $account->billingAddress->street1);
     $this->assertEquals('Apartment 6000A', $account->billingAddress->street2);
     $this->assertEquals('Noodleville', $account->billingAddress->city);
     $this->assertEquals('23453', $account->billingAddress->postalCode);
     $this->assertEquals('The Good Old US of A', $account->billingAddress->country);
     $this->assertEquals('25 de Agosto 2543', $account->shippingAddress->street1);
     $this->assertEquals('Local 3', $account->shippingAddress->street2);
     $this->assertEquals('Ciudad de Los Fideos', $account->shippingAddress->city);
     $this->assertEquals('5123-4', $account->shippingAddress->postalCode);
     $this->assertEquals('Latinoland', $account->shippingAddress->country);
 }