Projekt

Allgemein

Profil

GX-Task #47214

Von Daniel Würdemann vor fast 8 Jahren aktualisiert

# Unterstützung der AddonValues für den CustomerService 

 Nach *Category-*, *Order-* und *ProductService* werden die AddonValues ab Gambio GX 3.1.1.0_BETA4 nun auch im *CustomerService* unterstützt. 

 Betroffene Dateien: 

 * GXMainComponents/Extensions/Customers/CreateAccountProcess.inc.php 
 * GXMainComponents/Extensions/Customers/CustomerInputToCollectionTransformer.inc.php 
 * GXMainComponents/Services/Core/Customer/Customer.inc.php 
 * GXMainComponents/Services/Core/Customer/CustomerAddonValueStorage.inc.php 
 * GXMainComponents/Services/Core/Customer/CustomerInputValidator.inc.php 
 * GXMainComponents/Services/Core/Customer/CustomerRegistrationInputValidatorService.inc.php 
 * GXMainComponents/Services/Core/Customer/CustomerRepository.inc.php 
 * GXMainComponents/Services/Core/Customer/CustomerService.inc.php 
 * GXMainComponents/Services/Core/Customer/CustomerServiceFactory.inc.php 
 * GXMainComponents/Services/Core/Customer/CustomerWriteService.inc.php 
 * GXMainComponents/Services/Core/Customer/Interfaces/CustomerInterface.inc.php 
 * GXMainComponents/Services/Core/Customer/Interfaces/CustomerServiceInterface.inc.php 
 * GXMainComponents/Services/Core/Customer/Interfaces/CustomerWriteServiceInterface.inc.php 
 * GXMainComponents/Services/System/AddonValue/AddonValueStorageFactory.inc.php 

 --- 

 ## CustomerInterface 
 Das ```CustomerInterface``` erweitert nun das ```AddonValueContainerInterface```. 

 --- 

 ## Customer 
 Die Klasse ```Customer``` implementiert nun folgende Methoden. 

 * ```getAddonValueContainerId()``` 
 * ```getAddonValue(StringType $key)``` 
 * ```getAddonValues()``` 
 * ```setAddonValue(StringType $key, StringType $value)``` 
 * ```addAddonValues(KeyValueCollection $keyValueCollection)``` 
 * ```deleteAddonValue(StringType $key)``` 

 ```Customer::__construct()``` weist ```Customer::$addonValues``` eine leere *EditableKeyValueCollection* zu. 

 --- 

 ## CustomerService 
 ### CustomerService::createNewCustomer 
 vorher: 

 ```php 
 public function createNewCustomer( 
	 CustomerEmailInterface $email, 
	 CustomerPasswordInterface $password, 
	 DateTime $dateOfBirth, 
	 CustomerVatNumberInterface $vatNumber, 
	 CustomerCallNumberInterface $telephoneNumber, 
	 CustomerCallNumberInterface $faxNumber, 
	 AddressBlockInterface $addressBlock); 
 ``` 
 nachher: 

 ```php 
 public function createNewCustomer( 
	 CustomerEmailInterface $email, 
	 CustomerPasswordInterface $password, 
	 DateTime $dateOfBirth, 
	 CustomerVatNumberInterface $vatNumber, 
	 CustomerCallNumberInterface $telephoneNumber, 
	 CustomerCallNumberInterface $faxNumber, 
	 AddressBlockInterface $addressBlock, 
	 KeyValueCollection $addonValues); 
 ``` 

 Statt ```CustomerService```, der ```CustomerReadService``` und ```CustomerWriteService``` vereint, wird aktuell ```CustomerReadService``` bzw. ```CustomerWriteService``` verwendet. 

 --- 

 ## CustomerWriteService 
 ### CustomerWriteService::createNewRegistree 
 vorher: 

 ```php 
 public function createNewRegistree( 
	 CustomerEmailInterface $email, 
	 CustomerPasswordInterface $password, 
	 DateTime $dateOfBirth, 
	 CustomerVatNumberInterface $vatNumber, 
	 CustomerCallNumberInterface $telephoneNumber, 
	 CustomerCallNumberInterface $faxNumber, 
	 AddressBlockInterface $addressBlock 
 ); 
 ``` 
 nachher: 

 ```php 
 public function createNewRegistree( 
	 CustomerEmailInterface $email, 
	 CustomerPasswordInterface $password, 
	 DateTime $dateOfBirth, 
	 CustomerVatNumberInterface $vatNumber, 
	 CustomerCallNumberInterface $telephoneNumber, 
	 CustomerCallNumberInterface $faxNumber, 
	 AddressBlockInterface $addressBlock, 
	 KeyValueCollection $addonValues 
 ); 
 ``` 

 O.g. veränderte Methodenaufrufe befinden sich an folgenden Stellen: 

 * ```CreateAccountProcess::_saveRegistree``` 
 * ```CustomersApiV2Controller::post``` 
 * ```CustomerService::createNewCustomer``` 

 ### CustomerWriteService::createNewRegistree 
 vorher: 

 ```php 
 public function createNewGuest( 
	 CustomerEmailInterface $email, 
	 DateTime $dateOfBirth, 
	 CustomerVatNumberInterface $vatNumber, 
	 CustomerCallNumberInterface $telephoneNumber, 
	 CustomerCallNumberInterface $faxNumber, 
	 AddressBlockInterface $addressBlock 
 ); 
 ``` 
 nachher: 

 ```php 
 public function createNewGuest( 
	 CustomerEmailInterface $email, 
	 DateTime $dateOfBirth, 
	 CustomerVatNumberInterface $vatNumber, 
	 CustomerCallNumberInterface $telephoneNumber, 
	 CustomerCallNumberInterface $faxNumber, 
	 AddressBlockInterface $addressBlock, 
	 KeyValueCollection $addonValues 
 ); 
 ``` 

 O.g. veränderte Methodenaufrufe befinden sich an folgenden Stellen: 

 * ```CreateAccountProcess::_saveGuest``` 
 * ```CustomersApiV2Controller::post``` 
 * ```CustomerService::createNewGuest``` 
 * ```PayPalController::actionReturnFromECS``` 

 --- 

 ## CustomerRepository 
 ### CustomerRepository::__construct 
 vorher: 

 ```php 
 public function __construct( 
	 CustomerWriterInterface $customerWriter, 
	 CustomerReaderInterface $customerReader, 
	 CustomerDeleterInterface $customerDeleter, 
	 CustomerAddressRepositoryInterface $customerAddressRepository, 
	 AbstractCustomerFactory $customerFactory; 
 ``` 
 nachher: 

 ```php 
 public function __construct( 
	 CustomerWriterInterface $customerWriter, 
	 CustomerReaderInterface $customerReader, 
	 CustomerDeleterInterface $customerDeleter, 
	 CustomerAddressRepositoryInterface $customerAddressRepository, 
	 AbstractCustomerFactory $customerFactory, 
	 AddonValueServiceInterface $addonValueService); 
 ``` 

 ### CustomerRepository::store 
 Diese Methode ruft nun ```$this->addonValueService->storeAddonValues($customer);``` nach Speicherung des Customers auf. 

 ### CustomerRepository::getCustomerById 
 Diese Methode ruft nun ```$this->addonValueService-> loadAddonValues($customer);``` nach Laden des Customers auf. 

 ### CustomerRepository::getRegistreeByEmail 
 Diese Methode ruft nun ```$this->addonValueService-> loadAddonValues($customer);``` sofern ein Customer gefunden wurde. 

 ### CustomerRepository::deleteCustomerById 
 Diese Methode ruft nun ```$this->addonValueService-> deleteAddonValues($customer);``` nach Löschung des Customers auf. 

 ### CustomerRepository::deleteGuestByEmail 
 Diese Methode ruft nun ```$this->addonValueService-> deleteAddonValues($customer);``` auf. 

 ### CustomerRepository::getGuestByEmail 
 Diese Methode ruft nun ```$this->addonValueService-> loadAddonValues($customer);``` sofern ein Customer gefunden wurde. 

 ### CustomerRepository::filterCustomers 
 Diese Methode ruft nun ```$this->addonValueService-> loadAddonValues($customer);``` für alle gefundenen Customer Objekte. 

 --- 

 ## CustomerInputToCollectionTransformer 
 ### CustomerInputToCollectionTransformer::_getCustomerCollectionFromInputArray### 
 Diese Methode ruf nun ```CustomerInputToCollectionTransformer::_getCustomerAddonValuesFromInputArray``` auf.   
 Der Zugriff auf die *addonValues* erfolgt über ```$customerCollection->getValue('addon_values');```. 

 ### CustomerInputToCollectionTransformer::_getCustomerAddonValuesFromInputArray 
 Diese Methode wurde hinzugefügt und gibt eine leere *EditableKeyValueCollection* zurück. 

 Mittels Overload kann diese Methode überladen werden, um eine *EditableKeyValueCollection* mit bestimmte Daten aus dem Übergabeparameter ```$intputArray```(enthält ```$_POST```) zu erstellen und zurückzugeben. Diese *EditableKeyValueCollection* sollte alle *addonValues* enthalten, die während der Validierung und Registrierung verarbeitet werden sollen. 

 --- 

 ## CustomerRegistrationInputValidatorService 
 ### CustomerRegistrationInputValidatorService::validateCustomerDataByArray 
 Diese Methode ruft nun ```CustomerInputValidator::validateAddonValues($inputArray['addon_values'])``` auf. In ```$inputArray['addon_values']```ist der Rückgabewert der Methode ```CustomerInputToCollectionTransformer::_getCustomerAddonValuesFromInputArray``` gespeichert. 

 --- 

 ## CustomerInputValidator::validateAddonValues 
 Diese Methode wurde hinzugefügt und gibt ```true``` zurück. 

 Mittels Overload kann hier eine eigene Validierung der *addonValues* implementiert werden. 

 ## Beispiel 
 Im Anhang dieses Tickets befindet sich die Datei *AddonValues_CustomerService_Sample.zip* mit einem Beispiel, welches die Gast- und Kundenregistrierung um ein zusätzliches Formularelement inkl. Validierung erweitert und den Wert in die Tabelle *addon_values_storage* speichert.

Zurück