From 4d822f66f321ce4f0cf0bd5fef16e1af613904dd Mon Sep 17 00:00:00 2001 From: Hakan Kutluay Date: Thu, 20 Oct 2022 21:26:47 +0300 Subject: [PATCH] add multiple time format to deserialize (#66) * add multiple time format to deserialize "HH:mm:ss", "HH:mm", "HH:mm:ss.fffff", "HH:mm:ss.fffffff", "HH:mm:ss.fffffffzzz" closes #64 --- .github/workflows/build-multi-target.yml | 4 +- .github/workflows/publish.yml | 4 +- .../Common/UnqualifiedDataTypes/TimeType.cs | 29 ++- Ubl-Tr/UblTr.csproj | 6 +- UblTr.Tests/InvoiceTypeTest.cs | 52 ++++-- .../BasicInvoiceHourMinuteTime.xml | 167 ++++++++++++++++++ .../InvoiceType/BasicInvoiceIncorrectTime.xml | 167 ++++++++++++++++++ .../InvoiceType/BasicInvoiceLongTime.xml | 167 ++++++++++++++++++ .../InvoiceType/BasicInvoiceNoTime.xml | 166 +++++++++++++++++ UblTr.Tests/UblTr.Tests.csproj | 16 +- 10 files changed, 755 insertions(+), 23 deletions(-) create mode 100644 UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceHourMinuteTime.xml create mode 100644 UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceIncorrectTime.xml create mode 100644 UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceLongTime.xml create mode 100644 UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceNoTime.xml diff --git a/.github/workflows/build-multi-target.yml b/.github/workflows/build-multi-target.yml index 693aee1..0c622a4 100644 --- a/.github/workflows/build-multi-target.yml +++ b/.github/workflows/build-multi-target.yml @@ -9,9 +9,9 @@ jobs: runs-on: windows-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v3 - name: Setup .NET Core - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v3 with: dotnet-version: 6.0.x - name: Build with dotnet diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f23e7ff..1c41652 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,9 +8,9 @@ jobs: runs-on: windows-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup .NET Core - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v3 with: dotnet-version: 6.0.x diff --git a/Ubl-Tr/Common/UnqualifiedDataTypes/TimeType.cs b/Ubl-Tr/Common/UnqualifiedDataTypes/TimeType.cs index 641637b..87e885e 100644 --- a/Ubl-Tr/Common/UnqualifiedDataTypes/TimeType.cs +++ b/Ubl-Tr/Common/UnqualifiedDataTypes/TimeType.cs @@ -1,6 +1,6 @@ using System; using System.Globalization; -using System.Xml.Serialization; +using System.Collections.Generic; namespace UblTr.Common { @@ -42,6 +42,14 @@ namespace UblTr.Common public partial class TimeType { + private List applicableTimeFormats = new List { + "HH:mm:ss", + "HH:mm", + "HH:mm:ss.fffff", + "HH:mm:ss.fffffff", + "HH:mm:ss.fffffffzzz" + }; + private System.DateTime valueField; /// @@ -62,7 +70,24 @@ public System.DateTime Value public String TimeString { get { return this.valueField.ToString("HH:mm:ss"); } - set { this.valueField = DateTime.ParseExact(value, "HH:mm:ss", CultureInfo.InvariantCulture); } + set { + + bool parsed = false; + DateTime parsedValue; + + foreach (var format in applicableTimeFormats) + { + if(DateTime.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedValue)) + { + this.valueField = parsedValue; + parsed = true; + } + } + + if(!parsed) + throw new FormatException($"time {value} is not in correct format"); + + } } } } \ No newline at end of file diff --git a/Ubl-Tr/UblTr.csproj b/Ubl-Tr/UblTr.csproj index 673cd90..746393e 100644 --- a/Ubl-Tr/UblTr.csproj +++ b/Ubl-Tr/UblTr.csproj @@ -9,10 +9,10 @@ Github ubltr ubl-tr e-invoice ubl ubl-tr-1.2.1 e-fatura fatura efatura e-despatch eirsaliye irsaliye applicationresponse uygulamayaniti creditnote receiptadvice MIT - 1.1.6 + 1.2.0 icon.png - 1.1.6.0 - 1.1.6.0 + 1.2.0.0 + 1.2.0.0 diff --git a/UblTr.Tests/InvoiceTypeTest.cs b/UblTr.Tests/InvoiceTypeTest.cs index 0a181f1..0a1cda1 100644 --- a/UblTr.Tests/InvoiceTypeTest.cs +++ b/UblTr.Tests/InvoiceTypeTest.cs @@ -1,27 +1,25 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; -using System.Globalization; using System.IO; using System.Linq; using System.Xml; using System.Xml.Serialization; using UblTr.MainDoc; using UblTr.Serialization; +using System.Globalization; namespace UblTr.Tests { [TestClass] public class InvoiceTypeTest { - private readonly string _basicInvoicePath; - private readonly string _commercialInvoicePath; - + private readonly string _testFilesPath; + public InvoiceTypeTest() { - var path = "TestFiles/InvoiceType/"; - _basicInvoicePath = $"{path}BasicInvoice.xml"; - _commercialInvoicePath = $"{path}CommercialInvoice.xml"; + _testFilesPath = "TestFiles/InvoiceType"; } + InvoiceType DeserializeInvoiceXml(string path) { XmlSerializer serializer = new XmlSerializer(typeof(InvoiceType)); @@ -35,27 +33,56 @@ InvoiceType DeserializeInvoiceXml(string path) [TestMethod] public void InvoiceType_BasicInvoice_Deserialize() { - var invoice = DeserializeInvoiceXml(_basicInvoicePath); + var invoice = DeserializeInvoiceXml($"{_testFilesPath}/BasicInvoice.xml"); Assert.AreEqual("GIB20090000000001", invoice.ID.Value); Assert.AreEqual("TEMELFATURA", invoice.ProfileID.Value); Assert.AreEqual("F47AC10B-58CC-4372-A567-0E02B2C3D479", invoice.UUID.Value); Assert.AreEqual("1288331521", invoice.Signature[0].SignatoryParty.PartyIdentification.FirstOrDefault().ID.Value); Assert.AreEqual(101, invoice.InvoiceLine.FirstOrDefault().InvoicedQuantity.Value); - Assert.AreEqual("14:42:00", invoice.IssueTime.Value.ToString("HH:mm:ss")); + Assert.AreEqual("14:42:00", invoice.IssueTime.Value.ToString("HH:mm:ss", CultureInfo.InvariantCulture)); + } + + [TestMethod] + public void InvoiceType_BasicInvoiceLongTime_Deserialize() + { + var invoice = DeserializeInvoiceXml( $"{_testFilesPath}/BasicInvoiceLongTime.xml"); + Assert.AreEqual("17:11:02", TimeZoneInfo.ConvertTimeToUtc(invoice.IssueTime.Value).ToString("HH:mm:ss")); + } + + + [TestMethod] + public void InvoiceType_BasicInvoiceHourMinute_Deserialize() + { + var invoice = DeserializeInvoiceXml( $"{_testFilesPath}/BasicInvoiceHourMinuteTime.xml"); + Assert.AreEqual("14:42", invoice.IssueTime.Value.ToString("HH:mm", CultureInfo.InvariantCulture)); + } + + [TestMethod] + public void InvoiceType_BasicInvoiceIncorrectTime_Deserialize() + { + Assert.ThrowsException(() => + { + var invoice = DeserializeInvoiceXml($"{_testFilesPath}/BasicInvoiceIncorrectTime.xml"); + }); } + [TestMethod] + public void InvoiceType_BasicInvoiceNoTime_Deserialize() + { + var invoice = DeserializeInvoiceXml($"{_testFilesPath}/BasicInvoiceNoTime.xml"); + Assert.IsNull(invoice.IssueTime); + } [TestMethod] public void InvoiceType_CommercialInvoice_Deserialize() { - var invoice = DeserializeInvoiceXml(_commercialInvoicePath); + var invoice = DeserializeInvoiceXml($"{_testFilesPath}/CommercialInvoice.xml"); Assert.AreEqual("GIB2009000000011", invoice.ID.Value); Assert.AreEqual("TICARIFATURA", invoice.ProfileID.Value); Assert.AreEqual("F47AC10B-58CC-4372-A567-0E02B2C3D479", invoice.UUID.Value); Assert.AreEqual("1288331521", invoice.Signature[0].SignatoryParty.PartyIdentification.FirstOrDefault().ID.Value); Assert.AreEqual(12, invoice.InvoiceLine.FirstOrDefault().InvoicedQuantity.Value); Assert.AreEqual("14:42:00", invoice.IssueTime.Value.ToString("HH:mm:ss")); - } [TestMethod] @@ -81,7 +108,7 @@ public void InvoiceType_BasicInvoice_Serialize() IssueDate = new Common.IssueDateType() { Value = date } }; - + XmlSerializer xmlSerializer = new XmlSerializer(typeof(InvoiceType)); var stream = new MemoryStream(); xmlSerializer.Serialize(stream, invoice, new UblTrNamespaces()); @@ -97,6 +124,7 @@ public void InvoiceType_BasicInvoice_Serialize() } + [TestMethod] public void InvoiceType_BasicInvoice_TimeSerialize() { diff --git a/UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceHourMinuteTime.xml b/UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceHourMinuteTime.xml new file mode 100644 index 0000000..a34c8da --- /dev/null +++ b/UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceHourMinuteTime.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + 2.1 + TR1.2 + TEMELFATURA + GIB20090000000001 + false + F47AC10B-58CC-4372-A567-0E02B2C3D479 + 2009-01-05 + 14:42 + SATIS + TRY + 1 + + 2008-12-05 + 2009-01-05 + + + 1288331521 + + + 1288331521 + + + Papatya Caddesi Yasemin Sokak + 21 + Beşiktaş + İstanbul + 34100 + + Türkiye + + + + + + #Signature + + + + + + http://www.aaa.com.tr/ + + 1288331521 + + + AAA Anonim Şirketi + + + 1234567890 + Papatya Caddesi Yasemin Sokak + 21 + Beşiktaş + İstanbul + 34100 + + Türkiye + + + + + Büyük Mükellefler + + + + (212) 925 51515 + (212) 925505015 + aa@aaa.com.tr + + + + + + + + 1234567890 + + + 1234567 + + + 12345678 + + + ATATÜRK MAH. + 1 + 6. Sokak + 1 + Beşiktaş + İstanbul + 34100 + + Türkiye + + + + 1234567890@mydn.com.tr + + + Ali + YILMAZ + + + + + BBB Bank Otomatik Ödeme + 2009-01-20 + + + 2.73 + + 15.15 + 2.73 + + + 0015 + + + + + + 15.15 + 15.15 + 17.88 + 17.88 + + + 1 + 101 + 15.15 + + false + 0.0 + 0 + 15.15 + + + 2.73 + + 15.15 + 2.73 + 18.0 + + + KDV + 0015 + + + + + + Elektrik Tüketim Bedeli + + + 0.15 + + + \ No newline at end of file diff --git a/UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceIncorrectTime.xml b/UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceIncorrectTime.xml new file mode 100644 index 0000000..72ec3ec --- /dev/null +++ b/UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceIncorrectTime.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + 2.1 + TR1.2 + TEMELFATURA + GIB20090000000001 + false + F47AC10B-58CC-4372-A567-0E02B2C3D479 + 2009-01-05 + 12:1222:122 + SATIS + TRY + 1 + + 2008-12-05 + 2009-01-05 + + + 1288331521 + + + 1288331521 + + + Papatya Caddesi Yasemin Sokak + 21 + Beşiktaş + İstanbul + 34100 + + Türkiye + + + + + + #Signature + + + + + + http://www.aaa.com.tr/ + + 1288331521 + + + AAA Anonim Şirketi + + + 1234567890 + Papatya Caddesi Yasemin Sokak + 21 + Beşiktaş + İstanbul + 34100 + + Türkiye + + + + + Büyük Mükellefler + + + + (212) 925 51515 + (212) 925505015 + aa@aaa.com.tr + + + + + + + + 1234567890 + + + 1234567 + + + 12345678 + + + ATATÜRK MAH. + 1 + 6. Sokak + 1 + Beşiktaş + İstanbul + 34100 + + Türkiye + + + + 1234567890@mydn.com.tr + + + Ali + YILMAZ + + + + + BBB Bank Otomatik Ödeme + 2009-01-20 + + + 2.73 + + 15.15 + 2.73 + + + 0015 + + + + + + 15.15 + 15.15 + 17.88 + 17.88 + + + 1 + 101 + 15.15 + + false + 0.0 + 0 + 15.15 + + + 2.73 + + 15.15 + 2.73 + 18.0 + + + KDV + 0015 + + + + + + Elektrik Tüketim Bedeli + + + 0.15 + + + \ No newline at end of file diff --git a/UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceLongTime.xml b/UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceLongTime.xml new file mode 100644 index 0000000..d583ad0 --- /dev/null +++ b/UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceLongTime.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + 2.1 + TR1.2 + TEMELFATURA + GIB20090000000001 + false + F47AC10B-58CC-4372-A567-0E02B2C3D479 + 2009-01-05 + 20:11:02.2560000+03:00 + SATIS + TRY + 1 + + 2008-12-05 + 2009-01-05 + + + 1288331521 + + + 1288331521 + + + Papatya Caddesi Yasemin Sokak + 21 + Beşiktaş + İstanbul + 34100 + + Türkiye + + + + + + #Signature + + + + + + http://www.aaa.com.tr/ + + 1288331521 + + + AAA Anonim Şirketi + + + 1234567890 + Papatya Caddesi Yasemin Sokak + 21 + Beşiktaş + İstanbul + 34100 + + Türkiye + + + + + Büyük Mükellefler + + + + (212) 925 51515 + (212) 925505015 + aa@aaa.com.tr + + + + + + + + 1234567890 + + + 1234567 + + + 12345678 + + + ATATÜRK MAH. + 1 + 6. Sokak + 1 + Beşiktaş + İstanbul + 34100 + + Türkiye + + + + 1234567890@mydn.com.tr + + + Ali + YILMAZ + + + + + BBB Bank Otomatik Ödeme + 2009-01-20 + + + 2.73 + + 15.15 + 2.73 + + + 0015 + + + + + + 15.15 + 15.15 + 17.88 + 17.88 + + + 1 + 101 + 15.15 + + false + 0.0 + 0 + 15.15 + + + 2.73 + + 15.15 + 2.73 + 18.0 + + + KDV + 0015 + + + + + + Elektrik Tüketim Bedeli + + + 0.15 + + + \ No newline at end of file diff --git a/UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceNoTime.xml b/UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceNoTime.xml new file mode 100644 index 0000000..181c574 --- /dev/null +++ b/UblTr.Tests/TestFiles/InvoiceType/BasicInvoiceNoTime.xml @@ -0,0 +1,166 @@ + + + + + + + + + + + 2.1 + TR1.2 + TEMELFATURA + GIB20090000000001 + false + F47AC10B-58CC-4372-A567-0E02B2C3D479 + 2009-01-05 + SATIS + TRY + 1 + + 2008-12-05 + 2009-01-05 + + + 1288331521 + + + 1288331521 + + + Papatya Caddesi Yasemin Sokak + 21 + Beşiktaş + İstanbul + 34100 + + Türkiye + + + + + + #Signature + + + + + + http://www.aaa.com.tr/ + + 1288331521 + + + AAA Anonim Şirketi + + + 1234567890 + Papatya Caddesi Yasemin Sokak + 21 + Beşiktaş + İstanbul + 34100 + + Türkiye + + + + + Büyük Mükellefler + + + + (212) 925 51515 + (212) 925505015 + aa@aaa.com.tr + + + + + + + + 1234567890 + + + 1234567 + + + 12345678 + + + ATATÜRK MAH. + 1 + 6. Sokak + 1 + Beşiktaş + İstanbul + 34100 + + Türkiye + + + + 1234567890@mydn.com.tr + + + Ali + YILMAZ + + + + + BBB Bank Otomatik Ödeme + 2009-01-20 + + + 2.73 + + 15.15 + 2.73 + + + 0015 + + + + + + 15.15 + 15.15 + 17.88 + 17.88 + + + 1 + 101 + 15.15 + + false + 0.0 + 0 + 15.15 + + + 2.73 + + 15.15 + 2.73 + 18.0 + + + KDV + 0015 + + + + + + Elektrik Tüketim Bedeli + + + 0.15 + + + \ No newline at end of file diff --git a/UblTr.Tests/UblTr.Tests.csproj b/UblTr.Tests/UblTr.Tests.csproj index 800dcaa..34975c3 100644 --- a/UblTr.Tests/UblTr.Tests.csproj +++ b/UblTr.Tests/UblTr.Tests.csproj @@ -30,10 +30,22 @@ Always - PreserveNewest + Always + + + Always + + + Always + + + Always - PreserveNewest + Always + + + Always