Skip to content

Instantly share code, notes, and snippets.

@ulve
Created March 28, 2018 12:53
Show Gist options
  • Save ulve/c4d7dc7a7caf73623129ff8867b7b2fe to your computer and use it in GitHub Desktop.
Save ulve/c4d7dc7a7caf73623129ff8867b7b2fe to your computer and use it in GitHub Desktop.
public enum Målstatus
{
Nytt,
Diariefört,
Gallrat,
Avlutat
}
public interface IMål
{
Målstatus Status { get; }
}
public interface INyttMål : IMål, IKanDiarieföras, IKanTasBort, IKanMinnesanteckna
{
}
public interface IDiarieförtMål : IMål, IKanGallras, IKanMinnesanteckna, IKanTjänsteanteckna, IKanAvslutas
{
}
public interface IGallratMål : IMål
{
}
public interface IAvslutatMål : IMål, IHarTjänsteanteckningar
{
}
public interface IHarMinnesanteckningar
{
List<string> Minnesanteckningar { get; }
}
public interface IHarTjänsteanteckningar
{
List<string> Tjänsteanteckningar { get; }
}
public interface IKanTjänsteanteckna : IHarTjänsteanteckningar
{
void SkrivTjänsteanteckning(string tjänsteanteckning);
}
public interface IKanMinnesanteckna : IHarMinnesanteckningar
{
void SkrivMinnesanteckning(string tjänsteanteckning);
}
public interface IKanDiarieföras
{
IDiarieförtMål Diarieför(string diarienummer);
}
public interface IKanTasBort
{
void TaBort();
}
public interface IKanAvslutas
{
IAvslutatMål Avsluta();
}
public interface IKanGallras
{
IGallratMål Gallra();
}
static void Main(string[] args)
{
// Skriv en tjänsteanteckning
var hämtat = MålRepo.HämtaFrånDatabas(Målstatus.Diariefört);
if(hämtat is IKanTjänsteanteckna)
{
((IKanTjänsteanteckna)hämtat).SkrivTjänsteanteckning("Skriv en tjänsteanteckning");
}
Console.WriteLine(hämtat);
// Skapa ett nytt mål och diarieför det sen asvsluta
var mål = MålRepo.SkapaNyttMål();
mål.SkrivMinnesanteckning("Målet mottagit av mottagningstjänsten");
var diariefört = mål.Diarieför(Guid.NewGuid().ToString().Substring(0, 8));
diariefört.SkrivTjänsteanteckning("Diarieföring gjord av handläggare");
var avslutat = diariefört.Avsluta();
Console.WriteLine(avslutat);
}
public class MålRepo
{
public static INyttMål SkapaNyttMål()
{
return new NyttMål();
}
public static IMål HämtaFrånDatabas(Målstatus id)
{
switch(id)
{
case Målstatus.Diariefört:
return new DiarieförtMål(new NyttMål(), Guid.NewGuid().ToString().Substring(0, 8));
case Målstatus.Avlutat:
var mål = new NyttMål();
var diariefört = mål.Diarieför(Guid.NewGuid().ToString().Substring(0, 8));
var avslutat = diariefört.Avsluta();
return avslutat;
case Målstatus.Gallrat:
var mål2 = new NyttMål();
var diariefört2 = mål2.Diarieför(Guid.NewGuid().ToString().Substring(0, 8));
var gallrat2 = diariefört2.Gallra();
return gallrat2;
default:
return new NyttMål();
}
}
abstract class Mål
{
public Målstatus Status { get; protected set; }
}
class NyttMål : Mål, INyttMål
{
public List<string> Minnesanteckningar { get; private set; }
public NyttMål()
{
Minnesanteckningar = new List<string>();
Status = Målstatus.Nytt;
}
public IDiarieförtMål Diarieför(string diarienummer)
{
Console.WriteLine($"Diarieför målet med diarienummer {diarienummer}");
return new DiarieförtMål(this, diarienummer);
}
public void TaBort()
{
Console.WriteLine("Tar bort målet");
}
public void SkrivMinnesanteckning(string minnesanteckning)
{
Console.WriteLine($"Lägger till minnesanteckning {minnesanteckning}");
Minnesanteckningar.Add(minnesanteckning);
}
public override string ToString()
{
var s = "-------------------------------------\nStatus: Nytt\n";
foreach (var m in Minnesanteckningar)
{
s += $"Minnesanteckning: {m}\n";
}
return s + "-------------------------------------\n";
}
}
class DiarieförtMål : Mål, IDiarieförtMål
{
public List<string> Minnesanteckningar { get; private set; }
public List<string> Tjänsteanteckningar { get; protected set; }
public string Diarienummer { get; private set; }
public string Målnummer { get; private set; }
public DiarieförtMål(NyttMål mål, string diarienummer)
{
Diarienummer = diarienummer;
Målnummer = Guid.NewGuid().ToString().Substring(0, 8);
Minnesanteckningar = mål.Minnesanteckningar;
Tjänsteanteckningar = new List<string>();
Status = Målstatus.Diariefört;
}
public void SkrivMinnesanteckning(string minnesanteckning)
{
Console.WriteLine($"Lägger till minnesanteckning {minnesanteckning}");
Minnesanteckningar.Add(minnesanteckning);
}
public void SkrivTjänsteanteckning(string tjänsteanteckning)
{
Console.WriteLine($"Lägger till tjänsteanteckning {tjänsteanteckning}");
Tjänsteanteckningar.Add(tjänsteanteckning);
}
public IAvslutatMål Avsluta()
{
Console.WriteLine("Avslutar målet");
return new AvslutatMål(this);
}
public override string ToString()
{
var s = "-------------------------------------\nStatus: Diarierfört\n";
s += $"Målnummer: {Målnummer}\n";
s += $"Diarienummer: {Diarienummer}\n";
foreach (var m in Minnesanteckningar)
{
s += $"Minnesanteckning: {m}\n";
}
foreach (var m in Tjänsteanteckningar)
{
s += $"Tjänsteanteckning: {m}\n";
}
return s + "-------------------------------------\n";
}
public IGallratMål Gallra()
{
Console.WriteLine("Gallrar målet");
return new GallratMål(this);
}
}
class GallratMål : Mål, IGallratMål
{
public string Målnummer { get; private set; }
public string Diarienummer { get; private set; }
public GallratMål(AvslutatMål mål)
{
Målnummer = mål.Målnummer;
Diarienummer = mål.Diarienummer;
Status = Målstatus.Gallrat;
}
public GallratMål(DiarieförtMål mål)
{
Målnummer = mål.Målnummer;
Diarienummer = mål.Diarienummer;
Status = Målstatus.Gallrat;
}
public override string ToString()
{
var s = "-------------------------------------\nStatus: Gallrat\n";
s += $"Målnummer: {Målnummer}\n";
s += $"Diarienummer: {Diarienummer}\n";
return s + "-------------------------------------\n";
}
}
class AvslutatMål : Mål, IAvslutatMål
{
public List<string> Tjänsteanteckningar { get; protected set; }
public string Målnummer { get; private set; }
public string Diarienummer { get; private set; }
public AvslutatMål(DiarieförtMål mål)
{
Diarienummer = mål.Diarienummer;
Målnummer = mål.Målnummer;
Tjänsteanteckningar = mål.Tjänsteanteckningar;
Status = Målstatus.Avlutat;
}
public GallratMål Gallra()
{
Console.WriteLine("Gallrar mål");
return new GallratMål(this);
}
public override string ToString()
{
var s = "-------------------------------------\nStatus: Avslutat\n";
s += $"Målnummer: {Målnummer}\n";
s += $"Diarienummer: {Diarienummer}\n";
foreach (var m in Tjänsteanteckningar)
{
s += $"Tjänsteanteckning: {m}\n";
}
return s + "-------------------------------------\n";
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment