src/Command/EfsFillRewardsPricesCommand.php line 108

Open in your IDE?
  1. <?php
  2. namespace App\Command;
  3. use App\Entity\Product;
  4. use App\Helper\EnumsHelper;
  5. use App\Services\B2BGoldAndSilver;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\Console\Attribute\AsCommand;
  8. use Symfony\Component\Console\Command\Command;
  9. use Symfony\Component\Console\Input\InputArgument;
  10. use Symfony\Component\Console\Input\InputInterface;
  11. use Symfony\Component\Console\Input\InputOption;
  12. use Symfony\Component\Console\Output\OutputInterface;
  13. use Symfony\Component\Console\Style\SymfonyStyle;
  14. class EfsFillRewardsPricesCommand extends Command
  15. {
  16.     protected static $defaultName 'efs:rewards:fill';
  17.     protected static $defaultDescription 'Add a short description for your command';
  18.     public function __construct(EntityManagerInterface $entityManagerB2BGoldAndSilver $b2BGoldAndSilver)
  19.     {
  20.         $this->entityManager $entityManager;
  21.         $this->b2BGoldAndSilver $b2BGoldAndSilver;
  22.         $this->connection $this->entityManager->getConnection();
  23.         parent::__construct(self::$defaultName);
  24.     }
  25.     protected function configure(): void
  26.     {
  27. //        $this
  28. //            ->addArgument('arg1', InputArgument::OPTIONAL, 'Argument description')
  29. //            ->addOption('option1', null, InputOption::VALUE_NONE, 'Option description')
  30. //        ;
  31.     }
  32.     protected function execute(InputInterface $inputOutputInterface $output): int
  33.     {
  34.         $io = new SymfonyStyle($input$output);
  35.         $query $this->connection->executeQuery('SELECT id FROM product WHERE (product_type = "bond" or product_type = "loan" or product_type = "stock")');
  36.         $resultProducts $query->fetchAllAssociative();
  37.         // this up() migration is auto-generated, please modify it to your needs
  38.         $query $this->connection->executeQuery('SELECT * FROM affboss_affjuniors WHERE relation_type = "structure"');
  39.         $result $query->fetchAllAssociative();
  40.         // direct odmeny
  41.         $directAlreadyCreated = [];
  42.         foreach ($result as $row){
  43.             if(false == in_array($row['user_target'], $directAlreadyCreated)){
  44.                 $directAlreadyCreated[] = $row['user_target'];
  45.                 foreach ($resultProducts as $product) {
  46.                     //$this->connection->executeQuery("INSERT INTO affboss_affjuniors set user_source = null, user_target = '" . $row['user_target'] . "', reward = 6, relation_type = 'reward_direct', product_id = '".$product["id"]."'");
  47.                     $this->insertIfNotExists(null$row['user_target'], $product['id'], 6'reward_direct');
  48.                 }
  49.             }
  50.             if(false == in_array($row['user_source'], $directAlreadyCreated)){
  51.                 $directAlreadyCreated[] = $row['user_source'];
  52.                 foreach ($resultProducts as $product) {
  53.                     //$this->connection->executeQuery("INSERT INTO affboss_affjuniors set user_source = null, user_target = '" . $row['user_source'] . "', reward = 6, relation_type = 'reward_direct', product_id = '".$product["id"]."'");
  54.                     $this->insertIfNotExists(null$row['user_source'], $product['id'], 6'reward_direct');
  55.                 }
  56.             }
  57.         }
  58.         $alreadyIns = [];
  59.         foreach ($result as $row){
  60.             foreach ($resultProducts as $product) {
  61.                 if(false == in_array($row['user_source']."_".$row['user_target']. "_".$product["id"], $alreadyIns)) {
  62.                     $alreadyIns[] = $row['user_source'] . "_" $row['user_target']. "_".$product["id"];
  63.                     //echo("INSERT INTO affboss_affjuniors set user_source = " . $row['user_source'] . ", user_target = '" . $row['user_target'] . "', reward = 1, relation_type = 'reward', product_id = '" . $product["id"] . "'\r\n");
  64.                     //$this->connection->executeQuery("INSERT INTO affboss_affjuniors set user_source = " . $row['user_source'] . ", user_target = '" . $row['user_target'] . "', reward = 1, relation_type = 'reward', product_id = '" . $product["id"] . "'");
  65.                     $this->insertIfNotExists($row['user_source'], $row['user_target'], $product['id'], 1);
  66.                 }
  67.             }
  68.             $this->createRecursivly($alreadyIns$row['user_target'], $row['user_source'], $resultProducts);
  69.         }
  70.         $io->success('The generation of rewards has been finished');
  71.         return Command::SUCCESS;
  72.     }
  73.     protected function insertIfNotExists($userSource$userTarget$productId$reward$rewardType 'reward'){
  74.         if(is_null($userSource)){
  75.             $userSourceQuery "user_source IS null ";
  76.         }else{
  77.             $userSourceQuery "user_source = '" $userSource "'";
  78.         }
  79.         $query $this->connection->executeQuery("SELECT * FROM affboss_affjuniors WHERE ".$userSourceQuery." AND user_target = '".$userTarget."' AND product_id = '".$productId."' AND relation_type = '".$rewardType."'");
  80.         $result $query->fetchAllAssociative();
  81.         if(is_array($result) && count($result) == 0) {
  82.             if(is_null($userSource)){
  83.                 $userSourceQuery "user_source = null, ";
  84.             }else{
  85.                 $userSourceQuery "user_source = '" $userSource "',";
  86.             }
  87.             $this->connection->executeQuery("INSERT INTO affboss_affjuniors set ".$userSourceQuery." user_target = '" $userTarget "', relation_type = '".$rewardType."',  reward = '".$reward."', product_id = '" $productId "'");
  88.         }
  89.     }
  90.     protected function createRecursivly(&$alreadyIns = [], $currentBossId$juniorId$products){
  91.         $query $this->connection->executeQuery('SELECT * FROM affboss_affjuniors WHERE relation_type = "structure" and user_source = "'.$currentBossId.'"');
  92.         $result $query->fetchAllAssociative();
  93.         foreach ($result as $row){
  94.             foreach ($products as $product) {
  95.                 if(false == in_array($row['user_source']."_".$juniorId."_".$product["id"], $alreadyIns)) {
  96.                     $alreadyIns[] = $row['user_source'] . "_" $juniorId."_".$product["id"];
  97.                     //echo ("2 - INSERT INTO affboss_affjuniors set user_source = " . $juniorId . ", user_target = '" . $row['user_target'] . "', reward = 1, relation_type = 'reward', product_id = '" . $product["id"] . "' \r\n");
  98.                     //$this->connection->executeQuery("INSERT INTO affboss_affjuniors set user_source = " . $juniorId . ", user_target = '" . $row['user_target'] . "', reward = 1, relation_type = 'reward', product_id = '" . $product["id"] . "'");
  99.                     $this->insertIfNotExists($juniorId$row['user_target'], $product['id'], 1);
  100.                 }
  101.             }
  102.             $this->createRecursivly($alreadyIns$row['user_target'], $juniorId$products);
  103.         }
  104.     }
  105. }