vendor/bluue/gocardless-bundle/migrations/Version20221207092347.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace GocardlessBundleMigrations;
  4. use App\Services\ObjectSerialize;
  5. use Doctrine\DBAL\Schema\Schema;
  6. use Doctrine\Migrations\AbstractMigration;
  7. use Symfony\Component\Uid\UuidV6;
  8. final class Version20221207092347 extends AbstractMigration
  9. {
  10.     private ObjectSerialize $objectSerialize;
  11.     public function setObjectSerialize(ObjectSerialize $objectSerialize)
  12.     {
  13.         $this->objectSerialize $objectSerialize;
  14.     }
  15.     public function up(Schema $schema): void
  16.     {
  17.         $this->addSql('CREATE TABLE gocardless_bundle__customer_mapping (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', customer_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', created_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', updated_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', deleted_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', reference VARCHAR(32) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, UNIQUE INDEX UNIQ_7D092DE99395C3F3 (customer_id), INDEX IDX_7D092DE9B03A8386 (created_by_id), INDEX IDX_7D092DE9896DBBDE (updated_by_id), INDEX IDX_7D092DE9C76F1F52 (deleted_by_id), INDEX reference (reference), INDEX deleted_at (deleted_at), INDEX created_at (created_at), INDEX updated_at (updated_at), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  18.         $this->addSql('CREATE TABLE gocardless_bundle__direct_debit (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', customer_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', invoice_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', document_payment_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', created_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', updated_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', deleted_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', mandate_reference VARCHAR(255) NOT NULL, payment_number VARCHAR(255) NOT NULL, state VARCHAR(255) NOT NULL, payment_date DATE NOT NULL, amount NUMERIC(20, 6) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, INDEX IDX_59F696BA9395C3F3 (customer_id), INDEX IDX_59F696BA2989F1FD (invoice_id), UNIQUE INDEX UNIQ_59F696BAA50008ED (document_payment_id), INDEX IDX_59F696BAB03A8386 (created_by_id), INDEX IDX_59F696BA896DBBDE (updated_by_id), INDEX IDX_59F696BAC76F1F52 (deleted_by_id), INDEX mandate_reference (mandate_reference), INDEX payment_number (payment_number), INDEX state (state), INDEX payment_date (payment_date), INDEX amount (amount), INDEX deleted_at (deleted_at), INDEX created_at (created_at), INDEX updated_at (updated_at), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  19.         $this->addSql('CREATE TABLE gocardless_bundle__payout (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', currency_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', created_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', updated_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', deleted_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', reference VARCHAR(255) NOT NULL, creditor VARCHAR(255) NOT NULL, date DATE NOT NULL, amount NUMERIC(20, 6) NOT NULL, commission NUMERIC(20, 6) NOT NULL, net_amount NUMERIC(20, 6) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, INDEX IDX_9DEBA9C938248176 (currency_id), INDEX IDX_9DEBA9C9B03A8386 (created_by_id), INDEX IDX_9DEBA9C9896DBBDE (updated_by_id), INDEX IDX_9DEBA9C9C76F1F52 (deleted_by_id), INDEX reference (reference), INDEX creditor (creditor), INDEX date (date), INDEX amount (amount), INDEX commission (commission), INDEX net_amount (net_amount), INDEX deleted_at (deleted_at), INDEX created_at (created_at), INDEX updated_at (updated_at), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  20.         $this->addSql('CREATE TABLE gocardless_bundle__payout_detail (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', payout_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', direct_debit_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', created_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', updated_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', deleted_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', amount VARCHAR(255) NOT NULL, commission VARCHAR(255) NOT NULL, net_amount VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, INDEX IDX_A08DCDD9C6D61B7F (payout_id), INDEX IDX_A08DCDD9ED508722 (direct_debit_id), INDEX IDX_A08DCDD9B03A8386 (created_by_id), INDEX IDX_A08DCDD9896DBBDE (updated_by_id), INDEX IDX_A08DCDD9C76F1F52 (deleted_by_id), INDEX amount (amount), INDEX commission (commission), INDEX net_amount (net_amount), INDEX deleted_at (deleted_at), INDEX created_at (created_at), INDEX updated_at (updated_at), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  21.         $this->addSql('ALTER TABLE gocardless_bundle__customer_mapping ADD CONSTRAINT FK_7D092DE99395C3F3 FOREIGN KEY (customer_id) REFERENCES customers_bundle__customer (id)');
  22.         $this->addSql('ALTER TABLE gocardless_bundle__customer_mapping ADD CONSTRAINT FK_7D092DE9B03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id)');
  23.         $this->addSql('ALTER TABLE gocardless_bundle__customer_mapping ADD CONSTRAINT FK_7D092DE9896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id)');
  24.         $this->addSql('ALTER TABLE gocardless_bundle__customer_mapping ADD CONSTRAINT FK_7D092DE9C76F1F52 FOREIGN KEY (deleted_by_id) REFERENCES user (id)');
  25.         $this->addSql('ALTER TABLE gocardless_bundle__direct_debit ADD CONSTRAINT FK_59F696BA9395C3F3 FOREIGN KEY (customer_id) REFERENCES customers_bundle__customer (id)');
  26.         $this->addSql('ALTER TABLE gocardless_bundle__direct_debit ADD CONSTRAINT FK_59F696BA2989F1FD FOREIGN KEY (invoice_id) REFERENCES sales_bundle__invoice (id)');
  27.         $this->addSql('ALTER TABLE gocardless_bundle__direct_debit ADD CONSTRAINT FK_59F696BAA50008ED FOREIGN KEY (document_payment_id) REFERENCES sales_bundle__document_payment (id)');
  28.         $this->addSql('ALTER TABLE gocardless_bundle__direct_debit ADD CONSTRAINT FK_59F696BAB03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id)');
  29.         $this->addSql('ALTER TABLE gocardless_bundle__direct_debit ADD CONSTRAINT FK_59F696BA896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id)');
  30.         $this->addSql('ALTER TABLE gocardless_bundle__direct_debit ADD CONSTRAINT FK_59F696BAC76F1F52 FOREIGN KEY (deleted_by_id) REFERENCES user (id)');
  31.         $this->addSql('ALTER TABLE gocardless_bundle__payout ADD CONSTRAINT FK_9DEBA9C938248176 FOREIGN KEY (currency_id) REFERENCES currency (id)');
  32.         $this->addSql('ALTER TABLE gocardless_bundle__payout ADD CONSTRAINT FK_9DEBA9C9B03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id)');
  33.         $this->addSql('ALTER TABLE gocardless_bundle__payout ADD CONSTRAINT FK_9DEBA9C9896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id)');
  34.         $this->addSql('ALTER TABLE gocardless_bundle__payout ADD CONSTRAINT FK_9DEBA9C9C76F1F52 FOREIGN KEY (deleted_by_id) REFERENCES user (id)');
  35.         $this->addSql('ALTER TABLE gocardless_bundle__payout_detail ADD CONSTRAINT FK_A08DCDD9C6D61B7F FOREIGN KEY (payout_id) REFERENCES gocardless_bundle__payout (id)');
  36.         $this->addSql('ALTER TABLE gocardless_bundle__payout_detail ADD CONSTRAINT FK_A08DCDD9ED508722 FOREIGN KEY (direct_debit_id) REFERENCES gocardless_bundle__direct_debit (id)');
  37.         $this->addSql('ALTER TABLE gocardless_bundle__payout_detail ADD CONSTRAINT FK_A08DCDD9B03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id)');
  38.         $this->addSql('ALTER TABLE gocardless_bundle__payout_detail ADD CONSTRAINT FK_A08DCDD9896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id)');
  39.         $this->addSql('ALTER TABLE gocardless_bundle__payout_detail ADD CONSTRAINT FK_A08DCDD9C76F1F52 FOREIGN KEY (deleted_by_id) REFERENCES user (id)');
  40.     }
  41.     public function down(Schema $schema): void
  42.     {
  43.         $this->addSql('ALTER TABLE gocardless_bundle__customer_mapping DROP FOREIGN KEY FK_7D092DE99395C3F3');
  44.         $this->addSql('ALTER TABLE gocardless_bundle__customer_mapping DROP FOREIGN KEY FK_7D092DE9B03A8386');
  45.         $this->addSql('ALTER TABLE gocardless_bundle__customer_mapping DROP FOREIGN KEY FK_7D092DE9896DBBDE');
  46.         $this->addSql('ALTER TABLE gocardless_bundle__customer_mapping DROP FOREIGN KEY FK_7D092DE9C76F1F52');
  47.         $this->addSql('ALTER TABLE gocardless_bundle__direct_debit DROP FOREIGN KEY FK_59F696BA9395C3F3');
  48.         $this->addSql('ALTER TABLE gocardless_bundle__direct_debit DROP FOREIGN KEY FK_59F696BA2989F1FD');
  49.         $this->addSql('ALTER TABLE gocardless_bundle__direct_debit DROP FOREIGN KEY FK_59F696BAA50008ED');
  50.         $this->addSql('ALTER TABLE gocardless_bundle__direct_debit DROP FOREIGN KEY FK_59F696BAB03A8386');
  51.         $this->addSql('ALTER TABLE gocardless_bundle__direct_debit DROP FOREIGN KEY FK_59F696BA896DBBDE');
  52.         $this->addSql('ALTER TABLE gocardless_bundle__direct_debit DROP FOREIGN KEY FK_59F696BAC76F1F52');
  53.         $this->addSql('ALTER TABLE gocardless_bundle__payout DROP FOREIGN KEY FK_9DEBA9C938248176');
  54.         $this->addSql('ALTER TABLE gocardless_bundle__payout DROP FOREIGN KEY FK_9DEBA9C9B03A8386');
  55.         $this->addSql('ALTER TABLE gocardless_bundle__payout DROP FOREIGN KEY FK_9DEBA9C9896DBBDE');
  56.         $this->addSql('ALTER TABLE gocardless_bundle__payout DROP FOREIGN KEY FK_9DEBA9C9C76F1F52');
  57.         $this->addSql('ALTER TABLE gocardless_bundle__payout_detail DROP FOREIGN KEY FK_A08DCDD9C6D61B7F');
  58.         $this->addSql('ALTER TABLE gocardless_bundle__payout_detail DROP FOREIGN KEY FK_A08DCDD9ED508722');
  59.         $this->addSql('ALTER TABLE gocardless_bundle__payout_detail DROP FOREIGN KEY FK_A08DCDD9B03A8386');
  60.         $this->addSql('ALTER TABLE gocardless_bundle__payout_detail DROP FOREIGN KEY FK_A08DCDD9896DBBDE');
  61.         $this->addSql('ALTER TABLE gocardless_bundle__payout_detail DROP FOREIGN KEY FK_A08DCDD9C76F1F52');
  62.         $this->addSql('DROP TABLE gocardless_bundle__customer_mapping');
  63.         $this->addSql('DROP TABLE gocardless_bundle__direct_debit');
  64.         $this->addSql('DROP TABLE gocardless_bundle__payout');
  65.         $this->addSql('DROP TABLE gocardless_bundle__payout_detail');
  66.     }
  67.     public function postUp(Schema $schema): void
  68.     {
  69.         parent::postUp($schema);
  70.         $mail '
  71.             <p>Bonjour,</p>
  72.             <p>Veuillez cliquer sur ce [mandate_link]lien[/mandate_link] pour valider votre mandat SEPA.</p>
  73.             <br>
  74.             <p>Cordialement</p>
  75.         ';
  76.         $now = (new \DateTime())->format('Y-m-d H:i:s');
  77.         $configurations = [
  78.             'gocardless_bundle__mandate_scheme' => 'sepa_core',
  79.             'gocardless_bundle__mandate_verification' => 'recommended',
  80.             'gocardless_bundle__mandate_mail_creation' => $mail
  81.         ];
  82.         foreach ($configurations as $configuration => $value) {
  83.             $this->connection->insert('configuration', [
  84.                 'id' => (new UuidV6())->toBinary(),
  85.                 'name' => $configuration,
  86.                 'context_id' => null,
  87.                 'value' => $this->objectSerialize->add((object) ['value' => $value]),
  88.                 'created_at' => $now,
  89.                 'updated_at' => $now
  90.             ]);
  91.         }
  92.         $languages $this->connection->executeQuery('SELECT * FROM language WHERE deleted_at IS NULL')
  93.             ->fetchAllAssociative();
  94.         $rootLocale 'en';
  95.         $defaultLocale $this->connection
  96.             ->executeQuery('SELECT locale FROM language WHERE deleted_at IS NULL AND is_default = 1')
  97.             ->fetchOne() ?: 'en';
  98.         $paymentMethodNames = [
  99.             'en' => 'Direct Debit',
  100.             'fr' => 'Prélèvement automatique'
  101.         ];
  102.         $paymentMethodId = new UuidV6();
  103.         $this->connection->insert('sales_bundle__payment_method', [
  104.             'id' => $paymentMethodId->toBinary(),
  105.             'name' => !empty($paymentMethodNames[$defaultLocale]) ?
  106.                 $paymentMethodNames[$defaultLocale] : $paymentMethodNames[$rootLocale],
  107.             'is_invoice' => 0,
  108.             'is_credit_note' => 0,
  109.             'is_active' => 1,
  110.             'created_at' => $now,
  111.             'updated_at' => $now
  112.         ]);
  113.         foreach ($languages as $language) {
  114.             $localeTo $rootLocale;
  115.             if (!empty($paymentMethodNames[$language['locale']])) {
  116.                 $localeTo $language['locale'];
  117.             } elseif (!empty($paymentMethodNames[$defaultLocale])) {
  118.                 $localeTo $defaultLocale;
  119.             }
  120.             $this->connection->insert('sales_bundle__payment_method_translations', [
  121.                 'object_id' => $paymentMethodId->toBinary(),
  122.                 'locale' => $language['locale'],
  123.                 'field' => 'name',
  124.                 'content' => $paymentMethodNames[$localeTo]
  125.             ]);
  126.         }
  127.         $this->connection->insert('configuration', [
  128.             'id' => (new UuidV6())->toBinary(),
  129.             'name' => 'gocardless_bundle__payment_method',
  130.             'context_id' => null,
  131.             'value' => $this->objectSerialize->add((object) ['value' => $paymentMethodId]),
  132.             'created_at' => $now,
  133.             'updated_at' => $now
  134.         ]);
  135.         $this->connection->insert('cron_job', [
  136.             'name' => 'gocardless-synchronisation',
  137.             'command' => 'bluue-bundle:gocardless:sync-gocardless',
  138.             'schedule' => '30 10,14 * * *',
  139.             'description' => '',
  140.             'enabled' => 1
  141.         ]);
  142.     }
  143. }