public RecordInstantie(RecordDefinitie definitie, VektisData data)
 {
     Definitie = definitie;
     Data      = data;
     foreach (var velddefinitie in Definitie.Velddefinities)
     {
         dynamic waarde = null;
         if (velddefinitie.Naam == "kenmerk_record")
         {
             waarde = Definitie.Recordcode;
         }
         else if (velddefinitie.Naam == "identificatie_detailrecord")
         {
             waarde = VeldWaarde.TIJDELIJK;  // Krijgt later een waarde
         }
         else if (data.HasMethod(velddefinitie.Naam))
         {
             waarde = data.Call(velddefinitie.Naam);
         }
         else
         {
             waarde = data.Veld(velddefinitie);
         }
         AddVeldWaarde(velddefinitie.Naam, new VeldWaarde(velddefinitie, waarde));
     }
 }
        protected string GenereerClassBroncode(RecordDefinitie recorddefinitie, string srcNamespace, string dataClass)
        {
            var regels = new List <string>();

            regels.Add("using System;");
            if (srcNamespace != "Vektis")
            {
                regels.Add("using Vektis;");
            }
            regels.Add("");
            regels.Add($"namespace {srcNamespace} {{");
            var classname = ClassnameFromRecordtype(recorddefinitie.Recordtype);

            regels.Add($"\tpublic class {classname}: VektisData {{");
            regels.Add($"\t\tpublic {classname}(dynamic item = null) {{");
            regels.Add($"\t\t\tItem = item;");
            regels.Add("\t\t}");
            foreach (VeldDefinitie d in recorddefinitie.Velddefinities)
            {
                regels.Add("\t\t/// <summary>");
                foreach (var regel in d.Beschrijving.Splits(95))
                {
                    regels.Add($"\t\t/// {regel}");
                }
                regels.Add("\t\t/// </summary>");
                var dt  = d.CSharpDatatype();
                var ret = "\"\"";
                if (dt == "int")
                {
                    ret = "0";
                }
                regels.Add($"\t\tpublic {dt} {d.Naam}() {{");
                regels.Add($"\t\t\treturn {ret};");
                regels.Add("\t\t}");
            }
            regels.Add("\t}");
            regels.Add("}");

            return(String.Join("\r\n", regels));
        }
        public void LaadSpecificatie()
        {
            System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
            var skipSheets   = 0;
            var skipRows     = 0;
            var colspec      = Config.Colspec;
            var bestandsnaam = GetBestandsnaam();

            using (var stream = File.Open(bestandsnaam, FileMode.Open, FileAccess.Read)) {
                using (var reader = ExcelReaderFactory.CreateReader(stream)) {
                    // Ga naar de juiste sheet
                    while (skipSheets < Config.Sheet)
                    {
                        reader.NextResult();
                        skipSheets++;
                    }
                    while (reader.Read())
                    {
                        // Ga naar de juiste rij
                        if (skipRows < Config.StartRow)
                        {
                            skipRows++;
                            continue;
                        }
                        var recordtype = reader.GetString(colspec[VektisConfig.RECORDTYPE]);
                        if (recordtype == null || recordtype == "")
                        {
                            break;
                        }
                        var recordcode      = reader.GetString(colspec[VektisConfig.RECORDCODE]);
                        var recordlengte    = Convert.ToInt32(reader.GetDouble(colspec[VektisConfig.LENGTE]));
                        var recorddefinitie = GetRecordefinitie(recordtype);
                        if (recorddefinitie == null)
                        {
                            recorddefinitie = new RecordDefinitie {
                                Recordtype = recordtype, Recordcode = recordcode
                            };
                            Recorddefinities[recordtype] = recorddefinitie;
                        }
                        var eindpos = 0;
                        if (colspec[VektisConfig.EINDPOSITIE] >= 0)
                        {
                            eindpos = Convert.ToInt32(reader.GetDouble(colspec[VektisConfig.EINDPOSITIE]));
                        }
                        else
                        {
                            eindpos = Convert.ToInt32(reader.GetDouble(colspec[VektisConfig.BEGINPOSITIE])) + recordlengte - 1;
                        }

                        recorddefinitie.Velddefinities.Add(
                            new VeldDefinitie {
                            Volgnummer   = Convert.ToInt32(reader.GetDouble(colspec[VektisConfig.VOLGNUMMER])),
                            Naam         = reader.GetString(colspec[VektisConfig.NAAM]),
                            Veldtype     = reader.GetString(colspec[VektisConfig.VELDTYPE]),
                            Lengte       = Convert.ToInt32(reader.GetDouble(colspec[VektisConfig.LENGTE])),
                            Verplichting = reader.GetString(colspec[VektisConfig.VERPLICHTING]),
                            Eindpositie  = eindpos,
                            Patroon      = reader.GetString(colspec[VektisConfig.PATROON]),
                            Beschrijving = reader.GetString(colspec[VektisConfig.BESCHRIJVING])
                        }
                            );
                    }
                }
            }
        }