HemmaBudget – serie-ID och sista betalning

Installation
1. Ta en kopia av dina nuvarande fyra PHP-filer.
2. Ersätt editräkning.php, fleraräkningar.php, nyräkning.php och copyräkning.php
   i samma mapp där de ligger idag. Behåll filnamnen med ä.
3. Ladda om sidorna innan du sparar ett formulär.

Din befintliga serie_id-kolumn (VARCHAR(36)) används. Du behöver inte köra om
SQL-kommandona som grupperade dina gamla poster. Ingen ALTER TABLE eller
omgruppering körs i PHP-filerna. Alla användardatabaser där dessa sidor används
behöver kolumnen serie_id i budget-tabellen.

Funktioner
- nyräkning.php: ett nytt slumpmässigt serie-ID per ny räkning.
- fleraräkningar.php: ett nytt ID per sparad serie. Alla valda månader delar
  det, även vid avbetalning över årsskiften. Även en vald månad får ett ID.
- copyräkning.php: originalets ID läses från databasen och följer med till
  samtliga kopior. Om originalet saknar ID får originalet och kopiorna ett
  gemensamt nytt ID. Andra gamla poster kopplas inte ihop automatiskt.
- editräkning.php: befintligt ID bevaras. Sista betalning tar efter bekräftelse
  bort alla poster i samma serie efter den VALDA månaden och året, inklusive
  senare poster som är markerade som betalda. Aktuell post, samma månad,
  tidigare månader och andra serier behålls. Antalet borttagna poster visas.
  Checkboxen Betald är separat. Sista betalning är en åtgärd när du sparar,
  inte en permanent spärr mot att skapa eller kopiera nya räkningar senare.
- Om en gammal räkning saknar serie-ID spärras Sista betalning. Vanlig
  redigering ger den posten ett nytt eget ID, utan att gissa vilka andra
  räkningar som hör ihop.

Befintlig layout och övriga flikar behålls. Anpassat antal avbetalningsmånader
skickas nu korrekt från formuläret (1–120 månader).

Tekniskt
SQL-värden för sparning och radering binds som parametrar. Sparformulären har
CSRF-skydd. Databasoperationerna använder transaktioner; rollback och radlås
förutsätter InnoDB. Bifogade filer omfattas inte av databastransaktioner och
raderas inte fysiskt av Sista betalning.

Kontroller
Alla fyra filer har syntaxkontrollerats med en PHP-parser. Raderingsfrågan har
kontrollerats med testdata för olika serier, samma månad och årsskifte i SQLite.
Ingen körning mot din PHP-server eller MySQL/MariaDB-databas har gjorts.
