public virtual XElement Visit(Avsandare avsandare) { Validate(avsandare); Validate(avsandare.TekniskKontaktperson); var el = new XElement(_ku + "Avsandare", new XElement(_ku + "Programnamn", avsandare.Programnamn), new XElement(_ku + "Organisationsnummer", avsandare.Organisationsnummer), new XElement(_ku + "TekniskKontaktperson", new XElement(_ku + "Namn", avsandare.TekniskKontaktperson.Namn), new XElement(_ku + "Telefon", avsandare.TekniskKontaktperson.Telefon), new XElement(_ku + "Epostadress", avsandare.TekniskKontaktperson.Epostadress), new XElement(_ku + "Utdelningsadress1", avsandare.TekniskKontaktperson.Utdelningsadress1), new XElement(_ku + "Utdelningsadress2", avsandare.TekniskKontaktperson.Utdelningsadress2), new XElement(_ku + "Postnummer", avsandare.TekniskKontaktperson.Postnummer), new XElement(_ku + "Postort", avsandare.TekniskKontaktperson.Postort) ), new XElement(_ku + "Skapad", avsandare.Skapad) ); 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); }