internal static void CreateOutgoingClients(List <Client> listClient, TypeOfClient soortKlant, TypeOfExport typeOfExport, IConfiguration configuration) { List <T> listOutgClient; listOutgClient = ClientFactory.CreateListClients <T>(soortKlant, listClient); var soortUitgFile = soortKlant switch { TypeOfClient.Big => KindOutgoingFile.BigClient, TypeOfClient.Small => KindOutgoingFile.SmallClient, TypeOfClient.Criminal => KindOutgoingFile.CriminalClient, TypeOfClient.WithManyConsults => KindOutgoingFile.ManyConsultsClient, _ => throw new InvalidEnumArgumentException(), }; PathsAndFolders.CreateFileNamesAndDirectories (soortUitgFile, typeOfExport, configuration, out string fileName, out string fullFileName); var klantExportFileModel = ClientFactory.CreateKlantExportFileModel(listOutgClient, fileName); klantExportFileModel.SerializeToClientFile <T>(fullFileName, typeOfExport); }
public void CreateOutgClientFile(TypeOfClient typeOfClient, TypeOfExport typeOfExport) { Console.WriteLine("Retrieving all Clients from database ---"); // Dankzij include in repos hebben we per Client ook Country en Doctor (N: 1) // Dankzij include in repos hebben we per Client ook al zijn Consults (1:N) var listClient = _clientRepository.GetAllWithConsults(); switch (typeOfClient) { case TypeOfClient.Big: ClientHandler <BigClient> .CreateOutgoingClients(listClient, typeOfClient, typeOfExport, _configuration); break; case TypeOfClient.Small: ClientHandler <SmallClient> .CreateOutgoingClients(listClient, typeOfClient, typeOfExport, _configuration); break; case TypeOfClient.Criminal: ClientHandler <CriminalClient> .CreateOutgoingClients(listClient, typeOfClient, typeOfExport, _configuration); break; case TypeOfClient.WithManyConsults: ClientHandler <WithManyConsultsClient> .CreateOutgoingClients(listClient, typeOfClient, typeOfExport, _configuration); break; default: throw new InvalidEnumArgumentException(); } }
// public int MagNiet { get; set; } // compileert niet, want MagNiet is een instance member // public static int MagWel { get; set; } // compileert wel public static List <T> CreateListClients <T>(TypeOfClient soortKlant, List <Client> listClient) where T : BaseClient, IAuditFields // T kan zijn: BigClient, SmallClient, CriminalClient { // Correct is ook: // var result = new List<BigClient>(); //foreach (var clt in listClient) //{ // var clientExport = MaakNieuweClient(clt, SoortKlant.Big) as BigClient; // result.Add(clientExport); //} // Let op de casting van de Interface IgenericFields naar T: (XXX) aantalKeerCreateListClients++; var result = listClient.Select(c => MaakNieuweClient(c, soortKlant) as T).ToList(); return(result); }
public static IAuditFields MaakNieuweClient(Client clt, TypeOfClient soortKlant) // Deze method retourneert een BigClient, SmallClient, CriminalClient of WithManyConsultsClient // Echter in design time retourneert deze functie een object die voldoet aan IGenericFields // Runtime kan je na aanroep van deze functie casten naar type T (XXX) { switch (soortKlant) { case TypeOfClient.Big: var result1 = new BigClient { // Velden uit GenericFields: CompanyName = "JP-BV voor GROTE klanten", CreatedBy = "USERJP", DateTimeCreated = DateTime.Now.ToString(), // Velden uit BaseClient: KlantNummer = clt.ClientNumber, VolledigeNaamKlant = clt.FirstName + " " + clt.LastName, WoonPlaats = clt.City, // Eigen veld: // OmschrijvingGroteKlant = "Dit is een GROTE klant" dit is geregeld in de property GET }; return(result1); case TypeOfClient.Small: var result2 = new SmallClient { // Velden uit GenericFields: CompanyName = "JP-BV voor KLEINE klanten", CreatedBy = "USERJP", DateTimeCreated = DateTime.Now.ToString(), // Velden uit BaseClient: KlantNummer = clt.ClientNumber, VolledigeNaamKlant = clt.FirstName + " " + clt.LastName, WoonPlaats = clt.City, // Eigen veld: OmschrijvingKleineKlant = "Dit is een KLEINE KLANT" }; return(result2); case TypeOfClient.Criminal: var result3 = new CriminalClient { // Velden uit GenericFields: CompanyName = "JP-BV voor CRIMINELE klanten", CreatedBy = "USERJP", DateTimeCreated = DateTime.Now.ToString(), // Velden uit BaseClient: KlantNummer = clt.ClientNumber, VolledigeNaamKlant = clt.FirstName + " " + clt.LastName, WoonPlaats = clt.City, // Eigen veld: OmschrijvingCrimineleKlant = "Dit is een CRIMINELE KLANT" }; return(result3); case TypeOfClient.WithManyConsults: // Stel een klant heeft geen consulten: // Dankzij de null propagation hieronder kan listOfConsults NULL zijn // en krijg je geen knaller bij .Select (want .Select verwacht altijd minimaal één element). var listConsults = clt.ListOfConsults? .Select(c => new Consultatie // Via deze truc maak je een nieuwe lijst met nieuwe kolommen { ConsultDatum = c.ConsultDate, ConsultOmschrijving = c.ConsultDescr, PrijsVanConsult = c.Price } ).ToList(); var result4 = new WithManyConsultsClient { // Velden uit GenericFields: CompanyName = "JP-BV voor MET-VELE-CONSULTEN klanten", CreatedBy = "USERJP", DateTimeCreated = DateTime.Now.ToString(), // Velden uit BaseClient: KlantNummer = clt.ClientNumber, VolledigeNaamKlant = clt.FirstName + " " + clt.LastName, WoonPlaats = clt.City, // Eigen veld: OmschrijvingKlantMetVeleConsulten = "Dit is een VELE-CONSULTEN KLANT", ListConsults = listConsults }; return(result4); default: throw new Exception(); } }