Daten aendern: effective date, searchable UN country pickers, 2 more bugfixes
Feature requests from live use:
- "Daten aendern" was missing a "Wirksam ab" field (unlike Versetzen/
Befoerdern/Karenz, which all have one) - every change was silently
logged with today's date. Added the field, threaded through
change_employee_data (defaults to today if omitted).
- Staatsbuergerschaft and Wohnland now use a searchable picker
(components/ui/CountryPicker) over the full 193-country UN member
state list (lib/countries.ts) instead of the original ~9/5-value
picklists. Dropped the now-too-narrow CHECK constraints
(supabase/schema_2.sql) since the app is the source of truth for
valid values, same approach used elsewhere for large open-ended
pickers.
Two more real bugs found via live testing of the above (both in
change_employee_data, supabase/functions.sql + functions_4.sql):
1. `text[] || 'literal'` is ambiguous in Postgres - it can resolve to
the array||array overload and try to parse the plain word as array
syntax ('{...}'), failing with "malformed array literal". Hit on
every single field-diff line the moment a user actually changed
something (Staatsbuergerschaft first, then Beschaeftigungsausmass
confirmed the same root cause). Fixed everywhere by switching to the
unambiguous array_append() function.
2. The contract_end_date diff-check cast an empty string straight to
date ("invalid input syntax for type date: ''") instead of using the
same nullif(...,'')::date guard the UPDATE line below it already had.
Verified live end-to-end after both fixes: changed Staatsbuergerschaft
to Brasilien with a backdated effective date, save succeeded, Stammdaten
tab reflects it, and employee_history got the correct event_date
("2026-07-01") and description ("Geänderte Felder: Staatsbürgerschaft,
wirksam ab 2026-07-01"). Reverted the test employee's data back
afterward; seed data is clean again.
This commit is contained in:
199
lib/countries.ts
Normal file
199
lib/countries.ts
Normal file
@@ -0,0 +1,199 @@
|
||||
// The 193 UN member states, German names, sorted alphabetically. Used for
|
||||
// Staatsbürgerschaft and Wohnland — both are searchable pickers over this
|
||||
// same list (see components/ui/Lookup + DatenAendernPanel).
|
||||
export const UN_COUNTRIES: string[] = [
|
||||
"Afghanistan",
|
||||
"Ägypten",
|
||||
"Albanien",
|
||||
"Algerien",
|
||||
"Andorra",
|
||||
"Angola",
|
||||
"Antigua und Barbuda",
|
||||
"Äquatorialguinea",
|
||||
"Argentinien",
|
||||
"Armenien",
|
||||
"Aserbaidschan",
|
||||
"Äthiopien",
|
||||
"Australien",
|
||||
"Bahamas",
|
||||
"Bahrain",
|
||||
"Bangladesch",
|
||||
"Barbados",
|
||||
"Belgien",
|
||||
"Belize",
|
||||
"Benin",
|
||||
"Bhutan",
|
||||
"Bolivien",
|
||||
"Bosnien und Herzegowina",
|
||||
"Botsuana",
|
||||
"Brasilien",
|
||||
"Brunei",
|
||||
"Bulgarien",
|
||||
"Burkina Faso",
|
||||
"Burundi",
|
||||
"Chile",
|
||||
"China",
|
||||
"Costa Rica",
|
||||
"Côte d'Ivoire",
|
||||
"Dänemark",
|
||||
"Deutschland",
|
||||
"Dominica",
|
||||
"Dominikanische Republik",
|
||||
"Dschibuti",
|
||||
"Ecuador",
|
||||
"El Salvador",
|
||||
"Eritrea",
|
||||
"Estland",
|
||||
"Eswatini",
|
||||
"Fidschi",
|
||||
"Finnland",
|
||||
"Frankreich",
|
||||
"Gabun",
|
||||
"Gambia",
|
||||
"Georgien",
|
||||
"Ghana",
|
||||
"Grenada",
|
||||
"Griechenland",
|
||||
"Guatemala",
|
||||
"Guinea",
|
||||
"Guinea-Bissau",
|
||||
"Guyana",
|
||||
"Haiti",
|
||||
"Honduras",
|
||||
"Indien",
|
||||
"Indonesien",
|
||||
"Irak",
|
||||
"Iran",
|
||||
"Irland",
|
||||
"Island",
|
||||
"Israel",
|
||||
"Italien",
|
||||
"Jamaika",
|
||||
"Japan",
|
||||
"Jemen",
|
||||
"Jordanien",
|
||||
"Kambodscha",
|
||||
"Kamerun",
|
||||
"Kanada",
|
||||
"Kap Verde",
|
||||
"Kasachstan",
|
||||
"Katar",
|
||||
"Kenia",
|
||||
"Kirgisistan",
|
||||
"Kiribati",
|
||||
"Kolumbien",
|
||||
"Komoren",
|
||||
"Kongo, Demokratische Republik",
|
||||
"Kongo, Republik",
|
||||
"Kosovo",
|
||||
"Kroatien",
|
||||
"Kuba",
|
||||
"Kuwait",
|
||||
"Laos",
|
||||
"Lesotho",
|
||||
"Lettland",
|
||||
"Libanon",
|
||||
"Liberia",
|
||||
"Libyen",
|
||||
"Liechtenstein",
|
||||
"Litauen",
|
||||
"Luxemburg",
|
||||
"Madagaskar",
|
||||
"Malawi",
|
||||
"Malaysia",
|
||||
"Malediven",
|
||||
"Mali",
|
||||
"Malta",
|
||||
"Marokko",
|
||||
"Marshallinseln",
|
||||
"Mauretanien",
|
||||
"Mauritius",
|
||||
"Mexiko",
|
||||
"Mikronesien",
|
||||
"Moldau",
|
||||
"Monaco",
|
||||
"Mongolei",
|
||||
"Montenegro",
|
||||
"Mosambik",
|
||||
"Myanmar",
|
||||
"Namibia",
|
||||
"Nauru",
|
||||
"Nepal",
|
||||
"Neuseeland",
|
||||
"Nicaragua",
|
||||
"Niederlande",
|
||||
"Niger",
|
||||
"Nigeria",
|
||||
"Nordkorea",
|
||||
"Nordmazedonien",
|
||||
"Norwegen",
|
||||
"Oman",
|
||||
"Österreich",
|
||||
"Osttimor",
|
||||
"Pakistan",
|
||||
"Palau",
|
||||
"Panama",
|
||||
"Papua-Neuguinea",
|
||||
"Paraguay",
|
||||
"Peru",
|
||||
"Philippinen",
|
||||
"Polen",
|
||||
"Portugal",
|
||||
"Ruanda",
|
||||
"Rumänien",
|
||||
"Russland",
|
||||
"Salomonen",
|
||||
"Sambia",
|
||||
"Samoa",
|
||||
"San Marino",
|
||||
"São Tomé und Príncipe",
|
||||
"Saudi-Arabien",
|
||||
"Schweden",
|
||||
"Schweiz",
|
||||
"Senegal",
|
||||
"Serbien",
|
||||
"Seychellen",
|
||||
"Sierra Leone",
|
||||
"Simbabwe",
|
||||
"Singapur",
|
||||
"Slowakei",
|
||||
"Slowenien",
|
||||
"Somalia",
|
||||
"Spanien",
|
||||
"Sri Lanka",
|
||||
"St. Kitts und Nevis",
|
||||
"St. Lucia",
|
||||
"St. Vincent und die Grenadinen",
|
||||
"Südafrika",
|
||||
"Sudan",
|
||||
"Südkorea",
|
||||
"Südsudan",
|
||||
"Suriname",
|
||||
"Syrien",
|
||||
"Tadschikistan",
|
||||
"Tansania",
|
||||
"Thailand",
|
||||
"Togo",
|
||||
"Tonga",
|
||||
"Trinidad und Tobago",
|
||||
"Tschad",
|
||||
"Tschechien",
|
||||
"Tunesien",
|
||||
"Türkei",
|
||||
"Turkmenistan",
|
||||
"Tuvalu",
|
||||
"Uganda",
|
||||
"Ukraine",
|
||||
"Ungarn",
|
||||
"Uruguay",
|
||||
"Usbekistan",
|
||||
"Vanuatu",
|
||||
"Venezuela",
|
||||
"Vereinigte Arabische Emirate",
|
||||
"Vereinigte Staaten",
|
||||
"Vereinigtes Königreich",
|
||||
"Vietnam",
|
||||
"Weißrussland",
|
||||
"Zentralafrikanische Republik",
|
||||
"Zypern",
|
||||
].sort((a, b) => a.localeCompare(b, "de"));
|
||||
Reference in New Issue
Block a user