public virtual XElement Visit(Uppgiftslamnare uppgiftslamnare) { Validate(uppgiftslamnare); foreach (var kontaktperson in uppgiftslamnare.Kontaktperson) { Validate(kontaktperson); } var el = new XElement(_ku + "Uppgiftslamnare", new XElement(_ku + "UppgiftslamnarePersOrgnr", uppgiftslamnare.UppgiftslamnarePersOrgnr) ); foreach (var kontaktperson in uppgiftslamnare.Kontaktperson) { el.Add( new XElement(_ku + "Kontaktperson", new XElement(_ku + "Namn", kontaktperson.Namn), new XElement(_ku + "Telefon", kontaktperson.Telefon), new XElement(_ku + "Epostadress", kontaktperson.Epostadress), new XElement(_ku + "Sakomrade", kontaktperson.Sakomrade) ) ); } return(el); }
public XDocument Generate() { XNamespace xmlns = "http://xmls.skatteverket.se/se/skatteverket/ai/instans/infoForBeskattning/6.0"; XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); XNamespace schemaLocation = "http://xmls.skatteverket.se/se/skatteverket/ai/instans/infoForBeskattning/6.0 http://xmls.skatteverket.se/se/skatteverket/ai/kontrolluppgift/instans/Kontrolluppgifter_6.0.xsd"; XNamespace ku = "http://xmls.skatteverket.se/se/skatteverket/ai/komponent/infoForBeskattning/6.0"; var doc = new XDocument(new XDeclaration("1.0", "UTF-8", "no")); var root = new XElement(xmlns + "Skatteverket", new XAttribute(XNamespace.Xmlns + "ku", ku), new XAttribute("omrade", "Kontrolluppgifter"), new XAttribute(XNamespace.Xmlns + "xsi", xsi), new XAttribute(xsi + "schemaLocation", schemaLocation) ); var visitor = new XVisitor(ku); root.Add(Avsandare.Accept(visitor)); var blankettgemensamt = new XElement(ku + "Blankettgemensamt"); foreach (var uppgiftslamnare in Uppgiftslamnare) { blankettgemensamt.Add(uppgiftslamnare.Accept(visitor)); } root.Add(blankettgemensamt); var blankettIdSet = new HashSet <string>(); var uppgiftslamnareSet = new HashSet <string>(Uppgiftslamnare.Select(x => x.UppgiftslamnarePersOrgnr)); var i = 0; foreach (var blankett in Blanketter) { KUId id; try { id = blankett.Blankettinnehall.GetId(); } catch (Exception ex) { throw new InvalidOperationException($"Blankett med index {i} har inget giltigt ID", ex); } if (!uppgiftslamnareSet.Contains(id.UppgiftslamnarId)) { throw new InvalidOperationException($"Uppgiftslämnare för blankett med ID '{id}' är inte med i registret över uppgiftslämnare ({string.Join(", ", uppgiftslamnareSet)}) för dokumentet"); } if (blankett.Arendeinformation.Arendeagare != blankett.Blankettinnehall.Data.GetValueOrDefault <string>(Fältkod.UppgiftslamnarId)) { throw new InvalidOperationException($"Arendeagare för blankett med ID '{id}' ska vara lika med UppgiftslamnarId"); } if (_inkomstar != id.Inkomstar) { throw new InvalidOperationException($"Blankett med ID '{id}' avser ett annat inkomstår än {_inkomstar}"); } try { KUHelper.Validate(blankett.Blankettinnehall); } catch (Exception ex) { throw new InvalidOperationException($"Blankett med ID '{id}' innehåller felaktiga uppgifter", ex); } Sambandskontroller.Sambandskontroll(blankett.Blankettinnehall); root.Add(blankett.Accept(visitor)); i++; } doc.Add(root); // these are soft warnings, they need to be checked but they aren't formal errors foreach (var result in visitor.ValidationResults) { foreach (var result2 in result.ValidationResults) { Console.Error.WriteLine(result2.ErrorMessage); } } // XSD validation var sw = new StringWriter(); doc.Save(sw, SaveOptions.None); using (var reader = XmlReader.Create(new StringReader(sw.ToString()), _xmlSettings)) { while (reader.Read()) { // nom nom nom... } } return(doc); }
static void Main(string[] args) { var inkomstar = 2017; var x = new XEngine(inkomstar); x.Init(); x.Avsandare.Organisationsnummer = "165569659187"; x.Avsandare.TekniskKontaktperson.Namn = "Emelie Öhlund"; x.Avsandare.TekniskKontaktperson.Telefon = "+46192100872"; x.Avsandare.TekniskKontaktperson.Epostadress = "*****@*****.**"; x.Avsandare.TekniskKontaktperson.Postnummer = "702 25"; x.Avsandare.TekniskKontaktperson.Postort = "ÖREBRO"; var uppgiftslamnare = new Uppgiftslamnare { UppgiftslamnarePersOrgnr = "165569659187", Kontaktperson = { new Kontaktperson { Namn = "George Vesterlund", Telefon = "+46424685115", Epostadress = "*****@*****.**", Sakomrade = "Skatteverket", } } }; x.Uppgiftslamnare.Add(uppgiftslamnare); var ku20 = new KU20(); // id ku20.UppgiftslamnarId = uppgiftslamnare.UppgiftslamnarePersOrgnr; ku20.Inkomstar = inkomstar; ku20.Inkomsttagare = "198711292675"; ku20.Specifikationsnummer = 1; // kontrolluppgifter ku20.AvdragenSkatt = 10000; ku20.Ranteinkomst = 20000; ku20.RanteinkomstEjKonto = 40000; ku20.AnnanInkomst = 15000; x.Blanketter.Add(ku20); var ku31 = new KU31(); // id ku31.UppgiftslamnarId = uppgiftslamnare.UppgiftslamnarePersOrgnr; ku31.Inkomstar = inkomstar; ku31.Inkomsttagare = "198911092487"; ku31.Specifikationsnummer = 1; // kontrolluppgifter ku31.AvdragenSkatt = 9000; ku31.ISIN = "SE0000101032"; ku31.UtbetaldUtdelning = 30000; x.Blanketter.Add(ku31); var ku32 = new KU32(); // id ku32.UppgiftslamnarId = uppgiftslamnare.UppgiftslamnarePersOrgnr; ku32.Inkomstar = inkomstar; ku32.Inkomsttagare = "195803024768"; ku32.Specifikationsnummer = 1; // kontrolluppgifter ku32.VPNamn = "Telenor"; ku32.ISIN = "SE0000101032"; ku32.AntalAvyttrade = 100; ku32.ErhallenErsattning = 198000; x.Blanketter.Add(ku32); var doc = x.Generate(); doc.Save("skv260.xml", SaveOptions.None); }