예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }