fix(number-fields): избегаем потери точности длинных чисел
- number-поля теперь рендерятся как text + inputMode=numeric, чтобы браузер не округлял значения через input type=number - пробелы при вставке в number-поля удаляются - бэкенд нормализует значения number-полей в строку перед сохранением - добавлен хелпер normalizeFieldValueForStorage Closes: искажение расчётного счёта и других длинных числовых полей
This commit is contained in:
30
migrations/0044_user_statuses.sql
Normal file
30
migrations/0044_user_statuses.sql
Normal file
@@ -0,0 +1,30 @@
|
||||
-- User statuses per organization
|
||||
CREATE TABLE IF NOT EXISTS "user_statuses" (
|
||||
"id" SERIAL PRIMARY KEY,
|
||||
"organization_id" INTEGER NOT NULL REFERENCES "organizations"("id") ON DELETE CASCADE,
|
||||
"name" VARCHAR(100) NOT NULL,
|
||||
"color" VARCHAR(7) DEFAULT '#e5e7eb',
|
||||
"is_default" BOOLEAN DEFAULT FALSE,
|
||||
"position" INTEGER DEFAULT 0,
|
||||
"created_at" TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "idx_user_statuses_organization_id" ON "user_statuses"("organization_id");
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "idx_user_statuses_organization_default" ON "user_statuses"("organization_id") WHERE "is_default" = TRUE;
|
||||
|
||||
ALTER TABLE "users" ADD COLUMN IF NOT EXISTS "status_id" INTEGER REFERENCES "user_statuses"("id") ON DELETE SET NULL;
|
||||
CREATE INDEX IF NOT EXISTS "idx_users_status_id" ON "users"("status_id");
|
||||
|
||||
-- Backfill default status for existing organizations
|
||||
INSERT INTO "user_statuses" ("organization_id", "name", "color", "is_default", "position")
|
||||
SELECT id, 'Зарегистрирован', '#e5e7eb', TRUE, 0
|
||||
FROM "organizations"
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
UPDATE "users" u
|
||||
SET "status_id" = (
|
||||
SELECT s.id FROM "user_statuses" s
|
||||
WHERE s.organization_id = u.organization_id AND s.is_default = TRUE
|
||||
LIMIT 1
|
||||
)
|
||||
WHERE u.status_id IS NULL;
|
||||
Reference in New Issue
Block a user