Suggerirei di non aver bisogno di "spostare" gli elenchi. Hai solo bisogno di attribuire le attività.
Potresti avere una singola tabella e / o entità che contiene / aggrega tutte le attività indipendentemente dallo stato o dall'anno. Passiamo attraverso il flusso di lavoro dato questo disegno:
All'avvio
On startup, the application will prompt the administrator to choose from a list of tasks and copy the selected task into this year's tasks.
Il sistema recupera un elenco di tutte le attività che si trovano in uno stato "non assegnato" e le visualizza all'amministratore. L'amministratore controlla alcune delle attività e il sistema cambia lo stato in "assegnato".
Qualsiasi attività non assegnata rimanente può essere lasciata così com'è (ovvero l'amministratore verrà richiamato con loro la prossima volta che accede al sistema) oppure potrebbero essere spostati su uno stato "differito".
Gli utenti normali controllano le attività
Throughout the year, a normal user will be able to check off the completed tasks.
Il sistema recupera e visualizza tutte le attività con stato "assegnato". L'utente può controllarli. Mentre lo fa, il sistema cambia lo stato in "completato".
Chiusura di fine anno
At the end of the year, the administrator will indicate the year's tasks as closed. This means the tasks cannot be deleted, amended and no new tasks can be added.
Il sistema recupera tutte le attività con stato "completato". Dopo l'approvazione dell'amministratore, lo stato di queste attività viene modificato in "chiuso".
Il sistema consente solo l'accesso in sola lettura alle attività contrassegnate come chiuse.
Spostamento delle attività per l'anno successivo
The administrator will copy the completed year's tasks into the next year's tasks.
Qualsiasi attività che rimane in uno stato "assegnato" viene portata avanti.
Si noti che questo design non ha alcuna nozione di "anno". Mi sembra che ci sia sempre un solo anno attivo in qualsiasi momento, quindi non è davvero necessario; hai solo bisogno di sapere quali compiti sono assegnati o completati. Se hai bisogno che abbiano un "anno" a loro assegnato, ad es. per i rapporti o le metriche, è possibile memorizzare un DateAssigned
, DateCompleted
e DateClosed
per ciascuna attività ed eseguire report per anno, o in un altro periodo di tempo se la tua organizzazione si sposta mai in trimestri o anni fiscali o whathaveyou.
Se "anno" è davvero un concetto mission-critical nel tuo modello dati, puoi ovviamente aggiungere un'altra colonna per "anno". L'atto di "spostare" i compiti da un anno all'altro significa semplicemente aggiornare quella colonna. Non devi spostare nulla.