<?php
namespace App\Console\Management;
use App\Entity\Sales\AccountEnrollment;
use App\Entity\Sales\PlacementHiding;
use App\Entity\User;
use App\Repository\UserRepository;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\ORM\EntityManagerInterface;
use Money\Currency;
use Money\Money;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
class UpdateUsersTrustedStatus extends Command
{
const ENROLLMENTS_AMOUNT_TO_TRUST = 10000000; //100K
protected EntityManagerInterface $entityManager;
protected UserRepository $userRepository;
public function __construct(ManagerRegistry $managerRegistry)
{
parent::__construct();
$this->entityManager = $managerRegistry->getManagerForClass(PlacementHiding::class);
$this->userRepository = $this->entityManager->getRepository(User::class);
}
/**
* @inheritDoc
*/
protected function configure()
{
$this->setName('update:users:set-trusted');
}
/**
* @inheritDoc
*/
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->progressStart();
$io->title('Setting trusted flag to users');
$connection = $this->entityManager->getConnection();
$connection->getConfiguration()->setSQLLogger(null);
foreach ($this->userRepository->findBy(['trusted' => false, 'enabled' => true]) as $user) {
$sum = array_reduce($user->getEnrollments()->toArray(), function(Money $sum, AccountEnrollment $enrollment): Money {
$sum = $sum->add($enrollment->getEnrolledMoney());
return $sum;
}, new Money(0, new Currency('RUB')));
if($sum->getAmount() >= self::ENROLLMENTS_AMOUNT_TO_TRUST) {
$user->setTrusted(true);
$this->entityManager->flush();
}
$io->progressAdvance();
}
$io->progressFinish();
$io->success('Success setting trusted flag to users');
return Command::SUCCESS;
}
}