1717use Magento \Customer \Model \Data \CustomerSecureFactory ;
1818use Magento \Customer \Model \Delegation \Data \NewOperation ;
1919use Magento \Customer \Model \Delegation \Storage as DelegatedStorage ;
20+ use Magento \Customer \Model \ResourceModel \Customer \Collection ;
2021use Magento \Framework \Api \DataObjectHelper ;
2122use Magento \Framework \Api \ExtensibleDataObjectConverter ;
2223use Magento \Framework \Api \ExtensionAttribute \JoinProcessorInterface ;
3132/**
3233 * Customer repository.
3334 *
35+ * CRUD operations for customer entity
36+ *
3437 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
3538 * @SuppressWarnings(PHPMD.TooManyFields)
3639 */
@@ -187,8 +190,7 @@ public function save(CustomerInterface $customer, $passwordHash = null)
187190 {
188191 /** @var NewOperation|null $delegatedNewOperation */
189192 $ delegatedNewOperation = !$ customer ->getId () ? $ this ->delegatedStorage ->consumeNewOperation () : null ;
190- $ prevCustomerData = null ;
191- $ prevCustomerDataArr = null ;
193+ $ prevCustomerData = $ prevCustomerDataArr = null ;
192194 if ($ customer ->getId ()) {
193195 $ prevCustomerData = $ this ->getById ($ customer ->getId ());
194196 $ prevCustomerDataArr = $ prevCustomerData ->__toArray ();
@@ -214,6 +216,7 @@ public function save(CustomerInterface $customer, $passwordHash = null)
214216 $ prevCustomerData ? $ prevCustomerData ->getStoreId () : $ this ->storeManager ->getStore ()->getId ()
215217 );
216218 }
219+ $ this ->setCustomerGroupId ($ customerModel , $ customerArr , $ prevCustomerDataArr );
217220 // Need to use attribute set or future updates can cause data loss
218221 if (!$ customerModel ->getAttributeSetId ()) {
219222 $ customerModel ->setAttributeSetId (CustomerMetadataInterface::ATTRIBUTE_SET_ID_CUSTOMER );
@@ -452,4 +455,18 @@ private function setValidationFlag($customerArray, $customerModel)
452455 $ customerModel ->setData ('ignore_validation_flag ' , true );
453456 }
454457 }
458+
459+ /**
460+ * Set customer group id
461+ *
462+ * @param Customer $customerModel
463+ * @param array $customerArr
464+ * @param array $prevCustomerDataArr
465+ */
466+ private function setCustomerGroupId ($ customerModel , $ customerArr , $ prevCustomerDataArr )
467+ {
468+ if (!isset ($ customerArr ['group_id ' ]) && $ prevCustomerDataArr && isset ($ prevCustomerDataArr ['group_id ' ])) {
469+ $ customerModel ->setGroupId ($ prevCustomerDataArr ['group_id ' ]);
470+ }
471+ }
455472}
0 commit comments