Skip to content

Commit

Permalink
[frontend-api] registration after order refactoring (#3462)
Browse files Browse the repository at this point in the history
  • Loading branch information
vitek-rostislav authored Oct 16, 2024
2 parents dd470e9 + ef455ad commit 1369c34
Show file tree
Hide file tree
Showing 13 changed files with 125 additions and 71 deletions.
6 changes: 3 additions & 3 deletions src/Controller/Admin/CustomerController.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserFacade;
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserListAdminFacade;
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserPasswordFacade;
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactoryInterface;
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactory;
use Shopsys\FrameworkBundle\Model\Order\OrderFacade;
use Shopsys\FrameworkBundle\Model\Security\LoginAdministratorAsUserUrlProvider;
use Symfony\Component\HttpFoundation\Request;
Expand All @@ -42,7 +42,7 @@ class CustomerController extends AdminBaseController
* @param \Shopsys\FrameworkBundle\Component\Grid\GridFactory $gridFactory
* @param \Shopsys\FrameworkBundle\Component\Domain\AdminDomainTabsFacade $adminDomainTabsFacade
* @param \Shopsys\FrameworkBundle\Model\Order\OrderFacade $orderFacade
* @param \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactoryInterface $customerUserUpdateDataFactory
* @param \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactory $customerUserUpdateDataFactory
* @param \Shopsys\FrameworkBundle\Component\Domain\Domain $domain
* @param \Shopsys\FrameworkBundle\Model\Security\LoginAdministratorAsUserUrlProvider $loginAdministratorAsUserUrlProvider
* @param \Shopsys\FrameworkBundle\Model\Customer\CustomerFacade $customerFacade
Expand All @@ -57,7 +57,7 @@ public function __construct(
protected readonly GridFactory $gridFactory,
protected readonly AdminDomainTabsFacade $adminDomainTabsFacade,
protected readonly OrderFacade $orderFacade,
protected readonly CustomerUserUpdateDataFactoryInterface $customerUserUpdateDataFactory,
protected readonly CustomerUserUpdateDataFactory $customerUserUpdateDataFactory,
protected readonly Domain $domain,
protected readonly LoginAdministratorAsUserUrlProvider $loginAdministratorAsUserUrlProvider,
protected readonly CustomerFacade $customerFacade,
Expand Down
6 changes: 3 additions & 3 deletions src/Form/Admin/Customer/User/CustomerUserUpdateFormType.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
use Shopsys\FrameworkBundle\Form\DeliveryAddressListType;
use Shopsys\FrameworkBundle\Form\OrderListType;
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUser;
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactoryInterface;
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactory;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
Expand All @@ -20,11 +20,11 @@
class CustomerUserUpdateFormType extends AbstractType
{
/**
* @param \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactoryInterface $customerUserUpdateDataFactory
* @param \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactory $customerUserUpdateDataFactory
* @param \Shopsys\FrameworkBundle\Component\Domain\Domain $domain
*/
public function __construct(
private readonly CustomerUserUpdateDataFactoryInterface $customerUserUpdateDataFactory,
private readonly CustomerUserUpdateDataFactory $customerUserUpdateDataFactory,
private readonly Domain $domain,
) {
}
Expand Down
26 changes: 26 additions & 0 deletions src/Migrations/Version20241002121943.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace Shopsys\FrameworkBundle\Migrations;

use Doctrine\DBAL\Schema\Schema;
use Shopsys\MigrationBundle\Component\Doctrine\Migrations\AbstractMigration;

class Version20241002121943 extends AbstractMigration
{
/**
* @param \Doctrine\DBAL\Schema\Schema $schema
*/
public function up(Schema $schema): void
{
$this->sql('ALTER TABLE customer_users DROP COLUMN newsletter_subscription');
}

/**
* @param \Doctrine\DBAL\Schema\Schema $schema
*/
public function down(Schema $schema): void
{
}
}
15 changes: 0 additions & 15 deletions src/Model/Customer/User/CustomerUser.php
Original file line number Diff line number Diff line change
Expand Up @@ -134,12 +134,6 @@ class CustomerUser implements UserInterface, TimelimitLoginInterface, PasswordAu
*/
protected $refreshTokenChain;

/**
* @var bool
* @ORM\Column(type="boolean")
*/
protected $newsletterSubscription;

/**
* @var \Shopsys\FrameworkBundle\Model\Customer\User\Role\CustomerUserRoleGroup
* @ORM\ManyToOne(targetEntity="\Shopsys\FrameworkBundle\Model\Customer\User\Role\CustomerUserRoleGroup")
Expand Down Expand Up @@ -191,7 +185,6 @@ protected function setData(CustomerUserData $customerUserData): void
$this->salesRepresentative = $customerUserData->salesRepresentative;
$this->telephone = $customerUserData->telephone;
$this->defaultDeliveryAddress = $customerUserData->defaultDeliveryAddress;
$this->newsletterSubscription = $customerUserData->newsletterSubscription;
$this->roleGroup = $customerUserData->roleGroup;
}

Expand Down Expand Up @@ -473,14 +466,6 @@ public function addRefreshTokenChain(CustomerUserRefreshTokenChain $customerUser
$this->refreshTokenChain->add($customerUserRefreshTokenChain);
}

/**
* @return bool
*/
public function isNewsletterSubscription()
{
return $this->newsletterSubscription;
}

/**
* @return bool
*/
Expand Down
5 changes: 4 additions & 1 deletion src/Model/Customer/User/CustomerUserDataFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Shopsys\FrameworkBundle\Model\Customer\Customer;
use Shopsys\FrameworkBundle\Model\Customer\CustomerRepository;
use Shopsys\FrameworkBundle\Model\Customer\User\Role\CustomerUserRoleGroupFacade;
use Shopsys\FrameworkBundle\Model\Newsletter\NewsletterFacade;
use Shopsys\FrameworkBundle\Model\Pricing\Group\PricingGroupSettingFacade;

class CustomerUserDataFactory implements CustomerUserDataFactoryInterface
Expand All @@ -15,11 +16,13 @@ class CustomerUserDataFactory implements CustomerUserDataFactoryInterface
* @param \Shopsys\FrameworkBundle\Model\Pricing\Group\PricingGroupSettingFacade $pricingGroupSettingFacade
* @param \Shopsys\FrameworkBundle\Model\Customer\User\Role\CustomerUserRoleGroupFacade $customerUserRoleGroupFacade
* @param \Shopsys\FrameworkBundle\Model\Customer\CustomerRepository $customerRepository
* @param \Shopsys\FrameworkBundle\Model\Newsletter\NewsletterFacade $newsletterFacade
*/
public function __construct(
protected readonly PricingGroupSettingFacade $pricingGroupSettingFacade,
protected readonly CustomerUserRoleGroupFacade $customerUserRoleGroupFacade,
protected readonly CustomerRepository $customerRepository,
protected readonly NewsletterFacade $newsletterFacade,
) {
}

Expand Down Expand Up @@ -123,7 +126,7 @@ protected function fillFromUser(CustomerUserData $customerUserData, CustomerUser
$customerUserData->telephone = $customerUser->getTelephone();
$customerUserData->customer = $customerUser->getCustomer();
$customerUserData->defaultDeliveryAddress = $customerUser->getDefaultDeliveryAddress();
$customerUserData->newsletterSubscription = $customerUser->isNewsletterSubscription();
$customerUserData->newsletterSubscription = $this->newsletterFacade->isSubscribed($customerUser);
$customerUserData->roleGroup = $customerUser->getRoleGroup();
}
}
10 changes: 7 additions & 3 deletions src/Model/Customer/User/CustomerUserFacade.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class CustomerUserFacade
/**
* @param \Doctrine\ORM\EntityManagerInterface $em
* @param \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserRepository $customerUserRepository
* @param \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactoryInterface $customerUserUpdateDataFactory
* @param \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactory $customerUserUpdateDataFactory
* @param \Shopsys\FrameworkBundle\Model\Customer\Mail\CustomerMailFacade $customerMailFacade
* @param \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserFactoryInterface $customerUserFactory
* @param \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserPasswordFacade $customerUserPasswordFacade
Expand All @@ -41,7 +41,7 @@ class CustomerUserFacade
public function __construct(
protected readonly EntityManagerInterface $em,
protected readonly CustomerUserRepository $customerUserRepository,
protected readonly CustomerUserUpdateDataFactoryInterface $customerUserUpdateDataFactory,
protected readonly CustomerUserUpdateDataFactory $customerUserUpdateDataFactory,
protected readonly CustomerMailFacade $customerMailFacade,
protected readonly CustomerUserFactoryInterface $customerUserFactory,
protected readonly CustomerUserPasswordFacade $customerUserPasswordFacade,
Expand Down Expand Up @@ -150,6 +150,10 @@ protected function createCustomerUser(
$this->em->persist($customerUser);
$this->em->flush();

if ($customerUserData->newsletterSubscription) {
$this->newsletterFacade->addSubscribedEmailIfNotExists($customerUser->getEmail(), $customerUser->getDomainId());
}

return $customerUser;
}

Expand Down Expand Up @@ -194,7 +198,7 @@ public function edit(
$customerUserUpdateData->billingAddressData,
);

if ($customerUser->isNewsletterSubscription()) {
if ($customerUserUpdateData->customerUserData->newsletterSubscription) {
$this->newsletterFacade->addSubscribedEmailIfNotExists($customerUser->getEmail(), $customerUser->getDomainId());
} else {
$this->newsletterFacade->deleteSubscribedEmailIfExists($customerUser->getEmail(), $customerUser->getDomainId());
Expand Down
69 changes: 61 additions & 8 deletions src/Model/Customer/User/CustomerUserUpdateDataFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
use Shopsys\FrameworkBundle\Model\Customer\DeliveryAddressDataFactoryInterface;
use Shopsys\FrameworkBundle\Model\Order\Order;

class CustomerUserUpdateDataFactory implements CustomerUserUpdateDataFactoryInterface
class CustomerUserUpdateDataFactory
{
/**
* @param \Shopsys\FrameworkBundle\Model\Customer\BillingAddressDataFactoryInterface $billingAddressDataFactory
Expand Down Expand Up @@ -53,6 +53,30 @@ public function create(): CustomerUserUpdateData
);
}

/**
* @param \Shopsys\FrameworkBundle\Model\Order\Order $order
* @param string $password
* @return \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateData
*/
public function createFromOrder(Order $order, string $password): CustomerUserUpdateData
{
$customerUserUpdateData = $this->create();

$customerUserUpdateData->customerUserData = $this->getCustomerUserDataByOrder($order, $password);
$this->fillBillingAddressDataFromOrder($order, $customerUserUpdateData->billingAddressData);

$transport = $order->getTransport();

if (
!$transport->isPersonalPickup() &&
!$transport->isPacketery()
) {
$customerUserUpdateData->deliveryAddressData = $this->getAmendedDeliveryAddressDataByOrder($order);
}

return $customerUserUpdateData;
}

/**
* @param \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUser $customerUser
* @return \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateData
Expand Down Expand Up @@ -140,13 +164,7 @@ protected function getAmendedBillingAddressDataByOrder(Order $order, BillingAddr
$billingAddressData = $this->billingAddressDataFactory->createFromBillingAddress($billingAddress);

if ($billingAddress->getStreet() === null) {
$billingAddressData->companyName = $order->getCompanyName();
$billingAddressData->companyNumber = $order->getCompanyNumber();
$billingAddressData->companyTaxNumber = $order->getCompanyTaxNumber();
$billingAddressData->street = $order->getStreet();
$billingAddressData->city = $order->getCity();
$billingAddressData->postcode = $order->getPostcode();
$billingAddressData->country = $order->getCountry();
$this->fillBillingAddressDataFromOrder($order, $billingAddressData);
}

return $billingAddressData;
Expand Down Expand Up @@ -180,4 +198,39 @@ protected function getAmendedDeliveryAddressDataByOrder(Order $order, ?DeliveryA

return $deliveryAddressData;
}

/**
* @param \Shopsys\FrameworkBundle\Model\Order\Order $order
* @param \Shopsys\FrameworkBundle\Model\Customer\BillingAddressData $billingAddressData
*/
protected function fillBillingAddressDataFromOrder(
Order $order,
BillingAddressData $billingAddressData,
): void {
$billingAddressData->companyCustomer = $order->isCompanyCustomer();
$billingAddressData->companyName = $order->getCompanyName();
$billingAddressData->companyNumber = $order->getCompanyNumber();
$billingAddressData->companyTaxNumber = $order->getCompanyTaxNumber();
$billingAddressData->street = $order->getStreet();
$billingAddressData->city = $order->getCity();
$billingAddressData->postcode = $order->getPostcode();
$billingAddressData->country = $order->getCountry();
}

/**
* @param \Shopsys\FrameworkBundle\Model\Order\Order $order
* @param string $password
* @return \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserData
*/
protected function getCustomerUserDataByOrder(Order $order, string $password): CustomerUserData
{
$customerUserData = $this->customerUserDataFactory->createForDomainId($order->getDomainId());
$customerUserData->firstName = $order->getFirstName();
$customerUserData->lastName = $order->getLastName();
$customerUserData->telephone = $order->getTelephone();
$customerUserData->email = $order->getEmail();
$customerUserData->password = $password;

return $customerUserData;
}
}
34 changes: 0 additions & 34 deletions src/Model/Customer/User/CustomerUserUpdateDataFactoryInterface.php

This file was deleted.

10 changes: 10 additions & 0 deletions src/Model/Newsletter/NewsletterFacade.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use DateTimeImmutable;
use Doctrine\ORM\EntityManagerInterface;
use Shopsys\FrameworkBundle\Form\Admin\QuickSearch\QuickSearchFormData;
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUser;

class NewsletterFacade
{
Expand Down Expand Up @@ -108,4 +109,13 @@ public function deleteSubscribedEmailIfExists(string $email, int $domainId): voi

$this->delete($newsletterSubscriber);
}

/**
* @param \Shopsys\FrameworkBundle\Model\Customer\User\CustomerUser $customerUser
* @return bool
*/
public function isSubscribed(CustomerUser $customerUser): bool
{
return $this->findNewsletterSubscriberByEmailAndDomainId($customerUser->getEmail(), $customerUser->getDomainId()) !== null;
}
}
8 changes: 8 additions & 0 deletions src/Model/Order/Order.php
Original file line number Diff line number Diff line change
Expand Up @@ -1234,4 +1234,12 @@ public function resetOrderPaymentStatusPageValidityHash(): void
{
$this->orderPaymentStatusPageValidityHash = Uuid::uuid4()->toString();
}

/**
* @return bool
*/
public function isCompanyCustomer(): bool
{
return $this->getCompanyName() !== null && $this->getCompanyNumber() !== null;
}
}
2 changes: 1 addition & 1 deletion src/Model/Order/OrderDataFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ protected function fillFromOrder(OrderData $orderData, Order $order): void
$orderData->companyName = $order->getCompanyName();
$orderData->companyNumber = $order->getCompanyNumber();
$orderData->companyTaxNumber = $order->getCompanyTaxNumber();
$orderData->isCompanyCustomer = $order->getCompanyName() !== null && $order->getCompanyNumber() !== null;
$orderData->isCompanyCustomer = $order->isCompanyCustomer();
$orderData->street = $order->getStreet();
$orderData->city = $order->getCity();
$orderData->postcode = $order->getPostcode();
Expand Down
3 changes: 0 additions & 3 deletions src/Resources/config/services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -713,9 +713,6 @@ services:
Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserRefreshTokenChainFactoryInterface:
alias: Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserRefreshTokenChainFactory

Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactoryInterface:
alias: Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactory

Shopsys\FrameworkBundle\Model\Customer\User\Role\CustomerUserRole: ~

Shopsys\FrameworkBundle\Model\Customer\User\Role\CustomerUserRoleGroupSetting: ~
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserDataFactory;
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactory;
use Shopsys\FrameworkBundle\Model\Customer\User\Role\CustomerUserRoleGroupFacade;
use Shopsys\FrameworkBundle\Model\Newsletter\NewsletterFacade;
use Shopsys\FrameworkBundle\Model\Order\Order;
use Shopsys\FrameworkBundle\Model\Pricing\Group\PricingGroupSettingFacade;
use Tests\FrameworkBundle\Test\Provider\TestOrderProvider;
Expand Down Expand Up @@ -184,6 +185,7 @@ private function getCustomerUserUpdateDataFactory(): CustomerUserUpdateDataFacto
$this->createMock(PricingGroupSettingFacade::class),
$this->createMock(CustomerUserRoleGroupFacade::class),
$this->createMock(CustomerRepository::class),
$this->createMock(NewsletterFacade::class),
),
);
}
Expand Down

0 comments on commit 1369c34

Please sign in to comment.