diff --git a/core/lib/Thelia/Action/Customer.php b/core/lib/Thelia/Action/Customer.php index 34f0b418c..4fe5d0f72 100755 --- a/core/lib/Thelia/Action/Customer.php +++ b/core/lib/Thelia/Action/Customer.php @@ -111,7 +111,8 @@ class Customer extends BaseAction implements EventSubscriberInterface $event->getReseller(), $event->getSponsor(), $event->getDiscount(), - $event->getCompany() + $event->getCompany(), + $event->getRef() ); $event->setCustomer($customer); diff --git a/core/lib/Thelia/Controller/Admin/CustomerController.php b/core/lib/Thelia/Controller/Admin/CustomerController.php index 95f6451c9..a901d4c6b 100644 --- a/core/lib/Thelia/Controller/Admin/CustomerController.php +++ b/core/lib/Thelia/Controller/Admin/CustomerController.php @@ -149,7 +149,8 @@ class CustomerController extends AbstractCrudController isset($data["reseller"])?$data["reseller"]:null, isset($data["sponsor"])?$data["sponsor"]:null, isset($data["discount"])?$data["discount"]:null, - isset($data["company"])?$data["company"]:null + isset($data["company"])?$data["company"]:null, + null ); return $customerCreateEvent; diff --git a/core/lib/Thelia/Core/Event/Customer/CustomerCreateOrUpdateEvent.php b/core/lib/Thelia/Core/Event/Customer/CustomerCreateOrUpdateEvent.php index f35430c36..ada834171 100755 --- a/core/lib/Thelia/Core/Event/Customer/CustomerCreateOrUpdateEvent.php +++ b/core/lib/Thelia/Core/Event/Customer/CustomerCreateOrUpdateEvent.php @@ -51,6 +51,7 @@ class CustomerCreateOrUpdateEvent extends CustomerEvent protected $sponsor; protected $discount; protected $company; + protected $ref; /** * @param int $title the title customer id @@ -71,8 +72,9 @@ class CustomerCreateOrUpdateEvent extends CustomerEvent * @param int $sponsor customer's id sponsor * @param float $discount * @param string $company + * @param string $ref */ - public function __construct($title, $firstname, $lastname, $address1, $address2, $address3, $phone, $cellphone, $zipcode, $city, $country, $email, $password, $lang, $reseller, $sponsor, $discount, $company) + public function __construct($title, $firstname, $lastname, $address1, $address2, $address3, $phone, $cellphone, $zipcode, $city, $country, $email, $password, $lang, $reseller, $sponsor, $discount, $company, $ref) { $this->address1 = $address1; $this->address2 = $address2; @@ -92,6 +94,7 @@ class CustomerCreateOrUpdateEvent extends CustomerEvent $this->sponsor = $sponsor; $this->discount = $discount; $this->company = $company; + $this->ref = $ref; } /** * @return mixed @@ -236,4 +239,14 @@ class CustomerCreateOrUpdateEvent extends CustomerEvent { return $this->sponsor; } + + /** + * @return string + */ + public function getRef() + { + return $this->ref; + } + + } diff --git a/core/lib/Thelia/Model/Customer.php b/core/lib/Thelia/Model/Customer.php index ffdc316de..39ace0648 100755 --- a/core/lib/Thelia/Model/Customer.php +++ b/core/lib/Thelia/Model/Customer.php @@ -54,7 +54,7 @@ class Customer extends BaseCustomer implements UserInterface * @param int $discount * @throws \Exception|\Symfony\Component\Config\Definition\Exception\Exception */ - public function createOrUpdate($titleId, $firstname, $lastname, $address1, $address2, $address3, $phone, $cellphone, $zipcode, $city, $countryId, $email = null, $plainPassword = null, $lang = null, $reseller = 0, $sponsor = null, $discount = 0, $company = null) + public function createOrUpdate($titleId, $firstname, $lastname, $address1, $address2, $address3, $phone, $cellphone, $zipcode, $city, $countryId, $email = null, $plainPassword = null, $lang = null, $reseller = 0, $sponsor = null, $discount = 0, $company = null, $ref = null) { $this ->setTitleId($titleId) @@ -65,6 +65,7 @@ class Customer extends BaseCustomer implements UserInterface ->setReseller($reseller) ->setSponsor($sponsor) ->setDiscount($discount) + ->setRef($ref) ; if(!is_null($lang)) { @@ -162,6 +163,17 @@ class Customer extends BaseCustomer implements UserInterface return $this; } + public function setRef($ref) + { + if(null === $ref && null === $this->ref) { + parent::setRef($this->generateRef()); + } else if(null !== $ref) { + parent::setRef($ref); + } + + return $this; + } + public function setEmail($email, $force = false) { $email = trim($email); @@ -242,7 +254,9 @@ class Customer extends BaseCustomer implements UserInterface // Set the serial number (for auto-login) $this->setRememberMeSerial(uniqid()); - $this->setRef($this->generateRef()); + if (null === $this->ref) { + $this->setRef($this->generateRef()); + } $this->dispatchEvent(TheliaEvents::BEFORE_CREATECUSTOMER, new CustomerEvent($this)); return true; diff --git a/core/lib/Thelia/Tests/Action/CustomerTest.php b/core/lib/Thelia/Tests/Action/CustomerTest.php index 50ef4fde6..396eb5257 100644 --- a/core/lib/Thelia/Tests/Action/CustomerTest.php +++ b/core/lib/Thelia/Tests/Action/CustomerTest.php @@ -63,7 +63,8 @@ class CustomerTest extends \PHPUnit_Framework_TestCase 0, 0, 0, - 'My super company' + 'My super company', + null ); $customerAction = new Customer($this->getContainer()); @@ -79,9 +80,69 @@ class CustomerTest extends \PHPUnit_Framework_TestCase $this->assertEquals($customerCreateEvent->getLastname(), $customerCreated->getLastname()); $this->assertEquals($customerCreateEvent->getTitle(), $customerCreated->getTitleId()); $this->assertEquals($customerCreateEvent->getEmail(), $customerCreated->getEmail()); - $this->assertEquals($customerCreated->getReseller(), $customerCreated->getReseller()); - $this->assertEquals($customerCreated->getSponsor(), $customerCreated->getSponsor()); - $this->assertEquals($customerCreated->getDiscount(), $customerCreated->getDiscount()); + $this->assertEquals($customerCreateEvent->getReseller(), $customerCreated->getReseller()); + $this->assertEquals($customerCreateEvent->getSponsor(), $customerCreated->getSponsor()); + $this->assertEquals($customerCreateEvent->getDiscount(), $customerCreated->getDiscount()); + + $addressCreated = $customerCreated->getDefaultAddress(); + + $this->assertInstanceOf("Thelia\Model\Address", $addressCreated); + + $this->assertEquals($customerCreateEvent->getFirstname(), $addressCreated->getFirstname()); + $this->assertEquals($customerCreateEvent->getLastname(), $addressCreated->getLastname()); + $this->assertEquals($customerCreateEvent->getTitle(), $addressCreated->getTitleId()); + $this->assertEquals($customerCreateEvent->getAddress1(), $addressCreated->getAddress1()); + $this->assertEquals($customerCreateEvent->getAddress2(), $addressCreated->getAddress2()); + $this->assertEquals($customerCreateEvent->getAddress3(), $addressCreated->getAddress3()); + $this->assertEquals($customerCreateEvent->getZipcode(), $addressCreated->getZipcode()); + $this->assertEquals($customerCreateEvent->getCity(), $addressCreated->getCity()); + $this->assertEquals($customerCreateEvent->getCountry(), $addressCreated->getCountryId()); + $this->assertEquals($customerCreateEvent->getPhone(), $addressCreated->getPhone()); + $this->assertEquals($customerCreateEvent->getCellphone(), $addressCreated->getCellphone()); + $this->assertEquals($customerCreateEvent->getCompany(), $addressCreated->getCompany()); + } + + public function testCreatedCustomerWithSpecifiedRef() + { + $customerCreateEvent = new CustomerCreateOrUpdateEvent( + 1, + "thelia", + "thelia", + "street address 1", + "street address 2", + "street address 3", + "0102030405", + "0607080910", + "63000", + "clermont-ferrand", + 64, + sprintf("%s@thelia.fr", uniqid()), + uniqid(), + 1, + 0, + 0, + 0, + 'My super company', + 'testRef' + ); + + $customerAction = new Customer($this->getContainer()); + + $customerAction->create($customerCreateEvent); + + $customerCreated = $customerCreateEvent->getCustomer(); + + $this->assertInstanceOf("Thelia\Model\Customer", $customerCreated, "new customer created must be an instance of Thelia\Model\Customer"); + $this->assertFalse($customerCreated->isNew()); + + $this->assertEquals($customerCreateEvent->getFirstname(), $customerCreated->getFirstname()); + $this->assertEquals($customerCreateEvent->getLastname(), $customerCreated->getLastname()); + $this->assertEquals($customerCreateEvent->getTitle(), $customerCreated->getTitleId()); + $this->assertEquals($customerCreateEvent->getEmail(), $customerCreated->getEmail()); + $this->assertEquals($customerCreateEvent->getReseller(), $customerCreated->getReseller()); + $this->assertEquals($customerCreateEvent->getSponsor(), $customerCreated->getSponsor()); + $this->assertEquals($customerCreateEvent->getDiscount(), $customerCreated->getDiscount()); + $this->assertEquals($customerCreateEvent->getRef(), $customerCreated->getRef()); $addressCreated = $customerCreated->getDefaultAddress(); diff --git a/local/modules/Front/Controller/CustomerController.php b/local/modules/Front/Controller/CustomerController.php index 2ae1c181e..2b2d38696 100755 --- a/local/modules/Front/Controller/CustomerController.php +++ b/local/modules/Front/Controller/CustomerController.php @@ -381,7 +381,8 @@ class CustomerController extends BaseFrontController isset($data["reseller"])?$data["reseller"]:null, isset($data["sponsor"])?$data["sponsor"]:null, isset($data["discount"])?$data["discount"]:null, - isset($data["company"])?$data["company"]:null + isset($data["company"])?$data["company"]:null, + null ); return $customerCreateEvent;