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);
        }
示例#2
0
        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();
            }
        }