<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20250911195613 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
$this->addSql('CREATE SEQUENCE tourapp.tpay_transaction_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
$this->addSql('CREATE TABLE tourapp.tpay_transaction (id INT NOT NULL default nextval(\'tourapp.tpay_transaction_id_seq\'::regclass), payment_id INT NOT NULL, status VARCHAR(50) NOT NULL, title VARCHAR(255), transaction_id VARCHAR(255) NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, amount numeric(10,2) NOT NULL, extorderid VARCHAR(255) DEFAULT NULL, update_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, send_mail_date TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, send_mail BOOLEAN DEFAULT false NOT NULL, PRIMARY KEY(id))');
$this->addSql('ALTER TABLE tourapp.travel ADD opt_tpay boolean DEFAULT false');
$this->addSql("INSERT INTO tourapp.payments_type (
payment_type_id,
payment_type_name,
payment_module,
payment_type_manual
) VALUES
(5, 'tpay', 'tpay', false);
");
$this->addSql('CREATE SEQUENCE tourapp.tpay_refund_transaction_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
$this->addSql('CREATE TABLE tourapp.tpay_refund_transaction (id INT NOT NULL default nextval(\'tourapp.tpay_refund_transaction_id_seq\'::regclass), payment_id INT NOT NULL, refund_id VARCHAR(255) DEFAULT NULL, title VARCHAR(255) DEFAULT NULL, status VARCHAR NOT NULL, transaction_id VARCHAR(255) NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, amount INT NOT NULL, update_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, PRIMARY KEY(id))');
$this->addSql('
CREATE OR REPLACE FUNCTION tourapp.func_recalculate_refund(_payment_id integer)
RETURNS text
LANGUAGE plpgsql
AS $function$
declare
_payment record;
_payu record;
_paynow record;
_tpay record;
BEGIN
SELECT
payment_id, payment_payback as amount
into _payment
FROM tourapp.payments
where payment_id = _payment_id;
SELECT
payment_id, sum(coalesce(amount,0)) as amount
into _payu
FROM tourapp.payu_refund
where payment_id = _payment_id and status = \'FINALIZED\'
group by payment_id;
SELECT
payment_id, sum(coalesce(amount,0)) as amount
into _paynow
FROM tourapp.paynow_refund
where payment_id = _payment_id and status = \'SUCCESSFUL\'
group by payment_id;
select
payment_id,
sum(coalesce(amount,0)) as amount
into _tpay
from tourapp.tpay_refund_transaction
where payment_id = _payment_id and status = \'DONE\'
group by payment_id;
update tourapp.payments set payment_payback_full = round((coalesce(_payment.amount,0) + coalesce(_tpay.amount,0) + coalesce(_payu.amount,0) + coalesce(_paynow.amount,0) ),2)
where payment_id = _payment_id;
RETURN \'0001\';
EXCEPTION
WHEN OTHERS THEN RETURN SQLSTATE || \'|\' || SQLERRM;
END;
$function$
;
');
// Update all variables in email templates to add type "variable"
$this->addSql('
UPDATE tourapp.email_template
SET variables = (
SELECT jsonb_object_agg(
key,
CASE
WHEN jsonb_exists(value, \'type\') THEN value
ELSE jsonb_set(value, \'{type}\', \'"variable"\'::jsonb)
END
)
FROM jsonb_each(COALESCE(variables::jsonb, \'{}\'::jsonb)) AS kv(key, value)
)
WHERE variables IS NOT NULL
AND jsonb_typeof(variables::jsonb) = \'object\'
AND variables::jsonb != \'{}\'::jsonb;
');
$this->addSql('
UPDATE tourapp.email_template
SET variables = COALESCE(variables::jsonb, \'{}\'::jsonb) ||
\'{"availablePayments.tpay": {"description": "Warunek: treść wyświetlana gdy Tpay jest włączony", "value": null, "type": "condition"}}\'::jsonb ||
\'{"availablePayments.paynow": {"description": "Warunek: treść wyświetlana gdy PayNow jest włączony", "value": null, "type": "condition"}}\'::jsonb ||
\'{"availablePayments.payu": {"description": "Warunek: treść wyświetlana gdy PayU jest włączony", "value": null, "type": "condition"}}\'::jsonb ||
\'{"availablePayments.bank": {"description": "Warunek: treść wyświetlana gdy przelew bankowy jest dostępny", "value": null, "type": "condition"}}\'::jsonb
WHERE email_template_id IN (7, 2, 6, 13, 8, 4, 3);
');
$this->addSql('
UPDATE tourapp.email_template
SET variables = (
SELECT (
(SELECT json_object_agg(key, val ORDER BY sort_order, key)
FROM (
SELECT
key,
CASE
WHEN jsonb_exists(value, \'type\') THEN value
ELSE jsonb_set(value, \'{type}\', \'"variable"\'::jsonb)
END AS val,
CASE
WHEN (value->>\'type\') = \'variable\' OR NOT jsonb_exists(value, \'type\') THEN 1
WHEN (value->>\'type\') = \'condition\' THEN 3
ELSE 2
END AS sort_order
FROM jsonb_each(variables::jsonb)
) s
)::json
)
)
WHERE variables IS NOT NULL
AND jsonb_typeof(variables::jsonb) = \'object\'
AND variables::jsonb != \'{}\'::jsonb;
');
$this->addSql('
UPDATE tourapp.email_template
SET variables = jsonb_set(
variables::jsonb,
\'{payulink,description}\',
\'"Link do zapisu na wycieczkę"\'::jsonb,
false
)
WHERE email_template_id = 5
AND jsonb_exists(variables::jsonb, \'payulink\');
');
$this->addSql('
UPDATE tourapp.email_template
SET variables = jsonb_set(
variables::jsonb,
\'{payulink,description}\',
\'"Link do zapisu na wycieczkę"\'::jsonb,
false
)
WHERE email_template_id = 9
AND jsonb_exists(variables::jsonb, \'payulink\');
');
}
public function down(Schema $schema): void
{
}
}