diff --git a/BO4E-dotnet.Encryption/Anonymizer.cs b/BO4E-dotnet.Encryption/Anonymizer.cs index be22fd08..cf81c78d 100644 --- a/BO4E-dotnet.Encryption/Anonymizer.cs +++ b/BO4E-dotnet.Encryption/Anonymizer.cs @@ -8,14 +8,18 @@ using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text; + using BO4E.BO; using BO4E.Extensions.BusinessObjects; using BO4E.meta; using BO4E.meta.LenientConverters; + using Microsoft.CSharp.RuntimeBinder; using Microsoft.Extensions.Logging; + using Newtonsoft.Json; using Newtonsoft.Json.Linq; + using Org.BouncyCastle.Crypto; namespace BO4E.Extensions.Encryption @@ -117,10 +121,13 @@ public T ApplyOperations(BusinessObject bo) foreach (DataCategory dataCategory in mapping.Keys) { AnonymizerApproach approach = mapping[dataCategory]; - FieldInfo[] affectedFields = BoMapper.GetAnnotatedFields(bo.GetType()); - foreach (FieldInfo affectedField in affectedFields) + PropertyInfo[] affectedProps = bo.GetType().GetProperties() + .Where(p => p.GetCustomAttributes(typeof(DataCategoryAttribute), false).Length > 0) + .OrderBy(ap => ap.GetCustomAttribute()?.Order) + .ToArray(); + foreach (PropertyInfo affectedProp in affectedProps) { - if (!affectedField.IsAnonymizerRelevant(approach, dataCategory)) + if (!affectedProp.IsAnonymizerRelevant(approach, dataCategory)) { continue; } @@ -129,9 +136,9 @@ public T ApplyOperations(BusinessObject bo) case AnonymizerApproach.HASH: try { - object affectedFieldValue = affectedField.GetValue(result); + object affectedFieldValue = affectedProp.GetValue(result); HashObject(ref affectedFieldValue, dataCategory); - affectedField.SetValue(result, affectedFieldValue); + affectedProp.SetValue(result, affectedFieldValue); } catch (RuntimeBinderException e) { @@ -145,26 +152,26 @@ public T ApplyOperations(BusinessObject bo) * annotated default value, otherwise we can safely set null. */ bool isRequired = false; Attribute defaultValueAttribute = null; - Attribute jsonPropertyAttribute = affectedField.GetCustomAttributes().Where(a => a.GetType() == typeof(JsonPropertyAttribute)).FirstOrDefault(); + Attribute jsonPropertyAttribute = affectedProp.GetCustomAttributes().Where(a => a.GetType() == typeof(JsonPropertyAttribute)).FirstOrDefault(); if (jsonPropertyAttribute != null) { JsonPropertyAttribute jpa = (JsonPropertyAttribute)jsonPropertyAttribute; if (jpa.Required == Required.Always) { isRequired = true; - defaultValueAttribute = affectedField.GetCustomAttributes().Where(a => a.GetType() == typeof(DefaultValueAttribute)).FirstOrDefault(); + defaultValueAttribute = affectedProp.GetCustomAttributes().Where(a => a.GetType() == typeof(DefaultValueAttribute)).FirstOrDefault(); } } if (isRequired && defaultValueAttribute != null) { DefaultValueAttribute dva = (DefaultValueAttribute)defaultValueAttribute; - affectedField.SetValue(result, dva.Value); + affectedProp.SetValue(result, dva.Value); } else if (bo.GetType().IsSubclassOf(typeof(BO4E.BO.BusinessObject))) { // e.g. 1*Energiemenge (mappedObject)---> n*Verbrauch (boSubObject) - var boSubObject = affectedField.GetValue(bo); + var boSubObject = affectedProp.GetValue(bo); if (boSubObject != null) { try @@ -185,13 +192,13 @@ public T ApplyOperations(BusinessObject bo) { _logger.LogError($"Couldn't null BO field!: {e.Message}"); } - affectedField.SetValue(result, boSubObject); + affectedProp.SetValue(result, boSubObject); } } else { // strings, integers, elementary - affectedField.SetValue(result, null); + affectedProp.SetValue(result, null); } break; case AnonymizerApproach.ENCRYPT: @@ -201,17 +208,17 @@ public T ApplyOperations(BusinessObject bo) } using (X509AsymmetricEncrypter xasyncenc = new X509AsymmetricEncrypter(this.publicKeyX509)) { - if (affectedField.GetValue(bo).GetType() == typeof(string)) + if (affectedProp.GetValue(bo).GetType() == typeof(string)) { - if (affectedField.GetValue(bo) != null) + if (affectedProp.GetValue(bo) != null) { - affectedField.SetValue(result, xasyncenc.Encrypt(affectedField.GetValue(bo).ToString())); + affectedProp.SetValue(result, xasyncenc.Encrypt(affectedProp.GetValue(bo).ToString())); } } - else if (affectedField.GetValue(bo).GetType().IsSubclassOf(typeof(BO4E.COM.COM))) + else if (affectedProp.GetValue(bo).GetType().IsSubclassOf(typeof(BO4E.COM.COM))) { - var comObject = affectedField.GetValue(bo); - dynamic comFields = comObject.GetType().GetFields(); + var comObject = affectedProp.GetValue(bo); + dynamic comFields = comObject.GetType().GetProperties(); foreach (dynamic comField in comFields) { try @@ -229,21 +236,21 @@ public T ApplyOperations(BusinessObject bo) _logger.LogError($"Couldn't encrypt COM field!: {f.Message}"); } } - affectedField.SetValue(result, comObject); + affectedProp.SetValue(result, comObject); } - else if (affectedField.FieldType.IsSubclassOf(typeof(BO4E.BO.BusinessObject))) + else if (affectedProp.PropertyType.IsSubclassOf(typeof(BO4E.BO.BusinessObject))) { - affectedField.SetValue(result, xasyncenc.Encrypt((BusinessObject)affectedField.GetValue(bo))); + affectedProp.SetValue(result, xasyncenc.Encrypt((BusinessObject)affectedProp.GetValue(bo))); } - else if (affectedField.FieldType.ToString().StartsWith("BO4E.ENUM")) // todo: check for namespace instead of strinyfied comparison + else if (affectedProp.PropertyType.ToString().StartsWith("BO4E.ENUM")) // todo: check for namespace instead of strinyfied comparison { //affectedField.SetValue(mappedObject, Sha256HashEnum(affectedField.GetValue(mappedObject).ToString())); - _logger.LogWarning($"Encrypting {affectedField.FieldType} is not supported, since the result would not be a valid ENUM value."); + _logger.LogWarning($"Encrypting {affectedProp.PropertyType} is not supported, since the result would not be a valid ENUM value."); //throw new NotSupportedException($"Hashing {affectedField.FieldType} is not supported, since the result would not be a valid ENUM value."); } else { - throw new NotImplementedException($"Encrypting {affectedField.FieldType} is not implemented yet."); + throw new NotImplementedException($"Encrypting {affectedProp.PropertyType} is not implemented yet."); } } break; @@ -254,7 +261,7 @@ public T ApplyOperations(BusinessObject bo) } using (X509AsymmetricEncrypter xasydec = new X509AsymmetricEncrypter(this.privateKey)) { - affectedField.SetValue(result, xasydec.Decrypt(affectedField.GetValue(bo).ToString())); + affectedProp.SetValue(result, xasydec.Decrypt(affectedProp.GetValue(bo).ToString())); } continue; case AnonymizerApproach.KEEP: @@ -337,25 +344,25 @@ protected void HashObject(ref object input, DataCategory? dataCategory = null) } else { - var fields = inputType.GetFields(); - foreach (var field in fields) + var properties = inputType.GetProperties(); + foreach (var prop in properties) { - if (field.GetValue(input) == null || !field.IsHashingRelevant(dataCategory)) + if (prop.GetValue(input) == null || !prop.IsHashingRelevant(dataCategory)) { continue; } try { - object o = field.GetValue(input); + object o = prop.GetValue(input); HashObject(ref o, dataCategory); - field.SetValue(input, o); + prop.SetValue(input, o); } catch (Exception f) { - throw new ArgumentException($"Couldn't hash field {field.Name}: {f.Message}"); + throw new ArgumentException($"Couldn't hash field {prop.Name}: {f.Message}"); } } - if (fields.Count() == 0) + if (properties.Count() == 0) { throw new NotImplementedException($"Type {inputType} with value '{input}' has no subfields but is not handled separately."); } @@ -416,28 +423,28 @@ protected void HashString(ref string input, DataCategory? dataCategory) /// true if the fulfills the requirements of a hashed key public static bool HasHashedKey(Marktlokation ma) { - return !string.IsNullOrWhiteSpace(ma.marktlokationsId) && ma.marktlokationsId.StartsWith(HASHED_MARKTLOKATION_PREFIX); + return !string.IsNullOrWhiteSpace(ma.MarktlokationsId) && ma.MarktlokationsId.StartsWith(HASHED_MARKTLOKATION_PREFIX); } /// /// check if a Messlokation has been pseudonymized using /// As of 2019 it's impossible for a "real" Messlokation to fulfill this condition. /// /// Messlokation - /// true if the fulfills the requirements of a hashed key + /// true if the fulfills the requirements of a hashed key public static bool HasHashedKey(Messlokation me) { - return !string.IsNullOrWhiteSpace(me.messlokationsId) && me.messlokationsId.StartsWith(HASHED_MESSLOKATION_PREFIX); + return !string.IsNullOrWhiteSpace(me.MesslokationsId) && me.MesslokationsId.StartsWith(HASHED_MESSLOKATION_PREFIX); } /// /// check if an Energiemenge been pseudonymized using . - /// Calls for . + /// Calls for . /// /// Energiemenge - /// true if the fulfills the requirements of a hashed key + /// true if the fulfills the requirements of a hashed key public static bool HasHashedKey(Energiemenge em) { - return IsHashedKey(em.lokationsId); + return IsHashedKey(em.LokationsId); } /// diff --git a/BO4E-dotnet.Encryption/AnonymizerConfiguration.cs b/BO4E-dotnet.Encryption/AnonymizerConfiguration.cs index 038fddf7..b9cef91f 100644 --- a/BO4E-dotnet.Encryption/AnonymizerConfiguration.cs +++ b/BO4E-dotnet.Encryption/AnonymizerConfiguration.cs @@ -19,7 +19,7 @@ public class AnonymizerConfiguration public Dictionary operations { get; private set; } /// - /// set of key in / that should not be affected by the anonymizing operations + /// set of key in / that should not be affected by the anonymizing operations /// [JsonProperty(Required = Required.Default)] public HashSet unaffectedUserProperties; diff --git a/BO4E-dotnet.Encryption/AsymmetricEncrypter.cs b/BO4E-dotnet.Encryption/AsymmetricEncrypter.cs index 58572470..b79fe9d2 100644 --- a/BO4E-dotnet.Encryption/AsymmetricEncrypter.cs +++ b/BO4E-dotnet.Encryption/AsymmetricEncrypter.cs @@ -105,7 +105,7 @@ public override BusinessObject Decrypt(EncryptedObject encryptedObject) { return null; } - string plainString = Decrypt(eo.cipherText, eo.publicKey, eo.nonce); + string plainString = Decrypt(eo.CipherText, eo.PublicKey, eo.Nonce); return JsonConvert.DeserializeObject(plainString); } diff --git a/BO4E-dotnet.Encryption/BO4E-dotnet.Extensions.Encryption.csproj b/BO4E-dotnet.Encryption/BO4E-dotnet.Extensions.Encryption.csproj index ff7d0f5f..c34ffc58 100644 --- a/BO4E-dotnet.Encryption/BO4E-dotnet.Extensions.Encryption.csproj +++ b/BO4E-dotnet.Encryption/BO4E-dotnet.Extensions.Encryption.csproj @@ -11,6 +11,7 @@ Hochfrequenz.BO4E.Extensions.Encryption Hochfrequenz Unternehmensberatung GmbH + 0.2.0 diff --git a/BO4E-dotnet.Encryption/EncryptedObject.cs b/BO4E-dotnet.Encryption/EncryptedObject.cs index 3d4ad641..ea5d3c18 100644 --- a/BO4E-dotnet.Encryption/EncryptedObject.cs +++ b/BO4E-dotnet.Encryption/EncryptedObject.cs @@ -17,16 +17,16 @@ public abstract class EncryptedObject : BusinessObject /// /// encryption scheme used /// - [JsonProperty(Required = Required.Always, Order = 7)] + [JsonProperty(PropertyName = "encryptionScheme", Required = Required.Always, Order = 7)] [BoKey] - public EncryptionScheme encryptionScheme; + public EncryptionScheme EncryptionScheme { get; set; } /// /// base64 encoded cipher text of the original objects JSON serialisation /// - [JsonProperty(Required = Required.Always, Order = 8)] + [JsonProperty(PropertyName = "cipherText", Required = Required.Always, Order = 8)] [BoKey] - public string cipherText; + public string CipherText { get; set; } /// /// create a new EncryptedObject instance by providing both @@ -35,8 +35,8 @@ public abstract class EncryptedObject : BusinessObject /// the encryption scheme public EncryptedObject(string _cipherText, EncryptionScheme es) : base() { - this.cipherText = _cipherText; - this.encryptionScheme = es; + this.CipherText = _cipherText; + this.EncryptionScheme = es; } } } diff --git a/BO4E-dotnet.Encryption/EncryptedObjectAEAD.cs b/BO4E-dotnet.Encryption/EncryptedObjectAEAD.cs index 0c1c0a35..fd290036 100644 --- a/BO4E-dotnet.Encryption/EncryptedObjectAEAD.cs +++ b/BO4E-dotnet.Encryption/EncryptedObjectAEAD.cs @@ -1,4 +1,5 @@ using BO4E.ENUM; + using Newtonsoft.Json; namespace BO4E.BO @@ -13,20 +14,20 @@ public class EncryptedObjectAEAD : EncryptedObject /// unique nonce / initialisation vector (base 64 encoded, must not be used twice) public EncryptedObjectAEAD(string cipherText, string associatedData, string nonce) : base(cipherText, EncryptionScheme.SodiumSymmetricAEAD) { - this.associatedData = associatedData; - this.nonce = nonce; + this.AssociatedData = associatedData; + this.Nonce = nonce; } /// /// base64 encoded unique nonce / initialisation vector /// - [JsonProperty(Required = Required.Always, Order = 8)] - public string nonce; + [JsonProperty(PropertyName = "nonce", Required = Required.Always, Order = 8)] + public string Nonce { get; set; } /// /// associated data string (UTF-8); might be an empty string but not null /// - [JsonProperty(Required = Required.Always, Order = 5)] - public string associatedData; + [JsonProperty(PropertyName = "AssociatedData", Required = Required.Always, Order = 5)] + public string AssociatedData { get; set; } } } diff --git a/BO4E-dotnet.Encryption/EncryptedObjectPKCS7.cs b/BO4E-dotnet.Encryption/EncryptedObjectPKCS7.cs index f35f1ff5..e8863b14 100644 --- a/BO4E-dotnet.Encryption/EncryptedObjectPKCS7.cs +++ b/BO4E-dotnet.Encryption/EncryptedObjectPKCS7.cs @@ -1,5 +1,7 @@ using System.Collections.Generic; + using BO4E.ENUM; + using Newtonsoft.Json; @@ -14,13 +16,13 @@ public class EncryptedObjectPKCS7 : EncryptedObject /// list of public keys for which the object is decrypt-able public EncryptedObjectPKCS7(string cipherText, List publicKeys) : base(cipherText, EncryptionScheme.BouncyCastleCMS) { - this.publicKeys = publicKeys; + this.PublicKeys = publicKeys; } /// /// list of public keys for which the object is decrypt-able /// - [JsonProperty(Required = Required.Default)] - public List publicKeys; + [JsonProperty(PropertyName = "publicKeys", Required = Required.Default)] + public List PublicKeys { get; set; } } } diff --git a/BO4E-dotnet.Encryption/EncryptedObjectPublicKeyBox.cs b/BO4E-dotnet.Encryption/EncryptedObjectPublicKeyBox.cs index d32229b8..1b14d9ec 100644 --- a/BO4E-dotnet.Encryption/EncryptedObjectPublicKeyBox.cs +++ b/BO4E-dotnet.Encryption/EncryptedObjectPublicKeyBox.cs @@ -1,4 +1,5 @@ using BO4E.ENUM; + using Newtonsoft.Json; namespace BO4E.BO @@ -16,20 +17,20 @@ public class EncryptedObjectPublicKeyBox : EncryptedObject /// unique nonce / initialisation vector (base 64 encoded, must not be used twice) public EncryptedObjectPublicKeyBox(string cipherText, string publicKey, string nonce) : base(cipherText, EncryptionScheme.SodiumAsymmetricPublicKeyBox) { - this.publicKey = publicKey; - this.nonce = nonce; + this.PublicKey = publicKey; + this.Nonce = nonce; } /// /// Base64 encoded unique nonce / initialisation vector (IV) /// - [JsonProperty(Required = Required.Always, Order = 8)] - public string nonce; + [JsonProperty(PropertyName = "nonce", Required = Required.Always, Order = 8)] + public string Nonce { get; set; } /// /// base64 encoded public key of the message sender /// - [JsonProperty(Required = Required.Always, Order = 5)] - public string publicKey; + [JsonProperty(PropertyName = "publicKey", Required = Required.Always, Order = 5)] + public string PublicKey { get; set; } } } diff --git a/BO4E-dotnet.Encryption/FieldInfoExtensions.cs b/BO4E-dotnet.Encryption/FieldInfoExtensions.cs index fc8f8fd1..b2c70999 100644 --- a/BO4E-dotnet.Encryption/FieldInfoExtensions.cs +++ b/BO4E-dotnet.Encryption/FieldInfoExtensions.cs @@ -8,37 +8,37 @@ namespace BO4E.Extensions.Encryption { internal static class FieldInfoExtensions { - internal static bool IsAnonymizerRelevant(this FieldInfo field, AnonymizerApproach approach, DataCategory? dataCategory) + internal static bool IsAnonymizerRelevant(this PropertyInfo prop, AnonymizerApproach approach, DataCategory? dataCategory) { switch (approach) { case AnonymizerApproach.DELETE: - return field.IsDeletionRelevant(dataCategory); + return prop.IsDeletionRelevant(dataCategory); case AnonymizerApproach.HASH: - return field.IsHashingRelevant(dataCategory); + return prop.IsHashingRelevant(dataCategory); case AnonymizerApproach.ENCRYPT: case AnonymizerApproach.DECRYPT: - return field.IsEncryptionRelevant(dataCategory); + return prop.IsEncryptionRelevant(dataCategory); case AnonymizerApproach.KEEP: default: return false; } } - internal static bool IsHashingRelevant(this FieldInfo field, DataCategory? dataCategory) + internal static bool IsHashingRelevant(this PropertyInfo property, DataCategory? dataCategory) { - if (field.FieldType.IsSubclassOf(typeof(BO4E.COM.COM)) || field.FieldType.IsSubclassOf(typeof(BO4E.BO.BusinessObject))) + if (property.PropertyType.IsSubclassOf(typeof(BO4E.COM.COM)) || property.PropertyType.IsSubclassOf(typeof(BO4E.BO.BusinessObject))) { return true; } - else if (field.FieldType.IsGenericType && field.FieldType.GetGenericTypeDefinition() == typeof(List<>)) + else if (property.PropertyType.IsGenericType && property.PropertyType.GetGenericTypeDefinition() == typeof(List<>)) { - var listElementType = field.FieldType.GetGenericArguments()[0]; + var listElementType = property.PropertyType.GetGenericArguments()[0]; return listElementType.IsSubclassOf(typeof(BO4E.COM.COM)) || listElementType.IsSubclassOf(typeof(BO4E.BO.BusinessObject)); } else if (dataCategory.HasValue) { - foreach (Attribute attribute in field.GetCustomAttributes().Where(a => a.GetType() == typeof(DataCategoryAttribute))) + foreach (Attribute attribute in property.GetCustomAttributes().Where(a => a.GetType() == typeof(DataCategoryAttribute))) { DataCategoryAttribute dataCatagoryAttribute = (DataCategoryAttribute)attribute; if (!dataCatagoryAttribute.Mapping.Contains(dataCategory.Value)) @@ -51,15 +51,15 @@ internal static bool IsHashingRelevant(this FieldInfo field, DataCategory? dataC return false; } - internal static bool IsEncryptionRelevant(this FieldInfo field, DataCategory? dataCategory) + internal static bool IsEncryptionRelevant(this PropertyInfo property, DataCategory? dataCategory) { - if (field.FieldType.IsSubclassOf(typeof(BO4E.COM.COM)) || field.FieldType.IsSubclassOf(typeof(BO4E.BO.BusinessObject)) || field.FieldType.IsEnum) + if (property.PropertyType.IsSubclassOf(typeof(BO4E.COM.COM)) || property.PropertyType.IsSubclassOf(typeof(BO4E.BO.BusinessObject)) || property.PropertyType.IsEnum) { return false; // not yet supported for encryption } if (dataCategory.HasValue) { - foreach (Attribute attribute in field.GetCustomAttributes().Where(a => a.GetType() == typeof(DataCategoryAttribute))) + foreach (Attribute attribute in property.GetCustomAttributes().Where(a => a.GetType() == typeof(DataCategoryAttribute))) { DataCategoryAttribute dataCatagoryAttribute = (DataCategoryAttribute)attribute; if (!dataCatagoryAttribute.Mapping.Contains(dataCategory.Value)) @@ -72,15 +72,15 @@ internal static bool IsEncryptionRelevant(this FieldInfo field, DataCategory? da return false; } - internal static bool IsDeletionRelevant(this FieldInfo field, DataCategory? dataCategory) + internal static bool IsDeletionRelevant(this PropertyInfo property, DataCategory? dataCategory) { - if (field.FieldType.IsEnum) + if (property.PropertyType.IsEnum) { return false; } if (dataCategory.HasValue) { - foreach (Attribute attribute in field.GetCustomAttributes().Where(a => a.GetType() == typeof(DataCategoryAttribute))) + foreach (Attribute attribute in property.GetCustomAttributes().Where(a => a.GetType() == typeof(DataCategoryAttribute))) { DataCategoryAttribute dataCatagoryAttribute = (DataCategoryAttribute)attribute; if (!dataCatagoryAttribute.Mapping.Contains(dataCategory.Value)) diff --git a/BO4E-dotnet.Encryption/SymmetricEncrypter.cs b/BO4E-dotnet.Encryption/SymmetricEncrypter.cs index c91a3bde..da5945ac 100644 --- a/BO4E-dotnet.Encryption/SymmetricEncrypter.cs +++ b/BO4E-dotnet.Encryption/SymmetricEncrypter.cs @@ -95,7 +95,7 @@ public override BusinessObject Decrypt(EncryptedObject encryptedObject) { return null; } - string plainString = Decrypt(eo.cipherText, eo.associatedData, eo.nonce); + string plainString = Decrypt(eo.CipherText, eo.AssociatedData, eo.Nonce); return JsonConvert.DeserializeObject(plainString); } diff --git a/BO4E-dotnet.Encryption/X509AsymmetricEncrypter.cs b/BO4E-dotnet.Encryption/X509AsymmetricEncrypter.cs index 084bed3a..c283f6a4 100644 --- a/BO4E-dotnet.Encryption/X509AsymmetricEncrypter.cs +++ b/BO4E-dotnet.Encryption/X509AsymmetricEncrypter.cs @@ -148,7 +148,7 @@ public override BusinessObject Decrypt(EncryptedObject encryptedObject) { return null; } - string plainString = Decrypt(eo.cipherText); + string plainString = Decrypt(eo.CipherText); return JsonConvert.DeserializeObject(plainString); } diff --git a/BO4E-dotnet.Extensions/BO4E-dotnet.Extensions.csproj b/BO4E-dotnet.Extensions/BO4E-dotnet.Extensions.csproj index 61e369fe..2af68842 100644 --- a/BO4E-dotnet.Extensions/BO4E-dotnet.Extensions.csproj +++ b/BO4E-dotnet.Extensions/BO4E-dotnet.Extensions.csproj @@ -10,6 +10,7 @@ https://github.com/HFInnovation/BO4E-dotnet/ Hochfrequenz.BO4E.Extensions Hochfrequenz Unternehmensberatung GmbH + 0.2.0 diff --git a/BO4E-dotnet.Extensions/BusinessObjects/Benachrichtigung/BenachrichtigungExtension.cs b/BO4E-dotnet.Extensions/BusinessObjects/Benachrichtigung/BenachrichtigungExtension.cs index eb481945..7c30c6bf 100644 --- a/BO4E-dotnet.Extensions/BusinessObjects/Benachrichtigung/BenachrichtigungExtension.cs +++ b/BO4E-dotnet.Extensions/BusinessObjects/Benachrichtigung/BenachrichtigungExtension.cs @@ -2,8 +2,8 @@ using System.Collections.Generic; using System.ComponentModel; using System.Linq; + using Newtonsoft.Json.Linq; -using BO4E.BO; namespace BO4E.Extensions.BusinessObjects.Benachrichtigung { @@ -21,8 +21,8 @@ public static bool Has(this BO4E.BO.Benachrichtigung b, string key, string value { return Has(b, new BO4E.COM.GenericStringStringInfo() { - keyColumn = key, - value = value + KeyColumn = key, + Value = value }); } @@ -34,12 +34,12 @@ public static bool Has(this BO4E.BO.Benachrichtigung b, string key, string value /// public static bool Has(this BO4E.BO.Benachrichtigung b, BO4E.COM.GenericStringStringInfo gssi) { - if (b.infos == null || b.infos.Count == 0) + if (b.Infos == null || b.Infos.Count == 0) { return false; } // ToDo f�r Hamid: Bitte pr�fen, warum Contains false zur�ckliefert. - return (b.infos.Where(m => m.keyColumn == gssi.keyColumn && m.value == gssi.value).Count() > 0); + return (b.Infos.Where(m => m.KeyColumn == gssi.KeyColumn && m.Value == gssi.Value).Count() > 0); } /// @@ -50,11 +50,11 @@ public static bool Has(this BO4E.BO.Benachrichtigung b, BO4E.COM.GenericStringSt /// true if key is in public static bool Has(this BO4E.BO.Benachrichtigung b, string key) { - if (b.infos == null || b.infos.Count == 0) + if (b.Infos == null || b.Infos.Count == 0) { return false; } - return (b.infos.Where(gssi => gssi.keyColumn == key).Count() > 0); + return (b.Infos.Where(gssi => gssi.KeyColumn == key).Count() > 0); } /// @@ -73,7 +73,7 @@ public static bool Has(this BO4E.BO.Benachrichtigung b, string keyName, Predi { return passByDefault; } - foreach (var info in b.infos.Where(gssi => gssi.keyColumn == keyName)) + foreach (var info in b.Infos.Where(gssi => gssi.KeyColumn == keyName)) { try { @@ -83,7 +83,7 @@ public static bool Has(this BO4E.BO.Benachrichtigung b, string keyName, Predi } if (typeConverter != null) { - T value = (T)typeConverter.ConvertFromString(info.value); + T value = (T)typeConverter.ConvertFromString(info.Value); return predicate(value); } continue; @@ -97,28 +97,28 @@ public static bool Has(this BO4E.BO.Benachrichtigung b, string keyName, Predi } /// - /// moves key value pairs from to for more conventient handling. + /// moves key value pairs from to for more conventient handling. /// /// Benachrichtigung /// set true to overwrite userProperties with same key // ToDo: make method generic MoveInfosTouserProperties(...) public static void MoveInfosToUserProperties(this BO4E.BO.Benachrichtigung b, bool overwriteExistingKeys = false) { - if (b.infos != null && b.infos.Count > 0) + if (b.Infos != null && b.Infos.Count > 0) { - if (b.userProperties == null) + if (b.UserProperties == null) { - b.userProperties = new Dictionary(); + b.UserProperties = new Dictionary(); } - foreach (var info in b.infos) + foreach (var info in b.Infos) { - if (b.userProperties.ContainsKey(info.keyColumn) && overwriteExistingKeys) + if (b.UserProperties.ContainsKey(info.KeyColumn) && overwriteExistingKeys) { - b.userProperties.Remove(info.keyColumn); + b.UserProperties.Remove(info.KeyColumn); } - b.userProperties.Add(info.keyColumn, info.value); // might throw exception if key exists and !overwriteExistingKeys. That's ok. + b.UserProperties.Add(info.KeyColumn, info.Value); // might throw exception if key exists and !overwriteExistingKeys. That's ok. } - b.infos = null; // set to null after all elements have been moved + b.Infos = null; // set to null after all elements have been moved } } } diff --git a/BO4E-dotnet.Extensions/BusinessObjects/Energiemenge/EnergiemengeExtension.cs b/BO4E-dotnet.Extensions/BusinessObjects/Energiemenge/EnergiemengeExtension.cs index 203c59ae..9b3af087 100644 --- a/BO4E-dotnet.Extensions/BusinessObjects/Energiemenge/EnergiemengeExtension.cs +++ b/BO4E-dotnet.Extensions/BusinessObjects/Energiemenge/EnergiemengeExtension.cs @@ -2,14 +2,19 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; + using BO4E.COM; using BO4E.ENUM; using BO4E.Extensions.COM; using BO4E.Extensions.ENUM; using BO4E.Reporting; + using Itenso.TimePeriod; + using Newtonsoft.Json.Linq; + using StackExchange.Profiling; + using static BO4E.Extensions.COM.VerbrauchExtension; @@ -24,15 +29,15 @@ public static partial class EnergiemengeExtension /// Get Zeitraum covered by Energiemenge. /// /// Energiemenge - /// Zeitraum ranging from the earliest to the latest + /// Zeitraum ranging from the earliest to the latest public static Zeitraum GetZeitraum(this BO4E.BO.Energiemenge menge) { using (MiniProfiler.Current.Step(nameof(GetZeitraum))) { Zeitraum zeitraum = new Zeitraum { - startdatum = GetMinDate(menge), - enddatum = GetMaxDate(menge) + Startdatum = GetMinDate(menge), + Enddatum = GetMaxDate(menge) }; return zeitraum; } @@ -42,7 +47,7 @@ public static Zeitraum GetZeitraum(this BO4E.BO.Energiemenge menge) /// Get TimeRange covery by Energiemenge /// /// Energiemenge - /// TimeRange ranging from the earliest to the latest + /// TimeRange ranging from the earliest to the latest /// public static TimeRange GetTimeRange(this BO4E.BO.Energiemenge menge) { @@ -66,7 +71,7 @@ private static DateTime GetMinDate(this BO4E.BO.Energiemenge em) { using (MiniProfiler.Current.Step(nameof(GetMinDate))) { - return em.energieverbrauch.Min(ev => ev.startdatum); // don't catch! + return em.Energieverbrauch.Min(ev => ev.Startdatum); // don't catch! } } @@ -74,7 +79,7 @@ private static DateTime GetMaxDate(this BO4E.BO.Energiemenge em) { using (MiniProfiler.Current.Step(nameof(GetMinDate))) { - return em.energieverbrauch.Max(ev => ev.enddatum); // don't catch! + return em.Energieverbrauch.Max(ev => ev.Enddatum); // don't catch! } } @@ -117,19 +122,19 @@ public static Tuple GetConsumption(this BO4E.BO.Energiem { throw new ArgumentException("The Energiemenge is not pure."); } - if (em.energieverbrauch.Count == 0) + if (em.Energieverbrauch.Count == 0) { return Tuple.Create(0.0M, Mengeneinheit.ANZAHL); } - ISet einheiten = new HashSet(em.energieverbrauch.Select(x => x.einheit)); + ISet einheiten = new HashSet(em.Energieverbrauch.Select(x => x.Einheit)); if (einheiten.Count > 1) { // z.B. kWh und Wh oder Monat und Jahr... Die liefern IsPure==true. throw new NotImplementedException("Converting different units of same type is not supported yet."); } - Verbrauch v = em.energieverbrauch.First(); - decimal consumption = em.GetConsumption(reference, v.wertermittlungsverfahren, v.obiskennzahl, v.einheit); - return Tuple.Create(consumption, v.einheit); + Verbrauch v = em.Energieverbrauch.First(); + decimal consumption = em.GetConsumption(reference, v.Wertermittlungsverfahren, v.Obiskennzahl, v.Einheit); + return Tuple.Create(consumption, v.Einheit); } } @@ -149,10 +154,10 @@ public static decimal GetConsumption(this BO4E.BO.Energiemenge em, ITimeRange re { throw new ArgumentException($"The Mengeneinheit {me} isn't extensive. Calculating a consumption doesn't make sense."); } - return em.energieverbrauch - .Where(v => v.wertermittlungsverfahren == wev && v.obiskennzahl == obiskennzahl && v.einheit == me) + return em.Energieverbrauch + .Where(v => v.Wertermittlungsverfahren == wev && v.Obiskennzahl == obiskennzahl && v.Einheit == me) //.AsParallel() - .Sum(v => GetOverlapFactor(new TimeRange(v.startdatum, v.enddatum), reference, false) * v.wert); + .Sum(v => GetOverlapFactor(new TimeRange(v.Startdatum, v.Enddatum), reference, false) * v.Wert); } /// @@ -183,9 +188,9 @@ public static BO4E.BO.Energiemenge Normalise(this BO4E.BO.Energiemenge em, decim } using (MiniProfiler.Current.Step("Parallelised normalising of all values.")) { - Parallel.ForEach(result.energieverbrauch.Where(v => v.einheit == totalConsumption.Item2), v => + Parallel.ForEach(result.Energieverbrauch.Where(v => v.Einheit == totalConsumption.Item2), v => { - v.wert = scalingFactor * v.wert; + v.Wert = scalingFactor * v.Wert; }); } return result; @@ -206,15 +211,15 @@ public static BO4E.BO.Energiemenge Normalise(this BO4E.BO.Energiemenge em, decim throw new ArgumentException($"The Mengeneinheit {me} isn't intensive. Calculating the value for a specific point in time doesn't make sense."); } decimal? result = null; - foreach (Verbrauch v in em.energieverbrauch.Where(v => v.startdatum <= dt && dt < v.enddatum)) + foreach (Verbrauch v in em.Energieverbrauch.Where(v => v.Startdatum <= dt && dt < v.Enddatum)) { if (result.HasValue) { - result += v.wert; + result += v.Wert; } else { - result = v.wert; + result = v.Wert; } } return result; @@ -233,14 +238,14 @@ public static BO4E.BO.Energiemenge Normalise(this BO4E.BO.Energiemenge em, decim { throw new ArgumentException("Energiemenge is not pure."); } - else if (em.energieverbrauch.Count == 0) + else if (em.Energieverbrauch.Count == 0) { return Tuple.Create(null, Mengeneinheit.KW); } else { - Verbrauch v = em.energieverbrauch.First(); - return Tuple.Create(em.GetAverage(v.wertermittlungsverfahren, v.obiskennzahl, v.einheit), v.einheit); + Verbrauch v = em.Energieverbrauch.First(); + return Tuple.Create(em.GetAverage(v.Wertermittlungsverfahren, v.Obiskennzahl, v.Einheit), v.Einheit); } } @@ -272,16 +277,16 @@ public static BO4E.BO.Energiemenge Normalise(this BO4E.BO.Energiemenge em, decim { decimal? result = null; decimal overallDenominator = 0.0M; - foreach (Verbrauch v in em.energieverbrauch.Where(v => v.einheit == me)) + foreach (Verbrauch v in em.Energieverbrauch.Where(v => v.Einheit == me)) { - decimal overlapFactor = GetOverlapFactor(new TimeRange(v.startdatum, v.enddatum), reference, true); + decimal overlapFactor = GetOverlapFactor(new TimeRange(v.Startdatum, v.Enddatum), reference, true); if (result.HasValue) { - result += overlapFactor * v.wert; + result += overlapFactor * v.Wert; } else { - result = v.wert; + result = v.Wert; } overallDenominator += overlapFactor; } @@ -321,9 +326,9 @@ public static List GetMissingTimeRanges(this BO4E.BO.Energiemenge em, IDictionary, Verbrauch> filteredVerbrauch; using (MiniProfiler.Current.Step($"Filtering energieverbrauch on OBIS={obis}, WEV={wev}, Mengeneinheit={me}")) { - filteredVerbrauch = em.energieverbrauch - .Where(v => v.wertermittlungsverfahren == wev && v.obiskennzahl == obis && v.einheit == me) - .ToDictionary(v => new Tuple(v.startdatum, v.enddatum), v => v); + filteredVerbrauch = em.Energieverbrauch + .Where(v => v.Wertermittlungsverfahren == wev && v.Obiskennzahl == obis && v.Einheit == me) + .ToDictionary(v => new Tuple(v.Startdatum, v.Enddatum), v => v); } if (filteredVerbrauch.Count < 2) { @@ -339,7 +344,7 @@ public static List GetMissingTimeRanges(this BO4E.BO.Energiemenge em, throw new ArgumentException($"The absolute difference between reference.start ({reference.Start}) and the minimal date time in the Energiemenge ({em.GetMinDate()}) has to be an integer multiple of the periodicity {periodicity.TotalMilliseconds} but was {(reference.Start - em.GetMinDate()).TotalMilliseconds}."); } // since it's assured, that the energieverbrauch entries are evenly spaced it doesn't matter which entry we use to determine the duration. - TimeSpan duration = filteredVerbrauch.Values.Min(v => v.enddatum) - filteredVerbrauch.Values.Min(v => v.startdatum); + TimeSpan duration = filteredVerbrauch.Values.Min(v => v.Enddatum) - filteredVerbrauch.Values.Min(v => v.Startdatum); List result = new List(); using (MiniProfiler.Current.Step("Populating list with time slices in UTC")) { @@ -381,8 +386,8 @@ public static List GetMissingTimeRanges(this BO4E.BO.Energiemenge em, { throw new ArgumentException("The Energiemenge you provided is not pure. Consider using the overloaded method."); } - Verbrauch v = em.energieverbrauch.FirstOrDefault(); - return GetMissingTimeRanges(em, reference, v.wertermittlungsverfahren, v.obiskennzahl, v.einheit); + Verbrauch v = em.Energieverbrauch.FirstOrDefault(); + return GetMissingTimeRanges(em, reference, v.Wertermittlungsverfahren, v.Obiskennzahl, v.Einheit); } /// @@ -461,8 +466,8 @@ public static bool IsEvenlySpaced(this BO4E.BO.Energiemenge em, bool allowGaps = } else { - Verbrauch v = em.energieverbrauch.FirstOrDefault(); - return em.IsEvenlySpaced(em.GetTimeRange(), v.wertermittlungsverfahren, v.obiskennzahl, v.einheit, allowGaps); + Verbrauch v = em.Energieverbrauch.FirstOrDefault(); + return em.IsEvenlySpaced(em.GetTimeRange(), v.Wertermittlungsverfahren, v.Obiskennzahl, v.Einheit, allowGaps); } } @@ -471,12 +476,12 @@ public static bool IsEvenlySpaced(this BO4E.BO.Energiemenge em, bool allowGaps = private static HashSet GetTimeSpans(this BO4E.BO.Energiemenge em) { HashSet result = new HashSet(); - List vlist = new List(em.energieverbrauch); + List vlist = new List(em.Energieverbrauch); vlist.Sort(new VerbrauchDateTimeComparer()); for (int i = 1; i < vlist.Count; i++) { - result.Add(vlist[i].startdatum - vlist[i - 1].startdatum); - result.Add(vlist[i].enddatum - vlist[i - 1].enddatum); + result.Add(vlist[i].Startdatum - vlist[i - 1].Startdatum); + result.Add(vlist[i].Enddatum - vlist[i - 1].Enddatum); } return result; } @@ -484,13 +489,13 @@ private static HashSet GetTimeSpans(this BO4E.BO.Energiemenge em) private static HashSet GetTimeSpans(this BO4E.BO.Energiemenge em, Wertermittlungsverfahren wev, string obis, Mengeneinheit me) { HashSet result = new HashSet(); - List vlist = new List(em.energieverbrauch); + List vlist = new List(em.Energieverbrauch); vlist.Sort(new VerbrauchDateTimeComparer()); - vlist = vlist.Where(v => v.wertermittlungsverfahren == wev && v.obiskennzahl == obis && v.einheit == me).ToList(); + vlist = vlist.Where(v => v.Wertermittlungsverfahren == wev && v.Obiskennzahl == obis && v.Einheit == me).ToList(); for (int i = 1; i < vlist.Count; i++) { - result.Add(vlist[i].startdatum - vlist[i - 1].startdatum); - result.Add(vlist[i].enddatum - vlist[i - 1].enddatum); + result.Add(vlist[i].Startdatum - vlist[i - 1].Startdatum); + result.Add(vlist[i].Enddatum - vlist[i - 1].Enddatum); } return result; } @@ -503,9 +508,9 @@ private static HashSet GetTimeSpans(this BO4E.BO.Energiemenge em, Wert public static ISet> GetWevObisMeCombinations(this BO4E.BO.Energiemenge em) { return new HashSet>( - em.energieverbrauch + em.Energieverbrauch //.AsParallel() - .Select(v => Tuple.Create(v.wertermittlungsverfahren, v.obiskennzahl, v.einheit))); + .Select(v => Tuple.Create(v.Wertermittlungsverfahren, v.Obiskennzahl, v.Einheit))); } /// @@ -518,10 +523,10 @@ public static ISet> GetWe public static decimal GetJointCoverage(this BO4E.BO.Energiemenge em, TimeRange reference) { ISet> combinations = GetWevObisMeCombinations(em); - decimal jointCoverage = em.energieverbrauch + decimal jointCoverage = em.Energieverbrauch //.AsParallel() - .Where(v => combinations.Contains(Tuple.Create(v.wertermittlungsverfahren, v.obiskennzahl, v.einheit))) - .Sum(v => GetOverlapFactor(new TimeRange(v.startdatum, v.enddatum), reference, true)); + .Where(v => combinations.Contains(Tuple.Create(v.Wertermittlungsverfahren, v.Obiskennzahl, v.Einheit))) + .Sum(v => GetOverlapFactor(new TimeRange(v.Startdatum, v.Enddatum), reference, true)); return jointCoverage - (combinations.Count - 1); } @@ -539,12 +544,12 @@ public static decimal GetCoverage(this BO4E.BO.Energiemenge em, ITimeRange refer { throw new ArgumentException("The Energiemenge is not pure. Cannot determine parameters."); } - if (em.energieverbrauch.Count == 0) + if (em.Energieverbrauch.Count == 0) { return 0.0M; } - Verbrauch v = em.energieverbrauch.First(); - return em.GetCoverage(reference, v.wertermittlungsverfahren, v.obiskennzahl, v.einheit); + Verbrauch v = em.Energieverbrauch.First(); + return em.GetCoverage(reference, v.Wertermittlungsverfahren, v.Obiskennzahl, v.Einheit); } } @@ -573,12 +578,12 @@ public static decimal GetCoverage(this BO4E.BO.Energiemenge em, ITimeRange refer Wertermittlungsverfahren wev, string obisKz, Mengeneinheit mengeneinheit, int decimalRounding = 10) { decimal exactResult; - using (MiniProfiler.Current.Step($"calculating coverage for list with {em.energieverbrauch.Count} entries.")) + using (MiniProfiler.Current.Step($"calculating coverage for list with {em.Energieverbrauch.Count} entries.")) { - exactResult = em.energieverbrauch + exactResult = em.Energieverbrauch //.AsParallel() - .Where(v => v.einheit == mengeneinheit && v.obiskennzahl == obisKz && v.wertermittlungsverfahren == wev) - .Sum(v => GetOverlapFactor(new TimeRange(v.startdatum, v.enddatum), reference, true)); + .Where(v => v.Einheit == mengeneinheit && v.Obiskennzahl == obisKz && v.Wertermittlungsverfahren == wev) + .Sum(v => GetOverlapFactor(new TimeRange(v.Startdatum, v.Enddatum), reference, true)); } return Math.Round(exactResult, decimalRounding); } @@ -605,7 +610,7 @@ public static bool IsContinuous(this BO4E.BO.Energiemenge em) /// true iff Energiemenge has defined value for every point in time range, false otherwise public static bool IsContinuous(this BO4E.BO.Energiemenge em, TimeRange reference) { - return Math.Abs(em.energieverbrauch.Sum(v => GetOverlapFactor(new TimeRange(v.startdatum, v.enddatum), reference, true)) - 1.0M) < QUASI_ZERO; + return Math.Abs(em.Energieverbrauch.Sum(v => GetOverlapFactor(new TimeRange(v.Startdatum, v.Enddatum), reference, true)) - 1.0M) < QUASI_ZERO; } private static decimal GetOverlapFactor(TimeRange period, ITimeRange reference, bool toReference) @@ -668,7 +673,7 @@ public static bool IsPureWertermittlungsverfahren(this BO4E.BO.Energiemenge em) using (MiniProfiler.Current.Step(nameof(IsPureWertermittlungsverfahren))) { ISet wefs = new HashSet(); - em.energieverbrauch.All(v => wefs.Add(v.wertermittlungsverfahren)); + em.Energieverbrauch.All(v => wefs.Add(v.Wertermittlungsverfahren)); return wefs.Count <= 1; } } @@ -683,13 +688,13 @@ public static bool IsPureObisKennzahl(this BO4E.BO.Energiemenge em) using (MiniProfiler.Current.Step(nameof(IsPureObisKennzahl))) { ISet obisKzs = new HashSet(); - em.energieverbrauch.All(v => obisKzs.Add(v.obiskennzahl)); + em.Energieverbrauch.All(v => obisKzs.Add(v.Obiskennzahl)); return obisKzs.Count <= 1; } } /// - /// test if all entries in do have same user properties. + /// test if all entries in do have same user properties. /// Only tests for those user properties present. Missing user properties do not lead to false. /// /// Energiemenge @@ -698,14 +703,14 @@ public static bool IsPureUserProperties(this BO4E.BO.Energiemenge em) { using (MiniProfiler.Current.Step(nameof(IsPureUserProperties))) { - ISet upKeys = new HashSet(em.energieverbrauch.Where(v => v.userProperties != null).SelectMany(v => v.userProperties.Keys)); + ISet upKeys = new HashSet(em.Energieverbrauch.Where(v => v.UserProperties != null).SelectMany(v => v.UserProperties.Keys)); var values = new Dictionary(); // ToDo: make it nice. - foreach (var v in em.energieverbrauch.Where(v => v.userProperties != null)) + foreach (var v in em.Energieverbrauch.Where(v => v.UserProperties != null)) { foreach (var key in upKeys) { - if (v.userProperties.TryGetValue(key, out JToken rawValue)) + if (v.UserProperties.TryGetValue(key, out JToken rawValue)) { if (values.TryGetValue(key, out JToken onlyValue)) { @@ -735,7 +740,7 @@ public static bool IsPureMengeneinheit(this BO4E.BO.Energiemenge em) using (MiniProfiler.Current.Step(nameof(IsPureMengeneinheit))) { ISet einheiten = new HashSet(); - em.energieverbrauch.All(v => einheiten.Add(v.einheit)); + em.Energieverbrauch.All(v => einheiten.Add(v.Einheit)); if (einheiten.Count <= 1) { @@ -773,22 +778,22 @@ public static bool IsIntensive(this BO4E.BO.Energiemenge em) /// true iff all ->energieverbrauch entries are extensive public static bool IsExtensive(this BO4E.BO.Energiemenge em) { - return em.IsPureMengeneinheit() && em.energieverbrauch.First().einheit.IsExtensive(); + return em.IsPureMengeneinheit() && em.Energieverbrauch.First().Einheit.IsExtensive(); } public static List SplitInPureGroups(this BO.Energiemenge em) { - if (em.energieverbrauch == null) + if (em.Energieverbrauch == null) { return new List() { em }; } else { var result = new List(); - foreach (var group in em.energieverbrauch.GroupBy(PurityGrouper)) + foreach (var group in em.Energieverbrauch.GroupBy(PurityGrouper)) { BO.Energiemenge pureEm = em.DeepClone(); - pureEm.energieverbrauch = group.ToList(); + pureEm.Energieverbrauch = group.ToList(); result.Add(pureEm); } return result; @@ -796,7 +801,7 @@ public static bool IsExtensive(this BO4E.BO.Energiemenge em) } /// - /// Our SAP CDS has a bug: When there's a change from non-DST to DST the is set + /// Our SAP CDS has a bug: When there's a change from non-DST to DST the is set /// to the first second of the DST period. To /// /// @@ -804,11 +809,11 @@ public static void FixSapCDSBug(this BO4E.BO.Energiemenge em) { using (MiniProfiler.Current.Step("Fix SAP CDS Bug (Energiemenge)")) { - if (em.energieverbrauch != null && !em.HasBeenSanitized()) + if (em.Energieverbrauch != null && !em.HasBeenSanitized()) { using (MiniProfiler.Current.Step($"for each Verbrauch entry: {nameof(FixSapCDSBug)}")) { - foreach (var v in em.energieverbrauch) + foreach (var v in em.Energieverbrauch) { v.FixSapCdsBug(); } @@ -816,21 +821,21 @@ public static void FixSapCDSBug(this BO4E.BO.Energiemenge em) } using (MiniProfiler.Current.Step("for list as a whole")) { - foreach (var relevantEnddatum in em.energieverbrauch.Where(v => + foreach (var relevantEnddatum in em.Energieverbrauch.Where(v => { - var localEnd = DateTime.SpecifyKind(v.enddatum, DateTimeKind.Unspecified); - var localStart = DateTime.SpecifyKind(v.startdatum, DateTimeKind.Unspecified); + var localEnd = DateTime.SpecifyKind(v.Enddatum, DateTimeKind.Unspecified); + var localStart = DateTime.SpecifyKind(v.Startdatum, DateTimeKind.Unspecified); return !Verbrauch.CENTRAL_EUROPE_STANDARD_TIME.IsDaylightSavingTime(localStart) && Verbrauch.CENTRAL_EUROPE_STANDARD_TIME.IsDaylightSavingTime(localEnd); //return !localStart.IsDaylightSavingTime() && localEnd.IsDaylightSavingTime(); - }).Select(v => v.enddatum)) + }).Select(v => v.Enddatum)) { - var intervalSize = em.energieverbrauch.Where(v => v.enddatum == relevantEnddatum).Select(v => (v.enddatum - v.startdatum).TotalSeconds).Min(); - foreach (var v in em.energieverbrauch.Where(v => v.enddatum == relevantEnddatum)) + var intervalSize = em.Energieverbrauch.Where(v => v.Enddatum == relevantEnddatum).Select(v => (v.Enddatum - v.Startdatum).TotalSeconds).Min(); + foreach (var v in em.Energieverbrauch.Where(v => v.Enddatum == relevantEnddatum)) { - v.enddatum = v.startdatum.AddSeconds(intervalSize); + v.Enddatum = v.Startdatum.AddSeconds(intervalSize); } } - if (em.energieverbrauch.Where(v => (v.enddatum - v.startdatum).TotalMinutes == -45).Count() > 1) + if (em.Energieverbrauch.Where(v => (v.Enddatum - v.Startdatum).TotalMinutes == -45).Count() > 1) { /*foreach (var dstAffected in em.energieverbrauch.Where(v => (v.enddatum - v.startdatum).TotalMinutes != -45)) { @@ -850,11 +855,11 @@ public static void FixSapCDSBug(this BO4E.BO.Energiemenge em) }*/ } } - if (em.userProperties == null) + if (em.UserProperties == null) { - em.userProperties = new Dictionary(); + em.UserProperties = new Dictionary(); } - em.userProperties[SAP_SANITIZED_USERPROPERTY_KEY] = true; + em.UserProperties[SAP_SANITIZED_USERPROPERTY_KEY] = true; } } } @@ -868,7 +873,7 @@ public static void FixSapCDSBug(this BO4E.BO.Energiemenge em) private static bool HasBeenSanitized(this BO4E.BO.Energiemenge em) { bool sanitized; - if (em.userProperties == null || !em.userProperties.TryGetValue(SAP_SANITIZED_USERPROPERTY_KEY, out JToken sapSanitizedToken)) + if (em.UserProperties == null || !em.UserProperties.TryGetValue(SAP_SANITIZED_USERPROPERTY_KEY, out JToken sapSanitizedToken)) { sanitized = false; } @@ -881,9 +886,9 @@ private static bool HasBeenSanitized(this BO4E.BO.Energiemenge em) public static void Detangle(this BO4E.BO.Energiemenge em) { - if (em.energieverbrauch != null) + if (em.Energieverbrauch != null) { - em.energieverbrauch = VerbrauchExtension.Detangle(em.energieverbrauch); + em.Energieverbrauch = VerbrauchExtension.Detangle(em.Energieverbrauch); } } @@ -893,20 +898,20 @@ protected class BasicVerbrauchDateTimeComparer : IComparer cv = new VerbrauchDateTimeComparer(); return cv.Compare(vx, vy); } } - private static readonly Func> PurityGrouper = v => new Tuple(v.wertermittlungsverfahren, v.einheit, v.obiskennzahl); + private static readonly Func> PurityGrouper = v => new Tuple(v.Wertermittlungsverfahren, v.Einheit, v.Obiskennzahl); } } diff --git a/BO4E-dotnet.Extensions/BusinessObjects/Energiemenge/EnergiemengeExtensionCompleteness.cs b/BO4E-dotnet.Extensions/BusinessObjects/Energiemenge/EnergiemengeExtensionCompleteness.cs index 570e5a0f..ce77576f 100644 --- a/BO4E-dotnet.Extensions/BusinessObjects/Energiemenge/EnergiemengeExtensionCompleteness.cs +++ b/BO4E-dotnet.Extensions/BusinessObjects/Energiemenge/EnergiemengeExtensionCompleteness.cs @@ -22,7 +22,7 @@ public static partial class EnergiemengeExtension /// public static CompletenessReport GetCompletenessReport(this BO4E.BO.Energiemenge em, CompletenessReport.CompletenessReportConfiguration config) { - return em.GetCompletenessReport(new TimeRange(config.referenceTimeFrame.startdatum.Value, config.referenceTimeFrame.enddatum.Value), config.wertermittlungsverfahren, config.obis, config.einheit); + return em.GetCompletenessReport(new TimeRange(config.ReferenceTimeFrame.Startdatum.Value, config.ReferenceTimeFrame.Enddatum.Value), config.Wertermittlungsverfahren, config.Obis, config.Einheit); } /// @@ -50,14 +50,14 @@ public static CompletenessReport GetCompletenessReport(this BO4E.BO.Energiemenge } return new CompletenessReport() { - lokationsId = em.lokationsId, - referenceTimeFrame = new Zeitraum() + LokationsId = em.LokationsId, + ReferenceTimeFrame = new Zeitraum() { - startdatum = reference.Start, - enddatum = reference.End + Startdatum = reference.Start, + Enddatum = reference.End }, - coverage = coverage, - _errorMessage = errorMessage + Coverage = coverage, + ErrorMessage = errorMessage }; } var combi = combis.First(); @@ -80,19 +80,19 @@ public static CompletenessReport GetCompletenessReport(this BO4E.BO.Energiemenge { result = new CompletenessReport { - lokationsId = em.lokationsId, - einheit = einheit, - coverage = GetCoverage(em, reference, wev, obiskennzahl, einheit), + LokationsId = em.LokationsId, + Einheit = einheit, + Coverage = GetCoverage(em, reference, wev, obiskennzahl, einheit), wertermittlungsverfahren = wev, - obiskennzahl = obiskennzahl, - referenceTimeFrame = new Zeitraum + Obiskennzahl = obiskennzahl, + ReferenceTimeFrame = new Zeitraum { - startdatum = DateTime.SpecifyKind(reference.Start, DateTimeKind.Utc), - enddatum = DateTime.SpecifyKind(reference.End, DateTimeKind.Utc) + Startdatum = DateTime.SpecifyKind(reference.Start, DateTimeKind.Utc), + Enddatum = DateTime.SpecifyKind(reference.End, DateTimeKind.Utc) }, }; } - if (em.energieverbrauch != null && em.energieverbrauch.Count > 0) + if (em.Energieverbrauch != null && em.Energieverbrauch.Count > 0) { /*using (MiniProfiler.Current.Step("populating time slices of/with missing/null values")) { @@ -120,22 +120,22 @@ public static CompletenessReport GetCompletenessReport(this BO4E.BO.Energiemenge }*/ using (MiniProfiler.Current.Step("Setting aggregated gaps")) { - var nonNullValues = new TimePeriodCollection(em.energieverbrauch.Select(v => new TimeRange(v.startdatum, v.enddatum))); + var nonNullValues = new TimePeriodCollection(em.Energieverbrauch.Select(v => new TimeRange(v.Startdatum, v.Enddatum))); ITimeRange limits; - if (result.referenceTimeFrame != null && result.referenceTimeFrame.startdatum.HasValue && result.referenceTimeFrame.enddatum.HasValue) + if (result.ReferenceTimeFrame != null && result.ReferenceTimeFrame.Startdatum.HasValue && result.ReferenceTimeFrame.Enddatum.HasValue) { - limits = new TimeRange(result.referenceTimeFrame.startdatum.Value, result.referenceTimeFrame.enddatum.Value); + limits = new TimeRange(result.ReferenceTimeFrame.Startdatum.Value, result.ReferenceTimeFrame.Enddatum.Value); } else { limits = null; } var gaps = (new TimeGapCalculator()).GetGaps(nonNullValues, limits: limits); - result.gaps = gaps.Select(gap => new CompletenessReport.BasicVerbrauch() + result.Gaps = gaps.Select(gap => new CompletenessReport.BasicVerbrauch() { - startdatum = gap.Start, - enddatum = gap.End, - wert = null + Startdatum = gap.Start, + Enddatum = gap.End, + Wert = null }).ToList(); } @@ -147,15 +147,15 @@ public static CompletenessReport GetCompletenessReport(this BO4E.BO.Energiemenge { try { - foreach (var kvp in em.energieverbrauch.Where(v => v.userProperties != null).SelectMany(v => v.userProperties)) + foreach (var kvp in em.Energieverbrauch.Where(v => v.UserProperties != null).SelectMany(v => v.UserProperties)) { - if (result.userProperties == null) + if (result.UserProperties == null) { - result.userProperties = new Dictionary(); + result.UserProperties = new Dictionary(); } - if (!result.userProperties.ContainsKey(kvp.Key)) + if (!result.UserProperties.ContainsKey(kvp.Key)) { - result.userProperties.Add(kvp.Key, kvp.Value); + result.UserProperties.Add(kvp.Key, kvp.Value); } } } @@ -188,18 +188,18 @@ public static CompletenessReport GetCompletenessReport(this BO4E.BO.Energiemenge Verbrauch v; try { - v = em.energieverbrauch.First(); + v = em.Energieverbrauch.First(); } catch (InvalidOperationException) { return new CompletenessReport() { - coverage = null, - lokationsId = em.lokationsId, - _errorMessage = "energieverbrauch is empty" + Coverage = null, + LokationsId = em.LokationsId, + ErrorMessage = "energieverbrauch is empty" }; } - return em.GetCompletenessReport(em.GetTimeRange(), v.wertermittlungsverfahren, v.obiskennzahl, v.einheit); + return em.GetCompletenessReport(em.GetTimeRange(), v.Wertermittlungsverfahren, v.Obiskennzahl, v.Einheit); } /// diff --git a/BO4E-dotnet.Extensions/BusinessObjects/Energiemenge/EnergiemengeExtensionPlausibility.cs b/BO4E-dotnet.Extensions/BusinessObjects/Energiemenge/EnergiemengeExtensionPlausibility.cs index bed2ad3a..c2afc4d0 100644 --- a/BO4E-dotnet.Extensions/BusinessObjects/Energiemenge/EnergiemengeExtensionPlausibility.cs +++ b/BO4E-dotnet.Extensions/BusinessObjects/Energiemenge/EnergiemengeExtensionPlausibility.cs @@ -21,7 +21,7 @@ public static partial class EnergiemengeExtension /// reference Energiemenge (reference = used for normalisation) /// other Energiemenge /// time frame to be analysed. If null, the overlap of and is used. - /// By default (false) an ArgumentException is thrown if the do not match. Setting this flag suppresses the error. + /// By default (false) an ArgumentException is thrown if the do not match. Setting this flag suppresses the error. /// a public static PlausibilityReport GetPlausibilityReport(this BO4E.BO.Energiemenge emReference, BO4E.BO.Energiemenge emOther, ITimeRange timeframe = null, bool ignoreLocation = false) { @@ -34,9 +34,9 @@ public static PlausibilityReport GetPlausibilityReport(this BO4E.BO.Energiemenge ITimeRange overlap = trReference.GetIntersection(trOther); if (!ignoreLocation) { - if (!(emReference.lokationsId == emOther.lokationsId && emReference.lokationstyp == emOther.lokationstyp)) + if (!(emReference.LokationsId == emOther.LokationsId && emReference.LokationsTyp == emOther.LokationsTyp)) { - throw new ArgumentException($"locations do not match! '{emReference.lokationsId}' ({emReference.lokationstyp}) != '{emOther.lokationsId}' ({emOther.lokationstyp})"); + throw new ArgumentException($"locations do not match! '{emReference.LokationsId}' ({emReference.LokationsTyp}) != '{emOther.LokationsId}' ({emOther.LokationsTyp})"); } } timeframe = overlap; @@ -78,34 +78,34 @@ public static PlausibilityReport GetPlausibilityReport(this BO4E.BO.Energiemenge relativeDeviation = null; } - Verbrauch vReference = emReference.energieverbrauch.FirstOrDefault(); // copies obiskennzahl, wertermittlungsverfahren... - vReference.wert = consumptionReference.Item1; - vReference.einheit = consumptionReference.Item2; - vReference.startdatum = timeframe.Start; - vReference.enddatum = timeframe.End; + Verbrauch vReference = emReference.Energieverbrauch.FirstOrDefault(); // copies obiskennzahl, wertermittlungsverfahren... + vReference.Wert = consumptionReference.Item1; + vReference.Einheit = consumptionReference.Item2; + vReference.Startdatum = timeframe.Start; + vReference.Enddatum = timeframe.End; - Verbrauch vOther = emOther.energieverbrauch.FirstOrDefault(); // copies obiskennzahl, wertermittlungsverfahren... - vOther.wert = consumptionOther.Item1; - vOther.einheit = consumptionOther.Item2; - vOther.startdatum = timeframe.Start; - vOther.enddatum = timeframe.End; + Verbrauch vOther = emOther.Energieverbrauch.FirstOrDefault(); // copies obiskennzahl, wertermittlungsverfahren... + vOther.Wert = consumptionOther.Item1; + vOther.Einheit = consumptionOther.Item2; + vOther.Startdatum = timeframe.Start; + vOther.Enddatum = timeframe.End; var pr = new PlausibilityReport() { - lokationsId = emReference.lokationsId, - referenceTimeFrame = new BO4E.COM.Zeitraum() { startdatum = timeframe.Start, enddatum = timeframe.End }, - verbrauchReference = vReference, - verbrauchOther = vOther, - absoluteDeviation = Math.Abs(absoluteDeviation), - absoluteDeviationEinheit = consumptionReference.Item2 + LokationsId = emReference.LokationsId, + ReferenceTimeFrame = new BO4E.COM.Zeitraum() { Startdatum = timeframe.Start, Enddatum = timeframe.End }, + VerbrauchReference = vReference, + VerbrauchOther = vOther, + AbsoluteDeviation = Math.Abs(absoluteDeviation), + AbsoluteDeviationEinheit = consumptionReference.Item2 }; if (relativeDeviation.HasValue) { - pr.relativeDeviation = Math.Round(relativeDeviation.Value, 4); + pr.RelativeDeviation = Math.Round(relativeDeviation.Value, 4); } else { - pr.relativeDeviation = null; + pr.RelativeDeviation = null; } return pr; } @@ -118,7 +118,7 @@ public static PlausibilityReport GetPlausibilityReport(this BO4E.BO.Energiemenge /// public static PlausibilityReport GetPlausibilityReport(this BO4E.BO.Energiemenge energiemenge, PlausibilityReport.PlausibilityReportConfiguration config) { - return energiemenge.GetPlausibilityReport(config.other, new TimeRange(config.timeframe.startdatum.Value, config.timeframe.enddatum.Value), config.ignoreLocation); + return energiemenge.GetPlausibilityReport(config.Other, new TimeRange(config.Timeframe.Startdatum.Value, config.Timeframe.Enddatum.Value), config.IgnoreLocation); } /// @@ -137,10 +137,10 @@ public static IDictionary GetSlicedPlausibilityR foreach (var range in ranges) { var localConfig = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(config)); - localConfig.timeframe = new Zeitraum() + localConfig.Timeframe = new Zeitraum() { - startdatum = range.Start, - enddatum = range.End + Startdatum = range.Start, + Enddatum = range.End }; var subResult = GetPlausibilityReport(em, localConfig); result.Add(range, subResult); @@ -153,7 +153,7 @@ public static IDictionary GetSlicedPlausibilityR /// The magic is, that it takes DST into account! /// /// Energiemenge - /// configuration that contains the overall time range in + /// configuration that contains the overall time range in /// public static IDictionary GetDailyPlausibilityReports(this BO.Energiemenge em, PlausibilityReportConfiguration config) { @@ -161,14 +161,14 @@ public static IDictionary GetDailyPlausibilityRe { throw new ArgumentNullException(nameof(config)); } - if (config.timeframe == null) + if (config.Timeframe == null) { - throw new ArgumentNullException(nameof(config.timeframe)); + throw new ArgumentNullException(nameof(config.Timeframe)); } var slices = GetLocalDailySlices(new TimeRange() { - Start = config.timeframe.startdatum.Value, - End = config.timeframe.enddatum.Value + Start = config.Timeframe.Startdatum.Value, + End = config.Timeframe.Enddatum.Value }); return em.GetSlicedPlausibilityReports(config, slices); } @@ -177,7 +177,7 @@ public static IDictionary GetDailyPlausibilityRe /// Get Monthly Completeness Reports for overall time range defined in . /// /// Energiemenge - /// configuration that contains the overall time range in + /// configuration that contains the overall time range in /// public static IDictionary GetMonthlyPlausibilityReports(this BO4E.BO.Energiemenge em, PlausibilityReportConfiguration config) { @@ -185,14 +185,14 @@ public static IDictionary GetMonthlyPlausibility { throw new ArgumentNullException(nameof(config)); } - if (config.timeframe == null) + if (config.Timeframe == null) { - throw new ArgumentNullException(nameof(config.timeframe)); + throw new ArgumentNullException(nameof(config.Timeframe)); } var slices = GetLocalMonthlySlices(new TimeRange() { - Start = config.timeframe.startdatum.Value, - End = config.timeframe.enddatum.Value + Start = config.Timeframe.Startdatum.Value, + End = config.Timeframe.Enddatum.Value }); return em.GetSlicedPlausibilityReports(config, slices); } diff --git a/BO4E-dotnet.Extensions/COM/PhysikalischerWertExtension.cs b/BO4E-dotnet.Extensions/COM/PhysikalischerWertExtension.cs index b6bd0514..0cf364cf 100644 --- a/BO4E-dotnet.Extensions/COM/PhysikalischerWertExtension.cs +++ b/BO4E-dotnet.Extensions/COM/PhysikalischerWertExtension.cs @@ -10,15 +10,15 @@ namespace BO4E.Extensions.COM public static class PhysikalischerWertExtension { /// - /// Converts a PhysikalischerWert to another unit, e.g. from kWh to MWh. This changes the and the accordingly + /// Converts a PhysikalischerWert to another unit, e.g. from kWh to MWh. This changes the and the accordingly /// /// physikalischer Wert /// new unit of measurement /// a new instance of PhysikalischerWert having the unit public static PhysikalischerWert ConvertToUnit(this PhysikalischerWert pw, Mengeneinheit newEinheit) { - decimal factor = pw.einheit.GetConversionFactor(newEinheit); // throws all the exceptions. - return new PhysikalischerWert(factor * pw.wert, newEinheit); + decimal factor = pw.Einheit.GetConversionFactor(newEinheit); // throws all the exceptions. + return new PhysikalischerWert(factor * pw.Wert, newEinheit); } } } diff --git a/BO4E-dotnet.Extensions/COM/VerbrauchExtension.cs b/BO4E-dotnet.Extensions/COM/VerbrauchExtension.cs index 483017b4..5a4d030f 100644 --- a/BO4E-dotnet.Extensions/COM/VerbrauchExtension.cs +++ b/BO4E-dotnet.Extensions/COM/VerbrauchExtension.cs @@ -31,66 +31,66 @@ public static HashSet MergeRedundant(this Verbrauch v1, Verbrauch v2, public static HashSet Merge(this Verbrauch v1, Verbrauch v2, bool redundant, Boolean biased) { HashSet result = new HashSet(); - if (v1.obiskennzahl == v2.obiskennzahl && v1.wertermittlungsverfahren == v2.wertermittlungsverfahren && v1.einheit == v2.einheit) + if (v1.Obiskennzahl == v2.Obiskennzahl && v1.Wertermittlungsverfahren == v2.Wertermittlungsverfahren && v1.Einheit == v2.Einheit) { if (v1.OverlapsWith(v2)) { // don't wanna deal with time running backwards. //Debug.Assert(v1.enddatum >= v1.startdatum); //Debug.Assert(v2.enddatum >= v2.startdatum); - TimeRange tr1 = new TimeRange(v1.startdatum, v1.enddatum); - TimeRange tr2 = new TimeRange(v2.startdatum, v2.enddatum); + TimeRange tr1 = new TimeRange(v1.Startdatum, v1.Enddatum); + TimeRange tr2 = new TimeRange(v2.Startdatum, v2.Enddatum); ITimeRange overlap = v1.GetIntersection(v2); - if (v1.einheit.IsExtensive()) + if (v1.Einheit.IsExtensive()) { Verbrauch vmerge = new Verbrauch() { - obiskennzahl = v1.obiskennzahl, - einheit = v1.einheit, - wertermittlungsverfahren = v1.wertermittlungsverfahren + Obiskennzahl = v1.Obiskennzahl, + Einheit = v1.Einheit, + Wertermittlungsverfahren = v1.Wertermittlungsverfahren }; if (redundant) { - decimal exclusiveV1Wert = (decimal)(tr1.Duration.TotalSeconds - overlap.Duration.TotalSeconds) * v1.wert / ((decimal)tr1.Duration.TotalSeconds); - decimal exclusiveV2Wert = (decimal)(tr2.Duration.TotalSeconds - overlap.Duration.TotalSeconds) * v2.wert / ((decimal)tr2.Duration.TotalSeconds); - decimal overlapV1Wert = ((decimal)overlap.Duration.TotalSeconds * v1.wert) / (decimal)(tr1.Duration.TotalSeconds); - decimal overlapV2Wert = ((decimal)overlap.Duration.TotalSeconds * v2.wert) / (decimal)(tr2.Duration.TotalSeconds); + decimal exclusiveV1Wert = (decimal)(tr1.Duration.TotalSeconds - overlap.Duration.TotalSeconds) * v1.Wert / ((decimal)tr1.Duration.TotalSeconds); + decimal exclusiveV2Wert = (decimal)(tr2.Duration.TotalSeconds - overlap.Duration.TotalSeconds) * v2.Wert / ((decimal)tr2.Duration.TotalSeconds); + decimal overlapV1Wert = ((decimal)overlap.Duration.TotalSeconds * v1.Wert) / (decimal)(tr1.Duration.TotalSeconds); + decimal overlapV2Wert = ((decimal)overlap.Duration.TotalSeconds * v2.Wert) / (decimal)(tr2.Duration.TotalSeconds); if (biased == true) { // biased ==> assume that v2 is contained in v1 - vmerge.startdatum = v1.startdatum; - vmerge.enddatum = v1.enddatum; + vmerge.Startdatum = v1.Startdatum; + vmerge.Enddatum = v1.Enddatum; if (exclusiveV1Wert == 0.0M && exclusiveV2Wert == 0.0M && overlapV1Wert == overlapV2Wert) { - vmerge.wert = overlapV1Wert; + vmerge.Wert = overlapV1Wert; } else { - vmerge.wert = v1.wert - overlapV2Wert; // overlapV1Wert; + vmerge.Wert = v1.Wert - overlapV2Wert; // overlapV1Wert; } } else if (biased == false) { - vmerge.startdatum = v1.startdatum; - vmerge.enddatum = v2.startdatum; - vmerge.wert = v1.wert - overlapV2Wert; + vmerge.Startdatum = v1.Startdatum; + vmerge.Enddatum = v2.Startdatum; + vmerge.Wert = v1.Wert - overlapV2Wert; } else // biased null { - vmerge.startdatum = v1.startdatum < v2.startdatum ? v1.startdatum : v2.startdatum; - vmerge.enddatum = v1.enddatum > v2.enddatum ? v1.enddatum : v2.enddatum; + vmerge.Startdatum = v1.Startdatum < v2.Startdatum ? v1.Startdatum : v2.Startdatum; + vmerge.Enddatum = v1.Enddatum > v2.Enddatum ? v1.Enddatum : v2.Enddatum; if (overlapV1Wert != overlapV2Wert) { throw new ArgumentException("The inequality is unsolvable."); } - vmerge.wert = exclusiveV1Wert + overlapV1Wert + exclusiveV2Wert; + vmerge.Wert = exclusiveV1Wert + overlapV1Wert + exclusiveV2Wert; } } else { - vmerge.startdatum = v1.startdatum < v2.startdatum ? v1.startdatum : v2.startdatum; - vmerge.enddatum = v1.enddatum > v2.enddatum ? v1.enddatum : v2.enddatum; - vmerge.wert = v1.wert + v2.wert; + vmerge.Startdatum = v1.Startdatum < v2.Startdatum ? v1.Startdatum : v2.Startdatum; + vmerge.Enddatum = v1.Enddatum > v2.Enddatum ? v1.Enddatum : v2.Enddatum; + vmerge.Wert = v1.Wert + v2.Wert; } result.Add(vmerge); } @@ -98,67 +98,67 @@ public static HashSet Merge(this Verbrauch v1, Verbrauch v2, bool red { Verbrauch vmerge1 = new Verbrauch() { - obiskennzahl = v1.obiskennzahl, - einheit = v1.einheit, - wertermittlungsverfahren = v1.wertermittlungsverfahren, - startdatum = v1.startdatum < v2.startdatum ? v1.startdatum : v2.startdatum, - enddatum = overlap.Start, - wert = v1.startdatum < v2.startdatum ? v1.wert : v2.wert + Obiskennzahl = v1.Obiskennzahl, + Einheit = v1.Einheit, + Wertermittlungsverfahren = v1.Wertermittlungsverfahren, + Startdatum = v1.Startdatum < v2.Startdatum ? v1.Startdatum : v2.Startdatum, + Enddatum = overlap.Start, + Wert = v1.Startdatum < v2.Startdatum ? v1.Wert : v2.Wert }; Verbrauch vmerge2 = new Verbrauch() { - obiskennzahl = v1.obiskennzahl, - einheit = v1.einheit, - wertermittlungsverfahren = v1.wertermittlungsverfahren, - startdatum = overlap.Start, - enddatum = overlap.End + Obiskennzahl = v1.Obiskennzahl, + Einheit = v1.Einheit, + Wertermittlungsverfahren = v1.Wertermittlungsverfahren, + Startdatum = overlap.Start, + Enddatum = overlap.End }; if (redundant) { - if (v1.wert != v2.wert) + if (v1.Wert != v2.Wert) { - throw new ArgumentException($"Data cannot be redundant if values ({v1.wert}{v1.einheit} vs. {v2.wert}{v2.einheit}) don't match for interval [{vmerge2.startdatum}, {vmerge2.enddatum})."); + throw new ArgumentException($"Data cannot be redundant if values ({v1.Wert}{v1.Einheit} vs. {v2.Wert}{v2.Einheit}) don't match for interval [{vmerge2.Startdatum}, {vmerge2.Enddatum})."); } - vmerge2.wert = v1.wert; + vmerge2.Wert = v1.Wert; } else { - vmerge2.wert = v1.wert + v2.wert; + vmerge2.Wert = v1.Wert + v2.Wert; } Verbrauch vmerge3 = new Verbrauch() { - obiskennzahl = v1.obiskennzahl, - einheit = v1.einheit, - wertermittlungsverfahren = v1.wertermittlungsverfahren, - startdatum = overlap.End, - enddatum = v1.enddatum > v2.enddatum ? v1.enddatum : v2.enddatum, - wert = v1.enddatum > v2.enddatum ? v1.wert : v2.wert + Obiskennzahl = v1.Obiskennzahl, + Einheit = v1.Einheit, + Wertermittlungsverfahren = v1.Wertermittlungsverfahren, + Startdatum = overlap.End, + Enddatum = v1.Enddatum > v2.Enddatum ? v1.Enddatum : v2.Enddatum, + Wert = v1.Enddatum > v2.Enddatum ? v1.Wert : v2.Wert }; result.Add(vmerge1); result.Add(vmerge2); result.Add(vmerge3); } } - else if (v1.startdatum == v2.enddatum || v2.startdatum == v1.enddatum) + else if (v1.Startdatum == v2.Enddatum || v2.Startdatum == v1.Enddatum) { - DateTime start = v1.startdatum < v2.startdatum ? v1.startdatum : v2.startdatum; - DateTime stop = v1.enddatum > v2.enddatum ? v1.enddatum : v2.enddatum; + DateTime start = v1.Startdatum < v2.Startdatum ? v1.Startdatum : v2.Startdatum; + DateTime stop = v1.Enddatum > v2.Enddatum ? v1.Enddatum : v2.Enddatum; Verbrauch vmerge = new Verbrauch() { - obiskennzahl = v1.obiskennzahl, - einheit = v1.einheit, - wertermittlungsverfahren = v1.wertermittlungsverfahren, - startdatum = start, - enddatum = stop + Obiskennzahl = v1.Obiskennzahl, + Einheit = v1.Einheit, + Wertermittlungsverfahren = v1.Wertermittlungsverfahren, + Startdatum = start, + Enddatum = stop }; - if (v1.einheit.IsExtensive()) + if (v1.Einheit.IsExtensive()) { - vmerge.wert = v1.wert + v2.wert; + vmerge.Wert = v1.Wert + v2.Wert; result.Add(vmerge); } - else if (v1.wert == v2.wert) // implicitly intensive + else if (v1.Wert == v2.Wert) // implicitly intensive { - vmerge.wert = v1.wert; + vmerge.Wert = v1.Wert; result.Add(vmerge); } else @@ -181,18 +181,18 @@ public static HashSet Merge(this Verbrauch v1, Verbrauch v2, bool red result.Add(v1); result.Add(v2); } - result.RemoveWhere(v => v.einheit.IsIntensive() && new TimeRange(v.startdatum, v.enddatum).Duration.TotalMilliseconds == 0); + result.RemoveWhere(v => v.Einheit.IsIntensive() && new TimeRange(v.Startdatum, v.Enddatum).Duration.TotalMilliseconds == 0); return result; } /// - /// returns time range from , + /// returns time range from , /// /// Verbrauch /// public static TimeRange GetTimeRange(this Verbrauch v) { - return new TimeRange(v.startdatum, v.enddatum); + return new TimeRange(v.Startdatum, v.Enddatum); } public static TimeSpan GetDuration(this Verbrauch v) @@ -219,11 +219,11 @@ public static List Detangle(IEnumerable input) { //var filteredInput = KeepShortestSlices(input); HashSet resultSet = new HashSet(); - var groups = input.OrderBy(v => (v.startdatum, v.wertermittlungsverfahren, v.obiskennzahl, v.einheit)).GroupBy(v => new Tuple + var groups = input.OrderBy(v => (v.Startdatum, v.Wertermittlungsverfahren, v.Obiskennzahl, v.Einheit)).GroupBy(v => new Tuple ( - v.wertermittlungsverfahren, - v.obiskennzahl, - v.einheit + v.Wertermittlungsverfahren, + v.Obiskennzahl, + v.Einheit )); foreach (var vGroup in groups) { @@ -232,7 +232,7 @@ public static List Detangle(IEnumerable input) // find pairs (x,y) where x.end == y.start: // |----x----|--------y--------| //var adjacentVerbrauchs = from x in vGroup join y in vGroup on x.enddatum equals y.startdatum select new { x, y }; - var adjacentVerbrauchs = from x in vGroup join y in vGroup on x.enddatum equals y.startdatum select new { x, y }; + var adjacentVerbrauchs = from x in vGroup join y in vGroup on x.Enddatum equals y.Startdatum select new { x, y }; foreach (var av in adjacentVerbrauchs) { subResult.Add(av.x); @@ -243,10 +243,10 @@ public static List Detangle(IEnumerable input) // |-------------z-------------| // ==> delete z from result where z.start == x.start and z.end == y.end //var fullyRedundantVerbrauchs = from av in adjacentVerbrauchs join z in vGroup on new { av.x.startdatum, av.y.enddatum } equals new { z.startdatum, z.enddatum } select new { av, z }; - var fullyRedundantVerbrauchs = from av in adjacentVerbrauchs join z in vGroup on new { av.x.startdatum, av.y.enddatum } equals new { z.startdatum, z.enddatum } select new { av, z }; + var fullyRedundantVerbrauchs = from av in adjacentVerbrauchs join z in vGroup on new { av.x.Startdatum, av.y.Enddatum } equals new { z.Startdatum, z.Enddatum } select new { av, z }; foreach (var frv in fullyRedundantVerbrauchs) { - if (frv.av.x.wert + frv.av.y.wert != frv.z.wert) + if (frv.av.x.Wert + frv.av.y.Wert != frv.z.Wert) { throw new ArgumentException($"Inconsistent data detected: {JsonConvert.SerializeObject(frv.av.x)} + {JsonConvert.SerializeObject(frv.av.y)} ≠ {JsonConvert.SerializeObject(frv.z)}"); } @@ -279,19 +279,19 @@ public static List Detangle(IEnumerable input) { Verbrauch v = new Verbrauch() { - einheit = z.einheit, - wertermittlungsverfahren = z.wertermittlungsverfahren, - obiskennzahl = z.obiskennzahl, - startdatum = tr.Start, - enddatum = tr.End + Einheit = z.Einheit, + Wertermittlungsverfahren = z.Wertermittlungsverfahren, + Obiskennzahl = z.Obiskennzahl, + Startdatum = tr.Start, + Enddatum = tr.End }; xs.Add(v); } - var totalXWert = z.wert - ys.Select(y => y.wert).Sum(); + var totalXWert = z.Wert - ys.Select(y => y.Wert).Sum(); var totalXDuration = xs.Select(x => x.GetDuration().TotalSeconds).Sum(); foreach (var x in xs) { - x.wert = (totalXWert * (decimal)x.GetDuration().TotalSeconds) / ((decimal)totalXDuration); + x.Wert = (totalXWert * (decimal)x.GetDuration().TotalSeconds) / ((decimal)totalXDuration); } subResult.Remove(z); subResult.UnionWith(xs); @@ -312,10 +312,10 @@ public static List Detangle(IEnumerable input) /// ArgumentException if units are not convertible public static void ConvertToUnit(this Verbrauch v, Mengeneinheit mengeneinheit) { - PhysikalischerWert oldWert = new PhysikalischerWert(v.wert, v.einheit); + PhysikalischerWert oldWert = new PhysikalischerWert(v.Wert, v.Einheit); PhysikalischerWert newWert = oldWert.ConvertToUnit(mengeneinheit); - v.wert = newWert.wert; - v.einheit = newWert.einheit; + v.Wert = newWert.Wert; + v.Einheit = newWert.Einheit; } /// @@ -326,43 +326,43 @@ public static void ConvertToUnit(this Verbrauch v, Mengeneinheit mengeneinheit) /// true iff [.startdatum, .enddatum) and [.startdatum, .enddatum) overlap public static bool OverlapsWith(this Verbrauch v1, Verbrauch v2) { - return v1.OverlapsWith(new TimeRange(v2.startdatum, v2.enddatum, true)); + return v1.OverlapsWith(new TimeRange(v2.Startdatum, v2.Enddatum, true)); } public static bool OverlapsWith(this Verbrauch v1, ITimeRange tr2) { - return new TimeRange(v1.startdatum, v1.enddatum).OverlapsWith(tr2); + return new TimeRange(v1.Startdatum, v1.Enddatum).OverlapsWith(tr2); } public static ITimeRange GetIntersection(this Verbrauch v1, ITimeRange tr2) { - return (new TimeRange(v1.startdatum, v1.enddatum).GetIntersection(tr2)); + return (new TimeRange(v1.Startdatum, v1.Enddatum).GetIntersection(tr2)); } public static ITimeRange GetIntersection(this Verbrauch v1, Verbrauch v2) { - return v1.GetIntersection(new TimeRange(v2.startdatum, v2.enddatum)); + return v1.GetIntersection(new TimeRange(v2.Startdatum, v2.Enddatum)); } public static bool Contains(this Verbrauch v1, Verbrauch v2) { - return v1.OverlapsWith(v2) && v1.startdatum <= v2.startdatum && v1.enddatum >= v2.enddatum; + return v1.OverlapsWith(v2) && v1.Startdatum <= v2.Startdatum && v1.Enddatum >= v2.Enddatum; } /// - /// Allows to sort lists of by , ascending + /// Allows to sort lists of by , ascending /// public class VerbrauchDateTimeComparer : IComparer { int IComparer.Compare(Verbrauch x, Verbrauch y) { - if (x.startdatum != y.startdatum) + if (x.Startdatum != y.Startdatum) { - return DateTime.Compare(x.startdatum, y.startdatum); + return DateTime.Compare(x.Startdatum, y.Startdatum); } - else if (x.enddatum != y.enddatum) + else if (x.Enddatum != y.Enddatum) { - return DateTime.Compare(x.enddatum, y.enddatum); + return DateTime.Compare(x.Enddatum, y.Enddatum); } else { diff --git a/BO4E-dotnet.Reporting/BO4E-dotnet.Reporting.csproj b/BO4E-dotnet.Reporting/BO4E-dotnet.Reporting.csproj index 5e441e04..f25a428b 100644 --- a/BO4E-dotnet.Reporting/BO4E-dotnet.Reporting.csproj +++ b/BO4E-dotnet.Reporting/BO4E-dotnet.Reporting.csproj @@ -12,6 +12,7 @@ Hochfrequenz.BO4E.Reporting Hochfrequenz Unternehmensberatung GmbH Hochfrequenz Unternehmensberatung GmbH + 0.2.0 diff --git a/BO4E-dotnet.Reporting/CompletenessReport.cs b/BO4E-dotnet.Reporting/CompletenessReport.cs index 2959aab5..1406300e 100644 --- a/BO4E-dotnet.Reporting/CompletenessReport.cs +++ b/BO4E-dotnet.Reporting/CompletenessReport.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; + using BO4E.COM; using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; namespace BO4E.Reporting @@ -10,68 +12,68 @@ namespace BO4E.Reporting /// /// A completeness report contains information about the completeness of a pure /// . In this context "pure" means, that the Energiemenge - /// does only contain one distinct set of (, , - /// ). + /// does only contain one distinct set of (, , + /// ). /// public class CompletenessReport : Report, IComparable { /// - /// all information like e.g. is normalised to this reference time frame. - /// Must only be null if an error occurred and is not null. + /// all information like e.g. is normalised to this reference time frame. + /// Must only be null if an error occurred and is not null. /// - [JsonProperty(Required = Required.AllowNull, Order = 7)] - public Zeitraum referenceTimeFrame; + [JsonProperty(PropertyName = "referenceTimeFrame", Required = Required.AllowNull, Order = 7)] + public Zeitraum ReferenceTimeFrame { get; set; } /// /// /// [DataCategory(DataCategory.POD)] - [JsonProperty(Required = Required.Always, Order = 8)] - public string lokationsId; + [JsonProperty(PropertyName = "lokationsId", Required = Required.Always, Order = 8)] + public string LokationsId { get; set; } /// - /// + /// /// - [JsonProperty(Required = Required.Default, Order = 5)] - public string obiskennzahl; + [JsonProperty(PropertyName = "obiskennzahl", Required = Required.Default, Order = 5)] + public string Obiskennzahl { get; set; } /// - /// + /// /// - [JsonProperty(Required = Required.Default, Order = 6)] - public Mengeneinheit einheit; + [JsonProperty(PropertyName = "einheit", Required = Required.Default, Order = 6)] + public Mengeneinheit Einheit { get; set; } /// - /// + /// /// - [JsonProperty(Required = Required.Default, Order = 7)] - public Wertermittlungsverfahren wertermittlungsverfahren; + [JsonProperty(PropertyName = "wertermittlungsverfahren", Required = Required.Default, Order = 7)] + public Wertermittlungsverfahren wertermittlungsverfahren { get; set; } /// - /// ratio of time with data present compared to . + /// ratio of time with data present compared to . /// 1.0 means 100% coverage. /// - [JsonProperty(Required = Required.AllowNull, Order = 8)] - public decimal? coverage; + [JsonProperty(PropertyName = "coverage", Required = Required.AllowNull, Order = 8)] + public decimal? Coverage { get; set; } /// /// values /// - [JsonProperty(Required = Required.Default, Order = 5)] + [JsonProperty(PropertyName = "values", Required = Required.Default, Order = 5)] [DataCategory(DataCategory.METER_READING)] - public List values; + public List Values { get; set; } /// - /// gaps are continous values () with value null. + /// gaps are continous values () with value null. /// - [JsonProperty(Required = Required.Default, Order = 6)] - public List gaps; + [JsonProperty(PropertyName = "gaps", Required = Required.Default, Order = 6)] + public List Gaps { get; set; } /// /// optional field for storing error messages /// - [JsonProperty(Required = Required.Default)] - public string _errorMessage; + [JsonProperty(PropertyName = "_errorMessage", Required = Required.Default)] + public string ErrorMessage { get; set; } // ToDo: make it nice. /// @@ -81,25 +83,25 @@ public class CompletenessReport : Report, IComparable /// public int CompareTo(CompletenessReport other) { - if(this.referenceTimeFrame==null && other.referenceTimeFrame == null) + if (this.ReferenceTimeFrame == null && other.ReferenceTimeFrame == null) { return 0; } - if(this.referenceTimeFrame!=null && other.referenceTimeFrame == null) + if (this.ReferenceTimeFrame != null && other.ReferenceTimeFrame == null) { return 1; } - if(this.referenceTimeFrame==null && other.referenceTimeFrame != null) + if (this.ReferenceTimeFrame == null && other.ReferenceTimeFrame != null) { return -1; } - if(this.referenceTimeFrame!=null && other.referenceTimeFrame != null) + if (this.ReferenceTimeFrame != null && other.ReferenceTimeFrame != null) { - if(this.referenceTimeFrame.startdatum.HasValue && other.referenceTimeFrame.startdatum.HasValue) + if (this.ReferenceTimeFrame.Startdatum.HasValue && other.ReferenceTimeFrame.Startdatum.HasValue) { - return Comparer.Default.Compare(referenceTimeFrame.startdatum.Value, other.referenceTimeFrame.startdatum.Value); + return Comparer.Default.Compare(ReferenceTimeFrame.Startdatum.Value, other.ReferenceTimeFrame.Startdatum.Value); } - if (this.referenceTimeFrame.startdatum.HasValue) + if (this.ReferenceTimeFrame.Startdatum.HasValue) { return 1; } @@ -118,21 +120,21 @@ public int CompareTo(CompletenessReport other) public class BasicVerbrauch // : Verbrauch { /// - /// + /// /// - [JsonProperty(Required = Required.Always)] - public DateTime startdatum; + [JsonProperty(PropertyName = "startdatum", Required = Required.Always)] + public DateTime Startdatum { get; set; } /// - /// + /// /// - [JsonProperty(Required = Required.Always)] - public DateTime enddatum; + [JsonProperty(PropertyName = "enddatum", Required = Required.Always)] + public DateTime Enddatum { get; set; } /// - /// . Make it null to express no value present. + /// . Make it null to express no value present. /// [DataCategory(DataCategory.METER_READING)] - [JsonProperty(Required = Required.AllowNull)] - public decimal? wert; + [JsonProperty(PropertyName = "wert", Required = Required.AllowNull)] + public decimal? Wert { get; set; } /* [JsonIgnore] @@ -158,26 +160,26 @@ public class CompletenessReportConfiguration /// /// reference time frame to be analysed /// - [JsonProperty(Required = Required.Always, Order = 7)] - public Zeitraum referenceTimeFrame; + [JsonProperty(PropertyName = "referenceTimeFrame", Required = Required.Always, Order = 7)] + public Zeitraum ReferenceTimeFrame { get; set; } /// - /// Wertermittlungsverfahren () to be taken into account. + /// Wertermittlungsverfahren () to be taken into account. /// - [JsonProperty(Required = Required.Default, Order = 8)] - public Wertermittlungsverfahren wertermittlungsverfahren; + [JsonProperty(PropertyName = "wertermittlungsverfahren", Required = Required.Default, Order = 8)] + public Wertermittlungsverfahren Wertermittlungsverfahren { get; set; } /// - /// OBIS ID () to be taken into account. + /// OBIS ID () to be taken into account. /// - [JsonProperty(Required = Required.Default, Order = 5)] - public string obis; + [JsonProperty(PropertyName = "obis", Required = Required.Default, Order = 5)] + public string Obis { get; set; } /// - /// Unit () to be taken into account. + /// Unit () to be taken into account. /// - [JsonProperty(Required = Required.Default, Order = 6)] - public Mengeneinheit einheit; + [JsonProperty(PropertyName = "einheit", Required = Required.Default, Order = 6)] + public Mengeneinheit Einheit { get; set; } } /* /// diff --git a/BO4E-dotnet.Reporting/PlausibilityReport.cs b/BO4E-dotnet.Reporting/PlausibilityReport.cs index 9742c3ac..359b6e26 100644 --- a/BO4E-dotnet.Reporting/PlausibilityReport.cs +++ b/BO4E-dotnet.Reporting/PlausibilityReport.cs @@ -2,6 +2,7 @@ using BO4E.COM; using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; namespace BO4E.Reporting @@ -18,53 +19,53 @@ public class PlausibilityReport : Report /// /// all information is normalised to this reference time frame /// - [JsonProperty(Required = Required.Always, Order = 7)] - public Zeitraum referenceTimeFrame; + [JsonProperty(PropertyName = "referenceTimeFrame", Required = Required.Always, Order = 7)] + public Zeitraum ReferenceTimeFrame { get; set; } /// - /// refers to a + /// refers to a /// [DataCategory(DataCategory.POD)] - [JsonProperty(Required = Required.Always, Order = 8)] - public string lokationsId; + [JsonProperty(PropertyName = "lokationsId", Required = Required.Always, Order = 8)] + public string LokationsId { get; set; } /// - /// relative deviation of both Energiemengen within . - /// Null iff the of is 0. + /// relative deviation of both Energiemengen within . + /// Null iff the of is 0. /// /// /// 0 = equal consumption /// +1 = other Energiemenge has twice the consumption of the reference /// -1 = other Energiemenge has 0 consumption /// - [JsonProperty(Required = Required.AllowNull, Order = 5)] - public decimal? relativeDeviation; + [JsonProperty(PropertyName = "relativeDeviation", Required = Required.AllowNull, Order = 5)] + public decimal? RelativeDeviation { get; set; } /// /// Verbrauch of the reference Energiemenge /// [DataCategory(DataCategory.METER_READING)] - [JsonProperty(Required = Required.Always, Order = 6)] - public Verbrauch verbrauchReference; + [JsonProperty(PropertyName = "verbrauchReference", Required = Required.Always, Order = 6)] + public Verbrauch VerbrauchReference { get; set; } /// /// Verbrauch of another Energiemenge /// [DataCategory(DataCategory.METER_READING)] - [JsonProperty(Required = Required.Always, Order = 7)] - public Verbrauch verbrauchOther; + [JsonProperty(PropertyName = "verbrauchOther", Required = Required.Always, Order = 7)] + public Verbrauch VerbrauchOther { get; set; } /// - /// absolute value of the difference between of and + /// absolute value of the difference between of and /// - [JsonProperty(Required = Required.Always, Order = 8)] - public decimal absoluteDeviation; + [JsonProperty(PropertyName = "absoluteDeviation", Required = Required.Always, Order = 8)] + public decimal AbsoluteDeviation { get; set; } /// - /// unit of + /// unit of /// - [JsonProperty(Required = Required.Always, Order = 5)] - public Mengeneinheit absoluteDeviationEinheit; + [JsonProperty(PropertyName = "absoluteDeviationEinheit", Required = Required.Always, Order = 5)] + public Mengeneinheit AbsoluteDeviationEinheit { get; set; } /// /// This data class contains all the data required to start the PlausibilityReport generation. @@ -75,20 +76,20 @@ public class PlausibilityReportConfiguration /// /// reference time frame /// - [JsonProperty(Required = Required.AllowNull)] - public Zeitraum timeframe; + [JsonProperty(PropertyName = "timeframe", Required = Required.AllowNull)] + public Zeitraum Timeframe { get; set; } /// /// Energiemenge to be compared with the reference Energiemenge /// - [JsonProperty(Required = Required.Always)] - public Energiemenge other; + [JsonProperty(PropertyName = "other", Required = Required.Always)] + public Energiemenge Other { get; set; } /// - /// set true to ignore if Energiemenge do have different or + /// set true to ignore if Energiemenge do have different or /// - [JsonProperty(Required = Required.Always)] - public bool ignoreLocation; + [JsonProperty(PropertyName = "ignoreLocation", Required = Required.Always)] + public bool IgnoreLocation { get; set; } } } } diff --git a/BO4E-dotnet.Reporting/Report.cs b/BO4E-dotnet.Reporting/Report.cs index 510bc049..e6ace886 100644 --- a/BO4E-dotnet.Reporting/Report.cs +++ b/BO4E-dotnet.Reporting/Report.cs @@ -1,8 +1,10 @@ -using BO4E.BO; -using System; +using System; using System.Collections; using System.Collections.Generic; using System.Linq; + +using BO4E.BO; + using static BO4E.Reporting.CompletenessReport; namespace BO4E.Reporting @@ -85,7 +87,7 @@ public abstract class Report : BusinessObject } else { - int userPropertiesIndex = headerNames.IndexOf("userProperties"); + int userPropertiesIndex = headerNames.IndexOf(BusinessObject.USER_PROPERTIES_NAME); if (userPropertiesIndex >= 0) { headerNames.RemoveAt(userPropertiesIndex); @@ -131,7 +133,7 @@ public abstract class Report : BusinessObject } else { - throw new ArgumentException("invalid values", nameof(reihenfolge)); + throw new ArgumentException($"'{reihenItem.Keys.First()}' was not part of {nameof(headerNames)}=[{string.Join(", ", headerNames)}]", nameof(reihenfolge)); } } else @@ -142,7 +144,7 @@ public abstract class Report : BusinessObject } else { - int userPropertiesIndex = headerNames.IndexOf("userProperties"); + int userPropertiesIndex = headerNames.IndexOf(BusinessObject.USER_PROPERTIES_NAME); if (userPropertiesIndex >= 0) { headerNames.RemoveAt(userPropertiesIndex); @@ -193,17 +195,17 @@ public abstract class Report : BusinessObject private Dictionary, List> Detect(Type type, char separator, object value, Dictionary, List> returnData) { - var fields = type.GetFields(); - var fieldsList = fields.Where(s => !s.Name.StartsWith("_")).ToList(); + var props = type.GetProperties(); + var nonHiddenProps = props.Where(s => !s.Name.StartsWith("_")).ToList(); List d = returnData.Values.First(); List h = returnData.Keys.First(); - foreach (var field in fieldsList) + foreach (var field in nonHiddenProps) { - if (field.FieldType.IsSubclassOf(typeof(BO4E.COM.COM))) + if (field.PropertyType.IsSubclassOf(typeof(BO4E.COM.COM))) { - returnData = Detect(field.FieldType, separator, field.GetValue(value), returnData); + returnData = Detect(field.PropertyType, separator, field.GetValue(value), returnData); } - else if ((field.FieldType.IsGenericType && (field.FieldType.GetGenericTypeDefinition() == typeof(List<>)))) + else if ((field.PropertyType.IsGenericType && (field.PropertyType.GetGenericTypeDefinition() == typeof(List<>)))) { if (field.GetValue(value) != null && field.Name != "gaps") { @@ -231,14 +233,14 @@ private Dictionary, List> Detect(Type type, char separator, muterType = field.DeclaringType.Name + "."; } string val = nestedValue.ToString(); - if (field.FieldType == typeof(DateTime?)) + if (field.PropertyType == typeof(DateTime?)) { if (((DateTime?)nestedValue).HasValue) { val = ((DateTime?)nestedValue).Value.ToString("yyyy-MM-ddTHH:mm:ssZ"); } } - else if (field.FieldType == typeof(DateTime)) + else if (field.PropertyType == typeof(DateTime)) { val = ((DateTime)nestedValue).ToString("yyyy-MM-ddTHH:mm:ssZ"); } diff --git a/BO4E-dotnet/BO/Angebot.cs b/BO4E-dotnet/BO/Angebot.cs index 60bfd82b..275453d4 100644 --- a/BO4E-dotnet/BO/Angebot.cs +++ b/BO4E-dotnet/BO/Angebot.cs @@ -1,10 +1,13 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; + using BO4E.COM; using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.BO @@ -18,19 +21,19 @@ public class Angebot : BusinessObject /// /// Eindeutige Nummer des Angebotes. /// - [JsonProperty(Required = Required.Always, Order = 4)] + [JsonProperty(Required = Required.Always, Order = 4, PropertyName = "angebotsnummer")] [ProtoMember(4)] [DataCategory(DataCategory.FINANCE)] [BoKey] - public string angebotsnummer; + public string Angebotsnummer { get; set; } /// /// Referenz auf eine Anfrage oder Ausschreibung.Kann dem Empfänger des Angebotes bei Zuordnung des Angebotes zur Anfrage bzw.Ausschreibung helfen. /// - [JsonProperty(Required = Required.Default, Order = 5)] + [JsonProperty(Required = Required.Default, Order = 5, PropertyName = "anfragereferenz")] [ProtoMember(5)] [DataCategory(DataCategory.FINANCE)] - public string anfragereferenz; + public string Anfragereferenz { get; set; } /// /// Erstellungsdatum des Angebots, @@ -38,19 +41,19 @@ public class Angebot : BusinessObject /// /// 2017-12-24 /// - [JsonProperty(Required = Required.Always, Order = 6)] + [JsonProperty(Required = Required.Always, Order = 6, PropertyName = "angebotsdatum")] [ProtoMember(6)] [DataCategory(DataCategory.FINANCE)] // ToDo: handle this as DateTime object that serializes without the "time" in "DateTime" - public string angebotsdatum; + public string Angebotsdatum { get; set; } /// /// Sparte, für die das Angebot abgegeben wird (Strom/Gas). /// /// - [JsonProperty(Required = Required.Always, Order = 7)] + [JsonProperty(Required = Required.Always, Order = 7, PropertyName = "sparte")] [ProtoMember(7)] - public Sparte sparte; + public Sparte Sparte { get; set; } /// /// Bis zu diesem Zeitpunkt(Tag/Uhrzeit) inklusive gilt das Angebot @@ -58,55 +61,55 @@ public class Angebot : BusinessObject /// /// 2017-12-31 17:00:00 /// - [JsonProperty(Required = Required.Default, Order = 8)] + [JsonProperty(Required = Required.Default, Order = 8, PropertyName = "bindefrist")] [ProtoMember(8)] [DataCategory(DataCategory.FINANCE)] - public DateTime bindefrist; + public DateTime Bindefrist { get; set; } /// /// Link auf den Ersteller des Angebots. /// /// - [JsonProperty(Required = Required.Always, Order = 9)] + [JsonProperty(Required = Required.Always, Order = 9, PropertyName = "angebotgeber")] [ProtoMember(9)] [DataCategory(DataCategory.FINANCE)] - public Geschaeftspartner angebotgeber; + public Geschaeftspartner Angebotgeber { get; set; } /// /// Link auf den Empfänger des Angebots. /// /// - [JsonProperty(Required = Required.Always, Order = 10)] + [JsonProperty(Required = Required.Always, Order = 10, PropertyName = "angebotnehmer")] [ProtoMember(10)] [DataCategory(DataCategory.FINANCE)] - public Geschaeftspartner angebotnehmer; + public Geschaeftspartner Angebotnehmer { get; set; } /// /// Link auf die Person, die als Angebotsnehmer das Angebot angenommen hat. /// /// - [JsonProperty(Required = Required.Default, Order = 11)] + [JsonProperty(Required = Required.Default, Order = 11, PropertyName = "unterzeichnerAngebotsnehmer")] [ProtoMember(11)] [DataCategory(DataCategory.NAME)] - public Ansprechpartner unterzeichnerAngebotsnehmer; + public Ansprechpartner UnterzeichnerAngebotsnehmer { get; set; } /// /// Link auf die Person, die als Angebotsgeber das Angebots ausgestellt hat. /// /// - [JsonProperty(Required = Required.Default, Order = 12)] + [JsonProperty(Required = Required.Default, Order = 12, PropertyName = "unterzeichnerAngebotsgeber")] [ProtoMember(12)] [DataCategory(DataCategory.NAME)] - public Ansprechpartner unterzeichnerAngebotsgeber; + public Ansprechpartner UnterzeichnerAngebotsgeber { get; set; } /// /// Eine oder mehrere Varianten des Angebots mit den Angebotsteilen. Ein Angebot besteht mindestens aus einer Variante. /// /// - [JsonProperty(Required = Required.Default, Order = 13)] + [JsonProperty(Required = Required.Default, Order = 13, PropertyName = "varianten")] [ProtoMember(13)] [DataCategory(DataCategory.FINANCE)] [MinLength(1)] - public List varianten; + public List Varianten { get; set; } } } diff --git a/BO4E-dotnet/BO/Ansprechpartner.cs b/BO4E-dotnet/BO/Ansprechpartner.cs index e8c7a521..80615e0f 100644 --- a/BO4E-dotnet/BO/Ansprechpartner.cs +++ b/BO4E-dotnet/BO/Ansprechpartner.cs @@ -1,8 +1,11 @@ using System.Collections.Generic; + using BO4E.COM; using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.BO @@ -16,75 +19,75 @@ public class Ansprechpartner : BusinessObject /// /// Mögliche Anrede des Ansprechpartners /// - [JsonProperty(Required = Required.Default, Order = 4)] + [JsonProperty(Required = Required.Default, Order = 4, PropertyName = "anrede")] [ProtoMember(4)] [DataCategory(DataCategory.NAME)] - public Anrede? anrede; + public Anrede? Anrede { get; set; } /// /// Im Falle einer nicht standardisierten Anrede kann hier eine frei definierbare /// Anrede vorgegeben werden. Beispiel: "Sehr geehrte Frau Müller, sehr geehrter /// Herr Dr. Müller" /// - [JsonProperty(Required = Required.Default, Order = 5)] + [JsonProperty(Required = Required.Default, Order = 5, PropertyName = "inviduelleAnrede")] [ProtoMember(5)] [DataCategory(DataCategory.NAME)] - public string individuelleAnrede; + public string IndividuelleAnrede { get; set; } /// Möglicher Titel des Ansprechpartners - [JsonProperty(Required = Required.Default, Order = 6)] + [JsonProperty(Required = Required.Default, Order = 6, PropertyName = "titel")] [ProtoMember(6)] [DataCategory(DataCategory.NAME)] - public Titel? titel; + public Titel? Titel; /// Vorname des Ansprechpartners - [JsonProperty(Required = Required.Default, Order = 7)] + [JsonProperty(Required = Required.Default, Order = 7, PropertyName = "vorname")] [ProtoMember(7)] [DataCategory(DataCategory.NAME)] [BoKey] - public string vorname; + public string Vorname { get; set; } /// Nachname (Familienname) des Ansprechpartners - [JsonProperty(Required = Required.Always, Order = 8)] + [JsonProperty(Required = Required.Always, Order = 8, PropertyName = "nachname")] [ProtoMember(8)] [DataCategory(DataCategory.NAME)] [BoKey] - public string nachname; + public string Nachname { get; set; } /// E-Mail Adresse - [JsonProperty(Required = Required.Default, Order = 9)] + [JsonProperty(Required = Required.Default, Order = 9, PropertyName = "eMailAdresse")] [ProtoMember(9)] [DataCategory(DataCategory.ADDRESS)] - public string eMailAdresse; + public string EMailAdresse { get; set; } /// Weitere Informationen zum Ansprechpartner - [JsonProperty(Required = Required.Default, Order = 10)] + [JsonProperty(Required = Required.Default, Order = 10, PropertyName = "kommentar")] [ProtoMember(10)] [DataCategory(DataCategory.NAME)] - public string kommentar; + public string Kommentar { get; set; } /// Der Geschäftspartner, für den dieser Ansprechpartner modelliert wird. - [JsonProperty(Required = Required.Always, Order = 11)] + [JsonProperty(Required = Required.Always, Order = 11, PropertyName = "geschaeftspartner")] [ProtoMember(11)] [BoKey] - public Geschaeftspartner geschaeftspartner; + public Geschaeftspartner Geschaeftspartner { get; set; } /// Adresse des Ansprechpartners, falls diese von der Adresse des Geschäftspartners abweicht. - [JsonProperty(Required = Required.Default, Order = 12)] + [JsonProperty(Required = Required.Default, Order = 12, PropertyName = "adresse")] [ProtoMember(12)] [DataCategory(DataCategory.ADDRESS)] - public Adresse adresse; + public Adresse Adresse { get; set; } /// Liste der Telefonnummern, unter denen der Ansprechpartner erreichbar ist. - [JsonProperty(Required = Required.Default, Order = 13)] + [JsonProperty(Required = Required.Default, Order = 13, PropertyName = "rufnummer")] [ProtoMember(13)] [DataCategory(DataCategory.ADDRESS)] - public List rufnummer; + public List Rufnummer; /// Liste der Abteilungen und Zuständigkeiten des Ansprechpartners. - [JsonProperty(Required = Required.Default, Order = 14)] + [JsonProperty(Required = Required.Default, Order = 14, PropertyName = "zustaendigkeit")] [ProtoMember(14)] - public List zustaendigkeit; + public List Zustaendigkeit; } } diff --git a/BO4E-dotnet/BO/Benachrichtigung.cs b/BO4E-dotnet/BO/Benachrichtigung.cs index 59786f94..79600e40 100644 --- a/BO4E-dotnet/BO/Benachrichtigung.cs +++ b/BO4E-dotnet/BO/Benachrichtigung.cs @@ -1,10 +1,13 @@ using System; using System.Collections.Generic; using System.ComponentModel; + using BO4E.COM; using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.BO @@ -21,33 +24,33 @@ public class Benachrichtigung : BusinessObject /// Eine eindeutige ID der Benachrichtigung. /// Entspricht z.B. der Klärfallnummer in einem SAP-System oder der Task-ID im Salesforce /// - [JsonProperty(Required = Required.Always, Order = 4)] + [JsonProperty(Required = Required.Always, Order = 4, PropertyName = "benachrichtigungsId")] [ProtoMember(4)] [BoKey] - public string benachrichtigungsId; + public string BenachrichtigungsId { get; set; } /// /// Priorität der Benachrichtigung /// [DefaultValue(Prioritaet.NORMAL)] - [JsonProperty(Required = Required.Always, Order = 5)] + [JsonProperty(Required = Required.Always, Order = 5, PropertyName = "prioritaet")] [ProtoMember(5)] - public Prioritaet prioritaet; + public Prioritaet Prioritaet { get; set; } /// /// Status der Benachrichtigung /// [DefaultValue(Bearbeitungsstatus.OFFEN)] - [JsonProperty(Required = Required.Always, Order = 6)] + [JsonProperty(Required = Required.Always, Order = 6, PropertyName = "bearbeitungsstatus")] [ProtoMember(6)] - public Bearbeitungsstatus bearbeitungsstatus; + public Bearbeitungsstatus Bearbeitungsstatus { get; set; } /// /// Kurzbeschreibung des Fehlers (Klärfall-Überschrift im SAP, Subject im SFDC) /// - [JsonProperty(Required = Required.Always, Order = 7)] + [JsonProperty(Required = Required.Always, Order = 7, PropertyName = "kurztext")] [ProtoMember(7)] - public string kurztext; + public string Kurztext { get; set; } //[JsonIgnore] //private DateTime _erstellungsZeitpunkt; @@ -55,9 +58,9 @@ public class Benachrichtigung : BusinessObject /// Zeitpunkt zu dem die Benachrichtigung erstellt wurde (UTC). /// // [DefaultValue(DateTime.UtcNow)] <-- doesn't work. - [JsonProperty(Required = Required.Always, Order = 8)] + [JsonProperty(Required = Required.Always, Order = 8, PropertyName = "erstellungsZeitpunkt")] [ProtoMember(8)] - public DateTime erstellungsZeitpunkt; + public DateTime ErstellungsZeitpunkt { get; set; } /*{ get { return _erstellungsZeitpunkt; } set @@ -77,25 +80,25 @@ public class Benachrichtigung : BusinessObject /// Optionale Kategorisierung der Benachrichtigung. /// (Entspricht z.B. der Klärfallkategorie in SAP) /// - [JsonProperty(Required = Required.Default, Order = 9)] + [JsonProperty(Required = Required.Default, Order = 9, PropertyName = "kategorie")] [ProtoMember(9)] - public string kategorie; + public string Kategorie { get; set; } /// /// Eindeutige Kennung des Benutzers, der die Benachrichtigung erhält oder sie bearbeiten /// muss; analog dem Klärfallbearbeiter im SAP oder dem Owner im Salesforce. /// Kann auch null sein, wenn es keinen festen Bearbeiter gibt. /// - [JsonProperty(Required = Required.Default, Order = 10)] + [JsonProperty(Required = Required.Default, Order = 10, PropertyName = "bearbeiter")] [ProtoMember(10)] - public string bearbeiter; + public string Bearbeiter { get; set; } /// /// Detaillierte Beschreibung (Klärfall-Notizen im SAP, Description im SFDC) /// - [JsonProperty(Required = Required.Default, Order = 11)] + [JsonProperty(Required = Required.Default, Order = 11, PropertyName = "notizen")] [ProtoMember(11)] - public List notizen; + public List Notizen { get; set; } /* /// @@ -103,29 +106,29 @@ public class Benachrichtigung : BusinessObject /// [JsonProperty(Required = Required.Default, Order = 8)] [ProtoMember(8)] - public Bo4eUri betroffenesObjekt; + public Bo4eUri betroffenesObjekt { get;set; } */ /// /// Zeitpunkt bis zu dem die Benachrichtigung bearbeitet worden sein muss. /// - [JsonProperty(Required = Required.Default, Order = 12)] + [JsonProperty(Required = Required.Default, Order = 12, PropertyName = "deadline")] [ProtoMember(12)] - public DateTime? deadline; + public DateTime? Deadline { get; set; } /// /// Liste von Aktivitäten, die der Bearbeiter ausführen kann. /// - [JsonProperty(Required = Required.Default, Order = 13)] + [JsonProperty(Required = Required.Default, Order = 13, PropertyName = "aufgaben")] [ProtoMember(13)] - public List aufgaben; + public List Aufgaben { get; set; } /// /// list of additional information built in a customer dependet implementation /// - [JsonProperty(Required = Required.Default, Order = 14)] + [JsonProperty(Required = Required.Default, Order = 14, PropertyName = "infos")] [ProtoMember(14)] - public List infos; + public List Infos { get; set; } } } diff --git a/BO4E-dotnet/BO/BusinessObject.cs b/BO4E-dotnet/BO/BusinessObject.cs index 0c4a71dc..c21869fd 100644 --- a/BO4E-dotnet/BO/BusinessObject.cs +++ b/BO4E-dotnet/BO/BusinessObject.cs @@ -49,9 +49,9 @@ public abstract class BusinessObject : IEquatable /// 'MESSLOKATION', /// 'MARKTLOKATION' /// - [JsonProperty(Required = Required.Default, Order = 1)] + [JsonProperty(Required = Required.Default, Order = 1, PropertyName = "boTyp")] [ProtoMember(1)] - public string boTyp; + public string BoTyp { get; set; } /// /// Fields that are not part of the BO4E-definition are stored in a element, that is @@ -84,31 +84,31 @@ public abstract class BusinessObject : IEquatable /// [JsonIgnore] [ProtoIgnore] - public const string userPropertiesName = "userProperties"; + public const string USER_PROPERTIES_NAME = "userProperties"; /// /// User properties (non bo4e standard) /// - [JsonProperty(PropertyName = userPropertiesName, Required = Required.Default, Order = 200)] + [JsonProperty(PropertyName = USER_PROPERTIES_NAME, Required = Required.Default, Order = 200)] [JsonExtensionData] [ProtoMember(200)] [DataCategory(DataCategory.USER_PROPERTIES)] - public IDictionary userProperties; + public IDictionary UserProperties { get; set; } /// /// generates the BO4E boTyp attribute value (class name as upper case) /// protected BusinessObject() { - boTyp = this.GetType().Name.ToUpper(); + BoTyp = this.GetType().Name.ToUpper(); versionStruktur = 1; } /// - /// return (as string, not as type) + /// return (as string, not as type) /// /// - public string GetBoTyp() => this.boTyp; + public string GetBoTyp() => this.BoTyp; /// /// This method is just to make sure the mapping actually makes sense. @@ -178,7 +178,7 @@ public Bo4eUri GetURI(bool includeUserProperties = false) /// names as they are serialised in JSON. This means that the fields PropertyName is part /// of the list if JsonPropertyAttribute.PropertyName is set in the Business Objects /// definition. Please do not use this method trying to access the actual key values. Use - /// the or for this purpose. + /// the or for this purpose. /// The list is sorted by the JsonPropertyAttribute.Order, assuming 0 if not specified. /// /// A list of the names (not the values) of the (composite) Business Object key or an empty list if no key attributes are defined. @@ -202,16 +202,16 @@ public List GetBoKeyNames() public static List GetBoKeyNames(Type boType) { List result = new List(); - foreach (FieldInfo fi in GetBoKeyFieldInfos(boType)) + foreach (var pi in GetBoKeyProps(boType)) { - JsonPropertyAttribute jpa = fi.GetCustomAttribute(); + JsonPropertyAttribute jpa = pi.GetCustomAttribute(); if (jpa != null && jpa.PropertyName != null) { result.Add(jpa.PropertyName); } else { - result.Add(fi.Name.ToString()); + result.Add(pi.Name.ToString()); } } return result; @@ -230,16 +230,16 @@ public static List GetBoKeyNames(Type boType) /// and the type of the property as value. Nesting and different layers are denoted by /// using "." /// - public static Dictionary GetExpandableFieldNames(Type boType) + public static Dictionary GetExpandablePropertyNames(Type boType) { - return GetExpandableFieldNames(boType, true); + return GetExpandablePropertyNames(boType, true); } /// - /// + /// /// /// name of the business object as string - /// + /// public static Dictionary GetExpandableFieldNames(string boTypeName) { Type clazz = Assembly.GetExecutingAssembly().GetType(BoMapper.packagePrefix + "." + boTypeName); @@ -247,7 +247,7 @@ public static Dictionary GetExpandableFieldNames(string boTypeName { throw new ArgumentException($"{boTypeName} is not a valid Business Object name. Use one of the following: {string.Join("\n -", BoMapper.GetValidBoNames())}"); } - return GetExpandableFieldNames(clazz); + return GetExpandablePropertyNames(clazz); } /// @@ -257,46 +257,47 @@ public static Dictionary GetExpandableFieldNames(string boTypeName /// Type inherited from Business Object /// true iff calling from outside the function itself / default /// HashSet of strings - protected static Dictionary GetExpandableFieldNames(Type type, bool rootLevel = true) + protected static Dictionary GetExpandablePropertyNames(Type type, bool rootLevel = true) { if (rootLevel && !type.IsSubclassOf(typeof(BO.BusinessObject))) { throw new ArgumentException("Only allowed for BusinessObjects"); } Dictionary result = new Dictionary(); - foreach (FieldInfo field in type.GetFields()) + foreach (var prop in type.GetProperties()) { string fieldName; - JsonPropertyAttribute jpa = field.GetCustomAttribute(); + JsonPropertyAttribute jpa = prop.GetCustomAttribute(); if (jpa != null && jpa.PropertyName != null) { fieldName = jpa.PropertyName; } else { - fieldName = field.Name; + fieldName = prop.Name; } - if (field.FieldType.IsSubclassOf(typeof(BO.BusinessObject))) + if (prop.PropertyType.IsSubclassOf(typeof(BO.BusinessObject))) { - foreach (KeyValuePair subResult in GetExpandableFieldNames(field.FieldType, false)) + foreach (KeyValuePair subResult in GetExpandablePropertyNames(prop.PropertyType, false)) + { result.Add(string.Join(".", new string[] { fieldName, subResult.Key }), subResult.Value); } - result.Add(fieldName, field.FieldType); + result.Add(fieldName, prop.PropertyType); } - else if (field.FieldType.IsSubclassOf(typeof(COM.COM))) + else if (prop.PropertyType.IsSubclassOf(typeof(COM.COM))) { - result.Add(fieldName, field.FieldType); + result.Add(fieldName, prop.PropertyType); // coms do not contain any exandable subfield since they're flat } - else if (field.FieldType.IsGenericType && field.FieldType.GetGenericTypeDefinition() == typeof(List<>)) + else if (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(List<>)) { - Type listElementType = field.FieldType.GetGenericArguments()[0]; - foreach (KeyValuePair subResult in GetExpandableFieldNames(listElementType, false)) + Type listElementType = prop.PropertyType.GetGenericArguments()[0]; + foreach (KeyValuePair subResult in GetExpandablePropertyNames(listElementType, false)) { result.Add(string.Join(".", new string[] { fieldName, subResult.Key }), subResult.Value); } - result.Add(fieldName, field.FieldType); + result.Add(fieldName, prop.PropertyType); } else { @@ -311,21 +312,21 @@ protected static Dictionary GetExpandableFieldNames(Type type, boo /// The dictionary has the JsonPropertyAttribute.PropertyName or FieldName /// of the key as key and the actual key value as value. /// - /// + /// /// A dictionary with key value pairs. public Dictionary GetBoKeys() { Dictionary result = new Dictionary(); - foreach (FieldInfo fi in GetBoKeyFieldInfos(this.GetType())) + foreach (var pi in GetBoKeyProps(this.GetType())) { - JsonPropertyAttribute jpa = fi.GetCustomAttribute(); + JsonPropertyAttribute jpa = pi.GetCustomAttribute(); if (jpa != null && jpa.PropertyName != null) { - result.Add(jpa.PropertyName, fi.GetValue(this)); + result.Add(jpa.PropertyName, pi.GetValue(this)); } else { - result.Add(fi.Name, fi.GetValue(this)); + result.Add(pi.Name, pi.GetValue(this)); } } return result; @@ -337,16 +338,16 @@ public Dictionary GetBoKeys() /// /// Business Object type /// A list of FieldInfos to be used for accessing the key values. - public static List GetBoKeyFieldInfos(Type boType) + public static List GetBoKeyProps(Type boType) { if (!boType.IsSubclassOf(typeof(BusinessObject))) { throw new ArgumentException($"Business Object keys are only defined on Business Object types but {boType.ToString()} is not a Business Object."); } - return boType.GetFields() - .Where(f => f.GetCustomAttributes(typeof(BoKey), false).Length > 0) - .OrderBy(af => af.GetCustomAttribute()?.Order) - .ToList(); + return boType.GetProperties() + .Where(p => p.GetCustomAttributes(typeof(BoKey), false).Length > 0) + .OrderBy(ap => ap.GetCustomAttribute()?.Order) + .ToList(); } /// BO4E Business Objects are considered equal iff all of their elements/fields are equal. @@ -397,14 +398,14 @@ public override int GetHashCode() unchecked { result *= this.GetType().GetHashCode(); - foreach (FieldInfo field in this.GetType().GetFields()) + foreach (var prop in this.GetType().GetProperties()) { - if (field.GetValue(this) != null) + if (prop.GetValue(this) != null) { - if (field.GetValue(this).GetType().IsGenericType && field.GetValue(this).GetType().GetGenericTypeDefinition() == typeof(List<>)) + if (prop.GetValue(this).GetType().IsGenericType && prop.GetValue(this).GetType().GetGenericTypeDefinition() == typeof(List<>)) { - IEnumerable enumerable = field.GetValue(this) as IEnumerable; - Type listElementType = field.GetValue(this).GetType().GetGenericArguments()[0]; + IEnumerable enumerable = prop.GetValue(this) as IEnumerable; + Type listElementType = prop.GetValue(this).GetType().GetGenericArguments()[0]; Type listType = typeof(List<>).MakeGenericType(listElementType); int index = 0; foreach (object listItem in enumerable) @@ -418,7 +419,7 @@ public override int GetHashCode() { // Using + 19 because the default hash code of uninitialised enums is zero. // This would screw up the calculation such that all objects with at least one null value had the same hash code, namely 0. - result *= 19 + field.GetValue(this).GetHashCode(); + result *= 19 + prop.GetValue(this).GetHashCode(); } } } @@ -427,15 +428,15 @@ public override int GetHashCode() } /// - /// converts to upper case. + /// converts to upper case. /// /// [OnDeserialized] protected void DeserializationFixes(StreamingContext context) { - if (boTyp != null) + if (BoTyp != null) { - this.boTyp = boTyp.ToUpper(); + this.BoTyp = BoTyp.ToUpper(); } } diff --git a/BO4E-dotnet/BO/Energiemenge.cs b/BO4E-dotnet/BO/Energiemenge.cs index fbcc7341..6215cb4b 100644 --- a/BO4E-dotnet/BO/Energiemenge.cs +++ b/BO4E-dotnet/BO/Energiemenge.cs @@ -4,11 +4,14 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using System.Runtime.Serialization; + using BO4E.COM; using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; using Newtonsoft.Json.Linq; + using ProtoBuf; namespace BO4E.BO @@ -23,29 +26,29 @@ public class Energiemenge : BusinessObject /// Eindeutige Nummer der Marktlokation bzw. der Messlokation, zu der die Energiemenge gehört /// [DefaultValue("|null|")] - [JsonProperty(Required = Required.Always, Order = 4)] + [JsonProperty(PropertyName = "lokationsId", Required = Required.Always, Order = 4)] [ProtoMember(4)] [DataCategory(DataCategory.POD)] [BoKey] - public string lokationsId; + public string LokationsId { get; set; } /// /// Gibt an, ob es sich um eine Markt- oder Messlokation handelt. /// /// - [JsonProperty(Required = Required.Always, Order = 5)] + [JsonProperty(PropertyName = "lokationsTyp", Required = Required.Always, Order = 5)] [ProtoMember(5)] [DataCategory(DataCategory.POD)] - public Lokationstyp lokationstyp; + public Lokationstyp LokationsTyp { get; set; } /// /// Gibt den in einer Zeiteinheit an. /// - [JsonProperty(Order = 6)] + [JsonProperty(Order = 6, PropertyName = "energieverbrauch")] [ProtoMember(6)] [DataCategory(DataCategory.METER_READING)] [MinLength(1)] - public List energieverbrauch; + public List Energieverbrauch { get; set; } /// /// If energieverbrauch is null or not present, it is initialised with an empty list for easier handling (less null checks) elsewhere. @@ -54,18 +57,18 @@ public class Energiemenge : BusinessObject [OnDeserialized] protected void OnDeserialized(StreamingContext context) { - if (energieverbrauch == null) + if (Energieverbrauch == null) { - energieverbrauch = new List(); + Energieverbrauch = new List(); } - else if (energieverbrauch.Count > 0) + else if (Energieverbrauch.Count > 0) { - energieverbrauch = energieverbrauch + Energieverbrauch = Energieverbrauch .Select(v => Verbrauch.FixSapCdsBug(v)) - .Where(v => !(v.startdatum == DateTime.MinValue || v.enddatum == DateTime.MinValue)) - .Where(v => !(v.userProperties != null && v.userProperties.ContainsKey("invalid") && (bool)v.userProperties["invalid"] == true)) + .Where(v => !(v.Startdatum == DateTime.MinValue || v.Enddatum == DateTime.MinValue)) + .Where(v => !(v.UserProperties != null && v.UserProperties.ContainsKey("invalid") && (bool)v.UserProperties["invalid"] == true)) .ToList(); - if (userProperties != null && userProperties.TryGetValue(Verbrauch._SAP_PROFDECIMALS_KEY, out JToken profDecimalsRaw)) + if (UserProperties != null && UserProperties.TryGetValue(Verbrauch._SAP_PROFDECIMALS_KEY, out JToken profDecimalsRaw)) { var profDecimals = profDecimalsRaw.Value(); if (profDecimals > 0) @@ -73,13 +76,13 @@ protected void OnDeserialized(StreamingContext context) for (int i = 0; i < profDecimals; i++) { // or should I import math.pow() for this purpose? - foreach (Verbrauch v in energieverbrauch.Where(v => v.userProperties == null || !v.userProperties.ContainsKey(Verbrauch._SAP_PROFDECIMALS_KEY))) + foreach (Verbrauch v in Energieverbrauch.Where(v => v.UserProperties == null || !v.UserProperties.ContainsKey(Verbrauch._SAP_PROFDECIMALS_KEY))) { - v.wert /= 10.0M; + v.Wert /= 10.0M; } } } - userProperties.Remove(Verbrauch._SAP_PROFDECIMALS_KEY); + UserProperties.Remove(Verbrauch._SAP_PROFDECIMALS_KEY); } } } @@ -94,53 +97,53 @@ protected void OnDeserialized(StreamingContext context) /// new Energiemenge object public static Energiemenge operator +(Energiemenge em1, Energiemenge em2) { - if (em1.lokationsId != em2.lokationsId || em1.lokationstyp != em2.lokationstyp || em1.versionStruktur != em2.versionStruktur) + if (em1.LokationsId != em2.LokationsId || em1.LokationsTyp != em2.LokationsTyp || em1.versionStruktur != em2.versionStruktur) { - throw new InvalidOperationException($"You must not add the Energiemengen with different locations {em1.lokationsId} ({em1.lokationstyp}) (v{em1.versionStruktur}) vs. {em2.lokationsId} ({em2.lokationstyp}) (v{em2.versionStruktur})"); + throw new InvalidOperationException($"You must not add the Energiemengen with different locations {em1.LokationsId} ({em1.LokationsTyp}) (v{em1.versionStruktur}) vs. {em2.LokationsId} ({em2.LokationsTyp}) (v{em2.versionStruktur})"); } Energiemenge result = new Energiemenge() { - lokationsId = em1.lokationsId, - lokationstyp = em1.lokationstyp, + LokationsId = em1.LokationsId, + LokationsTyp = em1.LokationsTyp, versionStruktur = em1.versionStruktur, }; - if (em1.userProperties == null) + if (em1.UserProperties == null) { - result.userProperties = em2.userProperties; + result.UserProperties = em2.UserProperties; } - else if (em2.userProperties == null) + else if (em2.UserProperties == null) { - result.userProperties = em1.userProperties; + result.UserProperties = em1.UserProperties; } else { // there's no consistency check on user properties! - result.userProperties = new Dictionary(); - foreach (var kvp1 in em1.userProperties) + result.UserProperties = new Dictionary(); + foreach (var kvp1 in em1.UserProperties) { - result.userProperties.Add(kvp1); + result.UserProperties.Add(kvp1); } - foreach (var kvp2 in em2.userProperties) + foreach (var kvp2 in em2.UserProperties) { - if (!result.userProperties.ContainsKey(kvp2.Key)) + if (!result.UserProperties.ContainsKey(kvp2.Key)) { - result.userProperties.Add(kvp2); + result.UserProperties.Add(kvp2); } } } - if (em1.energieverbrauch == null || em1.energieverbrauch.Count == 0) + if (em1.Energieverbrauch == null || em1.Energieverbrauch.Count == 0) { - result.energieverbrauch = em2.energieverbrauch; + result.Energieverbrauch = em2.Energieverbrauch; } - else if (em2.energieverbrauch == null || em2.energieverbrauch.Count == 0) + else if (em2.Energieverbrauch == null || em2.Energieverbrauch.Count == 0) { - result.energieverbrauch = em1.energieverbrauch; + result.Energieverbrauch = em1.Energieverbrauch; } else { - result.energieverbrauch = new List(); - result.energieverbrauch.AddRange(em1.energieverbrauch); - result.energieverbrauch.AddRange(em2.energieverbrauch); + result.Energieverbrauch = new List(); + result.Energieverbrauch.AddRange(em1.Energieverbrauch); + result.Energieverbrauch.AddRange(em2.Energieverbrauch); } return result; } diff --git a/BO4E-dotnet/BO/Geschaeftspartner.cs b/BO4E-dotnet/BO/Geschaeftspartner.cs index d47b5f6e..c5d7ea2f 100644 --- a/BO4E-dotnet/BO/Geschaeftspartner.cs +++ b/BO4E-dotnet/BO/Geschaeftspartner.cs @@ -1,9 +1,12 @@ using System; using System.Collections.Generic; + using BO4E.COM; using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.BO @@ -20,113 +23,113 @@ namespace BO4E.BO public class Geschaeftspartner : BusinessObject { /// Die Anrede für den GePa, Z.B. Herr. - [JsonProperty(Required = Required.Default, Order = 4)] + [JsonProperty(Required = Required.Default, Order = 4, PropertyName = "anrede")] [ProtoMember(4)] [FieldName("salutation", Language.EN)] - public Anrede? anrede; + public Anrede? anrede { get; set; } /// /// title of name /// /// Dr. - [JsonProperty(Required = Required.Default, Order = 5)] + [JsonProperty(Required = Required.Default, Order = 5, PropertyName = "title")] [ProtoMember(1001)] - [Obsolete("Please use anrede instead or Ansprechpartner.individuelleAnrede")] + [Obsolete("Please use anrede instead or Ansprechpartner.individuelleAnrede", true)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public string title; + public string Title { get; set; } /// /// Erster Teil des Namens. Hier kann der Firmenname oder bei Privatpersonen /// beispielsweise der Nachname dargestellt werden. Beispiele: Yellow Strom GmbH /// oder Hagen /// - [JsonProperty(Required = Required.Default, Order = 6)] + [JsonProperty(Required = Required.Default, Order = 6, PropertyName = "name1")] [ProtoMember(6)] [DataCategory(DataCategory.NAME)] [BoKey] - public string name1; + public string Name1 { get; set; } /// /// Zweiter Teil des Namens. Hier kann der eine Erweiterung zum Firmennamen oder /// bei Privatpersonen beispielsweise der Vorname dargestellt werden. Beispiele: /// Bereich Süd oder Nina /// - [JsonProperty(Required = Required.Default, Order = 7)] + [JsonProperty(Required = Required.Default, Order = 7, PropertyName = "name2")] [ProtoMember(7)] [DataCategory(DataCategory.NAME)] - public string name2; + public string Name2 { get; set; } /// /// Dritter Teil des Namens. Hier können weitere Ergänzungen zum Firmennamen oder /// bei Privatpersonen Zusätze zum Namen dargestellt werden. Beispiele: und Afrika /// oder Sängerin /// - [JsonProperty(Required = Required.Default, Order = 8)] + [JsonProperty(Required = Required.Default, Order = 8, PropertyName = "name3")] [ProtoMember(8)] [DataCategory(DataCategory.NAME)] - public string name3; + public string Name3 { get; set; } /// /// Kennzeichnung ob es sich um einen Gewerbe/Unternehmen (gewerbeKennzeichnung = true) /// oder eine Privatperson handelt. (gewerbeKennzeichnung = false) /// - [JsonProperty(Required = Required.Always, Order = 9)] + [JsonProperty(Required = Required.Always, Order = 9, PropertyName = "gewerbekennzeichnung")] [ProtoMember(9)] [FieldName("isCommercial", Language.EN)] - public bool gewerbekennzeichnung; + public bool Gewerbekennzeichnung { get; set; } /// Handelsregisternummer des Geschäftspartners - [JsonProperty(Required = Required.Default, Order = 10)] + [JsonProperty(Required = Required.Default, Order = 10, PropertyName = "hrnummer")] [ProtoMember(10)] [DataCategory(DataCategory.LEGAL)] - public string hrnummer; + public string Hrnummer { get; set; } /// Amtsgericht bzw Handelsregistergericht, das die Handelsregisternummer herausgegeben hat - [JsonProperty(Required = Required.Default, Order = 11)] + [JsonProperty(Required = Required.Default, Order = 11, PropertyName = "amtsgericht")] [ProtoMember(11)] [DataCategory(DataCategory.LEGAL)] - public string amtsgericht; + public string Amtsgericht { get; set; } /// Bevorzugter Kontaktweg des Geschäftspartners. - [JsonProperty(Required = Required.Default, Order = 12)] + [JsonProperty(Required = Required.Default, Order = 12, PropertyName = "kontaktweg")] [ProtoMember(12)] - public List kontaktweg; + public List Kontaktweg { get; set; } /// Die Steuer-ID des Geschäftspartners. Beispiel: DE 813281825 - [JsonProperty(Required = Required.Default, Order = 13)] + [JsonProperty(Required = Required.Default, Order = 13, PropertyName = "umsatzsteuerId")] [ProtoMember(13)] [DataCategory(DataCategory.LEGAL)] - public string umsatzsteuerId; + public string UmsatzsteuerId { get; set; } /// * Die Gläubiger-ID welche im Zahlungsverkehr verwendet wird- Z.B. DE 47116789 - [JsonProperty(Required = Required.Default, Order = 14)] + [JsonProperty(Required = Required.Default, Order = 14, PropertyName = "glaeubigerId")] [ProtoMember(14)] [DataCategory(DataCategory.FINANCE)] - public string glaeubigerId; + public string GlaeubigerId { get; set; } /// E-Mail-Adresse des Ansprechpartners. Z.B. info@mp-energie.de - [JsonProperty(Required = Required.Default, Order = 15)] + [JsonProperty(Required = Required.Default, Order = 15, PropertyName = "eMailAdresse")] [ProtoMember(15)] [DataCategory(DataCategory.ADDRESS)] - public string eMailAdresse; + public string EMailAdresse { get; set; } /// Internetseite des Marktpartners. Beispiel: www.mp-energie.de - [JsonProperty(Required = Required.Default, Order = 16)] + [JsonProperty(Required = Required.Default, Order = 16, PropertyName = "website")] [ProtoMember(16)] [DataCategory(DataCategory.ADDRESS)] - public string website; + public string Website { get; set; } /// Rolle, die der Geschäftspartner hat (z.B. Interessent, Kunde). - [JsonProperty(Required = Required.Default, Order = 17)] // ToDo: it's actually required but I need it to work quickly + [JsonProperty(Required = Required.Default, Order = 17, PropertyName = "geschaeftspartnerrolle")] // ToDo: it's actually required but I need it to work quickly [FieldName("role", Language.EN)] [ProtoMember(17)] - public List geschaeftspartnerrolle; + public List Geschaeftspartnerrolle { get; set; } /// Adresse des Geschäftspartners, an der sich der Hauptsitz befindet. Details - [JsonProperty(Required = Required.Default, Order = 18)] + [JsonProperty(Required = Required.Default, Order = 18, PropertyName = "partneradresse")] [ProtoMember(18)] [FieldName("partnerAddress", Language.EN)] - public Adresse partneradresse; + public Adresse Partneradresse { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/BO/Kosten.cs b/BO4E-dotnet/BO/Kosten.cs index 8fd1fa0b..4bc1e867 100644 --- a/BO4E-dotnet/BO/Kosten.cs +++ b/BO4E-dotnet/BO/Kosten.cs @@ -1,9 +1,12 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; + using BO4E.COM; using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.BO @@ -15,45 +18,44 @@ namespace BO4E.BO public class Kosten : BusinessObject { /// - /// Klasse der Kosten, beispielsweise Fremdkosten. Details siehe + /// Klasse der Kosten, beispielsweise Fremdkosten. Details siehe /// - [JsonProperty(Required = Required.Always, Order = 4)] + [JsonProperty(Required = Required.Always, Order = 4, PropertyName = "kostenklasse")] [ProtoMember(4)] [DataCategory(DataCategory.FINANCE)] - public Kostenklasse kostenklasse; + public Kostenklasse Kostenklasse { get; set; } /// /// Für diesen Zeitraum wurden die Kosten ermittelt. Details siehe /// - [JsonProperty(Required = Required.Always, Order = 5)] + [JsonProperty(Required = Required.Always, Order = 5, PropertyName = "gueltigkeit")] [ProtoMember(5)] [DataCategory(DataCategory.FINANCE)] - public Zeitraum gueltigkeit; + public Zeitraum Gueltigkeit { get; set; } /// /// Die Gesamtsumme über alle Kostenblöcke und -positionen. Details siehe /// - [JsonProperty(Required = Required.Default, Order = 6)] + [JsonProperty(Required = Required.Default, Order = 6, PropertyName = "summeKosten")] [ProtoMember(6)] [DataCategory(DataCategory.FINANCE)] - // ToDo: handle this as DateTime object that serializes without the "time" in "DateTime" - public List summeKosten; + public List SummeKosten { get; set; } /// /// Eine Liste mit Kostenblöcken. In Kostenblöcken werden Kostenpositionen zusammengefasst. Beispiele: Netzkosten, Umlagen, Steuern etc. Details siehe /// - [JsonProperty(Required = Required.Always, Order = 7)] // at least 1 entry + [JsonProperty(Required = Required.Always, Order = 7, PropertyName = "kostenbloecke")] // at least 1 entry [ProtoMember(7)] [MinLength(1)] - public List kostenbloecke; + public List Kostenbloecke { get; set; } /// /// Hier sind die Details zu einer Kostenposition aufgeführt. Z.B.: /// Alliander Netz Heinsberg GmbH, 01.02.2018, 31.12.2018, Arbeitspreis HT, 3.660 kWh, 5,8200 ct/kWh, 213,01 €. Details siehe COM Kostenposition /// - [JsonProperty(Required = Required.Default, Order = 8)] + [JsonProperty(Required = Required.Default, Order = 8, PropertyName = "kostenpositionen")] [ProtoMember(8)] [DataCategory(DataCategory.FINANCE)] - public List kostenpositionen; + public List Kostenpositionen { get; set; } } } diff --git a/BO4E-dotnet/BO/LogObject/LogObject.cs b/BO4E-dotnet/BO/LogObject/LogObject.cs index e84ccceb..6c0ea509 100644 --- a/BO4E-dotnet/BO/LogObject/LogObject.cs +++ b/BO4E-dotnet/BO/LogObject/LogObject.cs @@ -1,6 +1,9 @@ using System; + using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.BO @@ -12,22 +15,22 @@ public class LogObject : BusinessObject /// unique id of the log event /// [BoKey] - [JsonProperty(Required = Required.Always, Order = 4)] + [JsonProperty(Required = Required.Always, Order = 4, PropertyName = "id")] [ProtoMember(4)] - public string id; + public string Id { get; set; } /// /// date time at which the log event has been raised /// - [JsonProperty(Required = Required.Always, Order = 5)] + [JsonProperty(Required = Required.Always, Order = 5, PropertyName = "datetime")] [ProtoMember(5)] - public DateTime datetime; + public DateTime Datetime { get; set; } /// /// actual log message /// - [JsonProperty(Required = Required.Always, Order = 6)] + [JsonProperty(Required = Required.Always, Order = 6, PropertyName = "logMessage")] [ProtoMember(6)] - public string logMessage; + public string LogMessage { get; set; } } } diff --git a/BO4E-dotnet/BO/Marktlokation.cs b/BO4E-dotnet/BO/Marktlokation.cs index 6e73a8dc..925de833 100644 --- a/BO4E-dotnet/BO/Marktlokation.cs +++ b/BO4E-dotnet/BO/Marktlokation.cs @@ -2,10 +2,13 @@ using System.Collections.Generic; using System.ComponentModel; using System.Text.RegularExpressions; + using BO4E.COM; using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.BO @@ -27,44 +30,44 @@ public class Marktlokation : BusinessObject /// verbraucht, oder erzeugt wird /// [DefaultValue("|null|")] - [JsonProperty(Required = Required.Always, Order = 4)] + [JsonProperty(Required = Required.Always, Order = 4, PropertyName = "marktlokationsId")] [DataCategory(DataCategory.POD)] [BoKey] [ProtoMember(4)] - public string marktlokationsId; + public string MarktlokationsId { get; set; } /// Sparte der Messlokation, z.B. Gas oder Strom. - [JsonProperty(Required = Required.Always, Order = 5)] + [JsonProperty(Required = Required.Always, Order = 5, PropertyName = "sparte")] [ProtoMember(5)] - public Sparte sparte; + public Sparte Sparte { get; set; } /// Kennzeichnung, ob Energie eingespeist oder entnommen (ausgespeist) wird. - [JsonProperty(Required = Required.Always, Order = 6)] + [JsonProperty(Required = Required.Always, Order = 6, PropertyName = "energierichtung")] [ProtoMember(6)] - public Energierichtung energierichtung; + public Energierichtung Energierichtung { get; set; } /// Kennzeichnung, ob Energie eingespeist oder entnommen (ausgespeist) wird. - [JsonProperty(Required = Required.Always, Order = 7)] + [JsonProperty(Required = Required.Always, Order = 7, PropertyName = "bilanzierungsmethode")] [ProtoMember(7)] - public Bilanzierungsmethode bilanzierungsmethode; + public Bilanzierungsmethode Bilanzierungsmethode { get; set; } /// Verbrauchsart der Marktlokation - [JsonProperty(Required = Required.Default, Order = 8)] + [JsonProperty(Required = Required.Default, Order = 8, PropertyName = "verbrauchsart")] [ProtoMember(8)] - public Verbrauchsart? verbrauchsart; + public Verbrauchsart? Verbrauchsart { get; set; } /// Gibt an, ob es sich um eine unterbrechbare Belieferung handelt. - [JsonProperty(Required = Required.Default, Order = 9)] + [JsonProperty(Required = Required.Default, Order = 9, PropertyName = "unterbrechbar")] [ProtoMember(9)] - public bool? unterbrechbar; + public bool? Unterbrechbar { get; set; } /// /// Netzebene, in der der Bezug der Energie erfolgt. Bei Strom Spannungsebene der /// Lieferung, bei Gas Druckstufe. Beispiel Strom: Niederspannung Beispiel Gas: /// Niederdruck. - /// - [JsonProperty(Required = Required.Always, Order = 10)] + /// + [JsonProperty(Required = Required.Always, Order = 10, PropertyName = "netzebene")] [ProtoMember(10)] - public Netzebene netzebene; + public Netzebene Netzebene { get; set; } /// /// Codenummer des Netzbetreibers, an dessen Netz diese Marktlokation @@ -72,119 +75,121 @@ public class Marktlokation : BusinessObject /// [JsonProperty(PropertyName = "netzbetreiberCodeNr", Required = Required.Default, Order = 11)] [ProtoMember(11)] - public string netzbetreibercodenr; + public string NetzbetreiberCodeNr { get; set; } /// Typ des Netzgebietes,z.B.Verteilnetz. /// https://github.com/Hochfrequenz/energy-service-hub/issues/11 [JsonProperty(PropertyName = "gebietTyp", Order = 12, Required = Required.Default)] [ProtoMember(12)] - public Gebiettyp? gebiettyp; + public Gebiettyp? GebietType { get; set; } /// Die Nummer des Netzgebietes in der ene't-Datenbank. [JsonProperty(PropertyName = "netzgebietNr", Order = 13, Required = Required.Default)] [ProtoMember(13)] - public string netzgebietnr; + public string NetzgebietNr { get; set; } /// Bilanzierungsgebiet, dem das Netzgebiet zugeordnet ist - im Falle eines Strom Netzes. - [JsonProperty(Required = Required.Default, Order = 14)] + [JsonProperty(Required = Required.Default, Order = 14, PropertyName = "bilanzierungsgebiet")] [ProtoMember(14)] - public string bilanzierungsgebiet; + public string Bilanzierungsgebiet { get; set; } /// CodeNummer des Grundversorgers, der für diese Marktlokation zuständig ist. [JsonProperty(PropertyName = "grundversorgerCodeNr", Order = 15, Required = Required.Default)] [ProtoMember(15)] - public string grundversorgercodenr; + public string GrundversorgerCodeNr { get; set; } - ///Die Gasqualität in diesem Netzgebiet. H-Gas oder L-Gas. Im Falle eines Gas-Netzes. */ - [JsonProperty(Required = Required.Default, Order = 16)] + ///Die Gasqualität in diesem Netzgebiet. H-Gas oder L-Gas. Im Falle eines Gas-Netzes. */ + [JsonProperty(Required = Required.Default, Order = 16, PropertyName = "gasqualitaet")] [ProtoMember(16)] - public Gasqualitaet? gasqualitaet; + public Gasqualitaet? Gasqualitaet { get; set; } /// Link zum Geschäftspartner, dem diese Marktlokation gehört. - [JsonProperty(Required = Required.Default, Order = 17, NullValueHandling = NullValueHandling.Ignore)] + [JsonProperty(Required = Required.Default, Order = 17, NullValueHandling = NullValueHandling.Ignore, PropertyName = "endkunde")] [ProtoMember(17)] - public Geschaeftspartner endkunde; + public Geschaeftspartner Endkunde { get; set; } /// Die Adresse, an der die Energie-Lieferung oder -Einspeisung erfolgt. */ [DataCategory(DataCategory.ADDRESS)] - [JsonProperty(Required = Required.Default, Order = 18)] + [JsonProperty(Required = Required.Default, Order = 18, PropertyName = "lokationsadresse")] [ProtoMember(18)] - public Adresse lokationsadresse; + public Adresse Lokationsadresse { get; set; } /// Alternativ zu einer postalischen Adresse kann hier ein Ort mittels Geokoordinaten angegeben werden (z.B. zur Identifikation von Sendemasten). */ [DataCategory(DataCategory.ADDRESS)] - [JsonProperty(Required = Required.Default, Order = 19)] + [JsonProperty(Required = Required.Default, Order = 19, PropertyName = "geoadresse")] [ProtoMember(19)] - public Geokoordinaten geoadresse; + public Geokoordinaten Geoadresse { get; set; } /// Alternativ zu einer postalischen Adresse und Geokoordinaten kann hier eine Ortsangabe mittels Gemarkung und Flurstück erfolgen. [DataCategory(DataCategory.ADDRESS)] - [JsonProperty(Required = Required.Default, Order = 20)] + [JsonProperty(Required = Required.Default, Order = 20, PropertyName = "katasterinformation")] [ProtoMember(20)] - public Katasteradresse katasterinformation; + public Katasteradresse Katasterinformation { get; set; } /// /// für EDIFACT mapping /// - // ToDo: specify docstring. - [JsonProperty(Required = Required.Default, Order = 21)] + // ToDo: specify docstring / evaluate if necessary + [JsonProperty(Required = Required.Default, Order = 21, PropertyName = "marktrollen")] [ProtoMember(1021)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public List marktrollen; + [Obsolete("I'm pretty sure the BO.Marktlokation is not the right place to store this information. Please evaluate!")] + public List Marktrollen { get; set; } // ToDo: evaluate this /// /// für EDIFACT mapping /// // ToDo: specify docstring. - [JsonProperty(Required = Required.Default, Order = 22)] + [JsonProperty(Required = Required.Default, Order = 22, PropertyName = "regelzone")] [ProtoMember(1022)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public string regelzone; + public string Regelzone { get; set; } /// /// für EDIFACT mapping /// // ToDo: specify docstring. - [JsonProperty(Required = Required.Default, Order = 23)] + [JsonProperty(Required = Required.Default, Order = 23, PropertyName = "marktgebiet")] [ProtoMember(1023)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public string marktgebiet; + public string Marktgebiet { get; set; } /// /// für EDIFACT mapping /// // ToDo: specify docstring. - [JsonProperty(Required = Required.Default, Order = 24)] + [JsonProperty(Required = Required.Default, Order = 24, PropertyName = "zeitreihentyp")] [ProtoMember(1024)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public Zeitreihentyp? zeitreihentyp; + public Zeitreihentyp? Zeitreihentyp { get; set; } /// /// für EDIFACT mapping /// // ToDo: specify docstring. - [JsonProperty(Required = Required.Default, Order = 25)] + [JsonProperty(Required = Required.Default, Order = 25, PropertyName = "zaehlwerke")] [ProtoMember(1025)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public List zaehlwerke; + public List Zaehlwerke { get; set; } /// /// für EDIFACT mapping /// - // ToDo: specify docstring. - [JsonProperty(Required = Required.Default, Order = 26)] + // ToDo: specify docstring / check if needed + [JsonProperty(Required = Required.Default, Order = 26, PropertyName = "verbrauchsmenge")] [ProtoMember(1026)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public List verbauchsmenge; + [Obsolete("Consider if this is really the right place to store the information. I think Energiemenge->energieverbrauch is better suited.")] + public List Verbrauchsmenge { get; set; } /// /// für EDIFACT mapping /// // ToDo: specify docstring. - [JsonProperty(Required = Required.Default, Order = 27)] + [JsonProperty(Required = Required.Default, Order = 27, PropertyName = "messlokationen")] [ProtoMember(1027)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public List messlokationen; + public List Messlokationen { get; set; } /// Aufzählung der Messlokationen, die zu dieser Marktlokation gehören. /// Es können 3 verschiedene Konstrukte auftreten: @@ -209,9 +214,9 @@ public class Marktlokation : BusinessObject /// einer Messlokation zum Verbrauch einer Marktlokation beitrögt mit aufgeführt. /// Der Standard ist hier die Addition. [DataCategory(DataCategory.POD)] - [JsonProperty(Required = Required.Default, Order = 28)] + [JsonProperty(Required = Required.Default, Order = 28, PropertyName = "zugehoerigeMesslokationen")] [ProtoMember(28)] - public List zugehoerigeMesslokationen; + public List ZugehoerigeMesslokationen { get; set; } /// @@ -295,7 +300,7 @@ public static string GetChecksum(string input) /// if marktlokaionsId matches the expected format public bool HasValidId() { - return ValidateId(this.marktlokationsId); + return ValidateId(this.MarktlokationsId); } /// diff --git a/BO4E-dotnet/BO/Marktteilnehmer.cs b/BO4E-dotnet/BO/Marktteilnehmer.cs index 0405d39f..f7c06e8f 100644 --- a/BO4E-dotnet/BO/Marktteilnehmer.cs +++ b/BO4E-dotnet/BO/Marktteilnehmer.cs @@ -1,7 +1,7 @@ using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; -using ProtoBuf; namespace BO4E.BO { @@ -13,35 +13,35 @@ namespace BO4E.BO public class Marktteilnehmer : Geschaeftspartner { /// Gibt im Klartext die Bezeichnung der Marktrolle an. - [JsonProperty(Required = Required.Always, Order = 19)] + [JsonProperty(Required = Required.Always, Order = 19, PropertyName = "marktrolle")] //[ProtoMember(19)] - public Marktrolle marktrolle; + public Marktrolle Marktrolle { get; set; } /// Gibt die Codenummer der Marktrolle an. [BoKey(true)] - [JsonProperty(Required = Required.Always, Order = 20)] + [JsonProperty(Required = Required.Always, Order = 20, PropertyName = "rollencodenummer")] //[ProtoMember(20)] - public string rollencodenummer; + public string Rollencodenummer { get; set; } /// Gibt den Typ des Codes an. - [JsonProperty(Required = Required.Always, Order = 21)] + [JsonProperty(Required = Required.Always, Order = 21, PropertyName = "rollencodetyp")] //[ProtoMember(21)] - public Rollencodetyp rollencodetyp; + public Rollencodetyp Rollencodetyp { get; set; } /// /// Die 1:1-Kommunikationsadresse des Marktteilnehmers. Diese wird in der /// Marktkommunikation verwendet. /// - [JsonProperty(Required = Required.Always, Order = 22)] + [JsonProperty(Required = Required.Always, Order = 22, PropertyName = "makoadresse")] //[ProtoMember(22)] - public string makoadresse; + public string Makoadresse { get; set; } /// /// Ansprechpartner as in EDIFACT NAD+MS, that includes e.g. the email address of a natural person. /// [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - [JsonProperty(Required = Required.Default, Order = 23)] + [JsonProperty(Required = Required.Default, Order = 23, PropertyName = "ansprechpartner")] //[ProtoMember(23)] - public Ansprechpartner ansprechpartner; + public Ansprechpartner Ansprechpartner { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/BO/Messlokation.cs b/BO4E-dotnet/BO/Messlokation.cs index 7bb9e308..71f7dafa 100644 --- a/BO4E-dotnet/BO/Messlokation.cs +++ b/BO4E-dotnet/BO/Messlokation.cs @@ -2,10 +2,13 @@ using System.Collections.Generic; using System.ComponentModel; using System.Text.RegularExpressions; + using BO4E.COM; using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.BO @@ -25,132 +28,134 @@ public class Messlokation : BusinessObject /// Die Messlokations-Identifikation. Das ist die frühere Zählpunktbezeichnung, /// z.B. DE 47108151234567 [DefaultValue("|null|")] - [JsonProperty(PropertyName = "messLokationsId", Required = Required.Always, Order = 4)] + [JsonProperty(PropertyName = "messlokationsId", Required = Required.Always, Order = 4)] [DataCategory(DataCategory.POD)] [BoKey] [ProtoMember(4)] - public string messlokationsId; + public string MesslokationsId { get; set; } /// * Sparte der Messlokation, z.B. Gas oder Strom. - /// - [JsonProperty(Required = Required.Always, Order = 5)] + /// + [JsonProperty(PropertyName = "sparte", Required = Required.Always, Order = 5)] [ProtoMember(5)] - public Sparte sparte; + public Sparte Sparte { get; set; } /// Spannungsebene der Messung. - [JsonProperty(Required = Required.Default, Order = 6)] //explicitly set NOT required. + [JsonProperty(PropertyName = "netzebeneMessung", Required = Required.Default, Order = 6)] //explicitly set NOT required. [ProtoMember(6)] - public Netzebene? netzebeneMessung; + + public Netzebene? NetzebeneMessung { get; set; } /// Die Nummer des Messgebietes in der ene't-Datenbank. - [JsonProperty(Required = Required.Default, Order = 7)] + [JsonProperty(PropertyName = "messgebietNr", Required = Required.Default, Order = 7)] [ProtoMember(7)] - public string messgebietNr; + public string MessgebietNr { get; set; } /// Codenummer des grundzuständigen Messstellenbetreibers, der für diese /// Messlokation zuständig ist.( Dieser ist immer dann Messstellenbetreiber, wenn /// kein anderer MSB die Einrichtungen an der Messlokation betreibt.) - [JsonProperty(Required = Required.Default, Order = 8)] + [JsonProperty(PropertyName = "grundzustaendigerMSBCodeNr", Required = Required.Default, Order = 8)] [ProtoMember(8)] - public string grundzustaendigerMSBCodeNr; + public string GrundzustaendigerMSBCodeNr { get; set; } /// Codenummer des grundzuständigen Messstellenbetreibers für intelligente /// Messsysteme der für diese Messlokation zuständig ist.(Dieser ist immer dann /// Messstellenbetreiber, wenn kein anderer MSB die Einrichtungen an der /// Messlokation betreibt.) - [JsonProperty(Required = Required.Default, Order = 9)] + [JsonProperty(PropertyName = "grundzustaendigerMSBIMCodeNr", Required = Required.Default, Order = 9)] [ProtoMember(9)] - public string grundzustaendigerMSBIMCodeNr;// grundzustaendigerMSB_IMCodenr; https://github.com/Hochfrequenz/energy-service-hub/issues/11 + public string GrundzustaendigerMSBIMCodeNr { get; set; }// grundzustaendigerMSB_IMCodenr; https://github.com/Hochfrequenz/energy-service-hub/issues/11 /// Codenummer des Messdienstleisters, der für diese Messlokation zuständig /// ist.( Dieser ist immer dann Messdienstleister, wenn kein anderer MDL die /// Messlokation abliest.) /// - [JsonProperty(PropertyName = "grundzustaendigerMDLodeNr", Order = 10, Required = Required.Default)] + [JsonProperty(PropertyName = "grundzustaendigerMDLCodeNr", Order = 10, Required = Required.Default)] [NonOfficial(NonOfficialCategory.PROPOSED_DELETION)] [ProtoMember(10)] [Obsolete("MDL is deprecated.", true)] - public string grundzustaendigerMDLCodeNr; + public string GrundzustaendigerMDLCodeNr { get; set; } /// Die Adresse, an der die Messeinrichtungen zu finden sind.( Nur angeben, wenn /// diese von der Adresse der Marktlokation abweicht.) /// Achtung: Es darf immer nur eine Art der Ortsangabe vorhanden sein (entweder /// eine Adresse oder eine GeoKoordinate oder eine Katasteradresse. /// - [JsonProperty(Required = Required.Default, Order = 11)] + [JsonProperty(PropertyName = "messadresse", Required = Required.Default, Order = 11)] [DataCategory(DataCategory.ADDRESS)] [ProtoMember(11)] - public Adresse messadresse; + public Adresse Messadresse { get; set; } /// Alternativ zu einer postalischen Adresse kann hier ein Ort mittels /// Geokoordinaten angegeben werden (z.B. zur Identifikation von Sendemasten). /// Achtung: Es darf immer nur eine Art der Ortsangabe vorhanden sein (entweder /// eine Adresse oder eine GeoKoordinate oder eine Katasteradresse. - [JsonProperty(Required = Required.Default, Order = 12)] + [JsonProperty(PropertyName = "geoadresse", Required = Required.Default, Order = 12)] [DataCategory(DataCategory.ADDRESS)] [ProtoMember(12)] - public Geokoordinaten geoadresse; + public Geokoordinaten Geoadresse { get; set; } /// Alternativ zu einer postalischen Adresse und Geokoordinaten kann hier eine /// Ortsangabe mittels Gemarkung und Flurstück erfolgen. /// Achtung: Es darf immer nur eine Art der Ortsangabe vorhanden sein (entweder /// eine Adresse oder eine GeoKoordinate oder eine Katasteradresse. */ - [JsonProperty(Required = Required.Default, Order = 13)] + [JsonProperty(PropertyName = "katasterinformation", Required = Required.Default, Order = 13)] [ProtoMember(13)] [DataCategory(DataCategory.ADDRESS)] - public Katasteradresse katasterinformation; + public Katasteradresse Katasterinformation { get; set; } /// Liste der Hardware, die zu dieser Messstelle gehört. - [JsonProperty(Required = Required.Default, Order = 14)] + [JsonProperty(PropertyName = "geraete", Required = Required.Default, Order = 14)] [ProtoMember(14)] - public List geraete; + public List Geraete { get; set; } /// Liste der Messdienstleistungen, die zu dieser Messstelle gehört. - [JsonProperty(Required = Required.Default, Order = 15)] + [JsonProperty(PropertyName = "messdienstleistung", Required = Required.Default, Order = 15)] [ProtoMember(15)] - public List messdienstleistung; + public List Messdienstleistung { get; set; } /// Zähler, die zu dieser Messlokation gehören. Details - [JsonProperty(Required = Required.Default, Order = 16)] + [JsonProperty(PropertyName = "messlokationszaehler", Required = Required.Default, Order = 16)] [ProtoMember(16)] - public List messlokationszaehler; + public List Messlokationszaehler { get; set; } /// - /// + /// /// - [JsonProperty(Required = Required.Default, Order = 17)] + [JsonProperty(PropertyName = "bilanzierungsmethode", Required = Required.Default, Order = 17)] [ProtoMember(17)] - public Bilanzierungsmethode? bilanzierungsmethode; + public Bilanzierungsmethode? Bilanzierungsmethode { get; set; } /// Dieser Wert ist true, falls die Abrechnungs des Messstellenbetriebs die Netznutzungsabrechnung enthält. false andernfalls - [JsonProperty(Required = Required.Default, Order = 18)] + [JsonProperty(PropertyName = "abrechnungmessstellenbetriebnna", Required = Required.Default, Order = 18)] [ProtoMember(1018)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public bool? abrechnungmessstellenbetriebnna; + public bool? Abrechnungmessstellenbetriebnna { get; set; } /// /// marktrollen für EDIFACT mapping /// - [JsonProperty(Required = Required.Default, Order = 19)] + [JsonProperty(Required = Required.Default, Order = 19, PropertyName = "marktrollen")] [ProtoMember(1019)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public List marktrollen; + [Obsolete("This isn't the right place for this information")] // ToDo: check + public List Marktrollen { get; set; } /// /// gasqualitaet für EDIFACT mapping /// - [JsonProperty(Required = Required.Default, Order = 20, NullValueHandling = NullValueHandling.Ignore)] + [JsonProperty(PropertyName = "gasqualitaet", Required = Required.Default, Order = 20, NullValueHandling = NullValueHandling.Ignore)] [ProtoMember(1020)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public Gasqualitaet? gasqualitaet; + public Gasqualitaet? Gasqualitaet { get; set; } /// /// verlustfaktor für EDIFACT mapping /// // ToDo: so does this mean that a factor of 0.0M has no losses? - [JsonProperty(Required = Required.Default, Order = 21)] + [JsonProperty(PropertyName = "verlustfaktor", Required = Required.Default, Order = 21)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1021)] - public decimal? verlustfaktor; + public decimal? Verlustfaktor { get; set; } [JsonIgnore] private static readonly Regex REGEX_VALIDATE = new Regex(@"[A-Z\d]{33}", RegexOptions.Compiled); @@ -170,18 +175,18 @@ public static bool ValidateId(string id) } /// - /// Test if the is valid. + /// Test if the is valid. /// /// if messlokationsId matches the expected format public bool HasValidId() { - return ValidateId(this.messlokationsId); + return ValidateId(this.MesslokationsId); } /// - /// same as if is false but by default additionally checks if the is valid using . + /// same as if is false but by default additionally checks if the is valid using . /// - /// validate the , too + /// validate the , too /// true if the marktlokation is valid public bool IsValid(bool checkId = true) { diff --git a/BO4E-dotnet/BO/Preisblatt.cs b/BO4E-dotnet/BO/Preisblatt.cs index b097f457..f5fcbcb9 100644 --- a/BO4E-dotnet/BO/Preisblatt.cs +++ b/BO4E-dotnet/BO/Preisblatt.cs @@ -1,8 +1,10 @@ using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; + using BO4E.COM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.BO @@ -22,34 +24,34 @@ public class Preisblatt : BusinessObject /// /// Eine Bezeichnung für das Preisblatt. /// - [JsonProperty(Required = Required.Always, Order = 4)] + [JsonProperty(Required = Required.Always, Order = 4, PropertyName = "bezeichnung")] [ProtoMember(4)] [DataCategory(DataCategory.FINANCE)] [BoKey] - public string bezeichnung; + public string Bezeichnung { get; set; } /// /// Der Zeitraum für den der Preis festgelegt ist. Details siehe /// - [JsonProperty(Required = Required.Always, Order = 5)] + [JsonProperty(Required = Required.Always, Order = 5, PropertyName = "gueltigkeit")] [ProtoMember(5)] [DataCategory(DataCategory.FINANCE)] - public Zeitraum gueltigkeit; + public Zeitraum Gueltigkeit { get; set; } /// /// Die einzelnen Positionen, die mit dem Preisblatt abgerechnet werden können. Z.B. Arbeitspreis, Grundpreis etc. Details siehe /// - [JsonProperty(Required = Required.Always, Order = 6)] // at least one entry + [JsonProperty(Required = Required.Always, Order = 6, PropertyName = "preispositionen")] // at least one entry [DataCategory(DataCategory.FINANCE)] [ProtoMember(6)] - public List preispositionen; + public List Preispositionen { get; set; } /*/// /// Staffelgrenzen der jeweiligen Preise. Details siehe /// [JsonProperty(Required = Required.Always, Order = 6)] // at least 1 entry [DataCategory(DataCategory.FINANCE)] - public List preisstaffeln;*/ + public List preisstaffeln { get;set; }*/ // https://github.com/Hochfrequenz/energy-service-hub/issues/11 } } diff --git a/BO4E-dotnet/BO/PreisblattDienstleistung.cs b/BO4E-dotnet/BO/PreisblattDienstleistung.cs index 8ac5afc3..bebb9283 100644 --- a/BO4E-dotnet/BO/PreisblattDienstleistung.cs +++ b/BO4E-dotnet/BO/PreisblattDienstleistung.cs @@ -1,6 +1,6 @@ using BO4E.ENUM; + using Newtonsoft.Json; -using ProtoBuf; namespace BO4E.BO { @@ -13,22 +13,22 @@ public class PreisblattDienstleistung : Preisblatt /// /// Hier kann der Preis noch auf bestimmte Dienstleistungsbereiche eingegrenzt werden. Z.B. Sperrung/Entsperrung. /// - [JsonProperty(Required = Required.Always, Order = 7)] + [JsonProperty(Required = Required.Always, Order = 7, PropertyName = "dienstleistungsdetails")] //[ProtoMember(7)] - public Dienstleistungstyp dienstleistungsdetails; + public Dienstleistungstyp Dienstleistungsdetails { get; set; } /// /// Hier kann der Preis auf bestimmte Geräte eingegrenzt werden. Z.B. auf die Zählergröße. /// - [JsonProperty(Required = Required.Default, Order = 8)] + [JsonProperty(Required = Required.Default, Order = 8, PropertyName = "geraetedetails")] //[ProtoMember(8)] - public Bilanzierungsmethode? geraetedetails; + public Bilanzierungsmethode? Geraetedetails { get; set; } /// /// Der Netzbetreiber oder Messstellenbetreiber, der die Preise veröffentlicht hat. /// - [JsonProperty(Required = Required.Always, Order = 9)] + [JsonProperty(Required = Required.Always, Order = 9, PropertyName = "herausgeber")] //[ProtoMember(9)] - public Marktteilnehmer herausgeber; + public Marktteilnehmer Herausgeber { get; set; } } } diff --git a/BO4E-dotnet/BO/PreisblattKonzessionsabgabe.cs b/BO4E-dotnet/BO/PreisblattKonzessionsabgabe.cs index 97854d84..6d5b0b4a 100644 --- a/BO4E-dotnet/BO/PreisblattKonzessionsabgabe.cs +++ b/BO4E-dotnet/BO/PreisblattKonzessionsabgabe.cs @@ -1,6 +1,6 @@ using BO4E.ENUM; + using Newtonsoft.Json; -using ProtoBuf; namespace BO4E.BO { @@ -13,15 +13,15 @@ public class PreisblattKonzessionsabgabe : Preisblatt /// /// Sparte, auf die sich die KA bezieht. /// - [JsonProperty(Required = Required.Always, Order = 7)] + [JsonProperty(Required = Required.Always, Order = 7, PropertyName = "sparte")] //[ProtoMember(7)] - public Sparte sparte; + public Sparte sparte { get; set; } /// /// Kundegruppe anhand derer die Höhe der Konzessionsabgabe festgelegt ist. /// - [JsonProperty(Required = Required.Always, Order = 8)] + [JsonProperty(Required = Required.Always, Order = 8, PropertyName = "kundengruppeKA")] //[ProtoMember(8)] - public KundengruppeKA kundengruppeKA; + public KundengruppeKA KundengruppeKA { get; set; } } } diff --git a/BO4E-dotnet/BO/PreisblattMessung.cs b/BO4E-dotnet/BO/PreisblattMessung.cs index 107cb0bd..de5c7c2c 100644 --- a/BO4E-dotnet/BO/PreisblattMessung.cs +++ b/BO4E-dotnet/BO/PreisblattMessung.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; + using BO4E.COM; using BO4E.ENUM; + using Newtonsoft.Json; -using ProtoBuf; namespace BO4E.BO { @@ -15,50 +16,50 @@ public class PreisblattMessung : Preisblatt /// /// Preisblatt gilt für die angegebene Sparte. /// - [JsonProperty(Required = Required.Always, Order = 7)] + [JsonProperty(Required = Required.Always, Order = 7, PropertyName = "sparte")] //[ProtoMember(7)] - public Sparte sparte; + public Sparte Sparte { get; set; } /// /// Die Preise gelten für Marktlokationen der angegebenen Bilanzierungsmethode. /// - [JsonProperty(Required = Required.Always, Order = 8)] + [JsonProperty(Required = Required.Always, Order = 8, PropertyName = "bilanzierungsmethode")] //[ProtoMember(8)] - public Bilanzierungsmethode bilanzierungsmethode; + public Bilanzierungsmethode Bilanzierungsmethode { get; set; } /// /// Die Preise gelten für Messlokationen in der angegebenen Netzebene. /// - [JsonProperty(Required = Required.Always, Order = 9)] + [JsonProperty(Required = Required.Always, Order = 9, PropertyName = "messebene")] //[ProtoMember(9)] - public Netzebene messebene; + public Netzebene Messebene { get; set; } /// /// Im Preis sind die hier angegebenen Dienstleistungen enthalten. Z.B. Jährliche Ablesung. /// - [JsonProperty(Required = Required.Default, Order = 10)] + [JsonProperty(Required = Required.Default, Order = 10, PropertyName = "inklusiveDienstleistung")] //[ProtoMember(10)] - public List inklusiveDienstleistung; + public List InklusiveDienstleistung { get; set; } /// /// Der Preis betrifft das hier angegebene Geräte, z.B. einen Drehstromzähler. /// - [JsonProperty(Required = Required.Always, Order = 11)] + [JsonProperty(Required = Required.Always, Order = 11, PropertyName = "basisgeraet")] //[ProtoMember(11)] - public Geraeteeigenschaften basisgeraet; + public Geraeteeigenschaften Basisgeraet { get; set; } /// /// Im Preis sind die hier angegebenen Geräte mit enthalten, z.B. ein Wandler. /// - [JsonProperty(Required = Required.Default, Order = 12)] + [JsonProperty(Required = Required.Default, Order = 12, PropertyName = "inklusiveGeraete")] //[ProtoMember(12)] - public List inklusiveGeraete; + public List InklusiveGeraete { get; set; } /// /// Der Netzbetreiber oder Messstellenbetreiber, der die Preise veröffentlicht hat. /// - [JsonProperty(Required = Required.Always, Order = 13)] + [JsonProperty(Required = Required.Always, Order = 13, PropertyName = "herausgeber")] //[ProtoMember(13)] - public Marktteilnehmer herausgeber; + public Marktteilnehmer Herausgeber { get; set; } } } diff --git a/BO4E-dotnet/BO/PreisblattNetznutzung.cs b/BO4E-dotnet/BO/PreisblattNetznutzung.cs index 65039656..e6b515c4 100644 --- a/BO4E-dotnet/BO/PreisblattNetznutzung.cs +++ b/BO4E-dotnet/BO/PreisblattNetznutzung.cs @@ -13,36 +13,36 @@ public class PreisblattNetznutzung : Preisblatt /// /// Preisblatt gilt für angegebene Sparte. /// - [JsonProperty(Required = Required.Always, Order = 7)] + [JsonProperty(Required = Required.Always, Order = 7, PropertyName="sparte")] //[ProtoMember(7)] - public Sparte sparte; + public Sparte Sparte { get;set; } /// /// Die Preise gelten für Marktlokationen der angegebenen Bilanzierungsmethode. /// - [JsonProperty(Required = Required.Always, Order = 8)] + [JsonProperty(Required = Required.Always, Order = 8, PropertyName="bilanzierungsmethode")] //[ProtoMember(8)] - public Bilanzierungsmethode bilanzierungsmethode; + public Bilanzierungsmethode Bilanzierungsmethode { get;set; } /// /// Die Preise gelten für Marktlokationen in der angegebenen Netzebene. /// - [JsonProperty(Required = Required.Always, Order = 9)] + [JsonProperty(Required = Required.Always, Order = 9, PropertyName= "netzebene")] //[ProtoMember(9)] - public Netzebene netzebene; + public Netzebene Netzebene { get;set; } /// /// Hier wird die Kundengruppe, für die der Preis gilt mit angegeben. /// - [JsonProperty(Required = Required.Always, Order = 10)] + [JsonProperty(Required = Required.Always, Order = 10, PropertyName="kundengruppe")] //[ProtoMember(10)] - public Kundengruppe kundengruppe; + public Kundengruppe Kundengruppe { get;set; } /// /// Der Netzbetreiber oder Messstellenbetreiber, der die Preise veröffentlicht hat. /// - [JsonProperty(Required = Required.Always, Order = 11)] + [JsonProperty(Required = Required.Always, Order = 11, PropertyName="herausgeber")] //[ProtoMember(11)] - public Marktteilnehmer herausgeber; + public Marktteilnehmer Herausgeber { get;set; } } } diff --git a/BO4E-dotnet/BO/PreisblattUmlagen.cs b/BO4E-dotnet/BO/PreisblattUmlagen.cs index 847c4650..d971fae0 100644 --- a/BO4E-dotnet/BO/PreisblattUmlagen.cs +++ b/BO4E-dotnet/BO/PreisblattUmlagen.cs @@ -1,6 +1,6 @@ using BO4E.ENUM; + using Newtonsoft.Json; -using ProtoBuf; namespace BO4E.BO { @@ -13,8 +13,8 @@ public class PreisblattUmlagen : Preisblatt /// /// Sparte, auf die sich die Umlage bezieht. /// - [JsonProperty(Required = Required.Always, Order = 7)] + [JsonProperty(Required = Required.Always, Order = 7, PropertyName = "sparte")] //[ProtoMember(7)] - public Sparte sparte; + public Sparte Sparte { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/BO/Rechnung.cs b/BO4E-dotnet/BO/Rechnung.cs index 07d005b5..5f58b4e7 100644 --- a/BO4E-dotnet/BO/Rechnung.cs +++ b/BO4E-dotnet/BO/Rechnung.cs @@ -23,154 +23,154 @@ public class Rechnung : BusinessObject /// /// Bezeichnung für die vorliegende Rechnung. /// - [JsonProperty(Required = Required.Default, Order = 4)] + [JsonProperty(Required = Required.Default, Order = 4, PropertyName = "rechnungstitel")] [FieldName("billTitle", Language.EN)] [ProtoMember(4)] - public string rechnungstitel; + public string Rechnungstitel { get; set; } /// /// Status der Rechnung zur Kennzeichnung des Bearbeitungsstandes. Details siehe ENUM Rechnungsstatus /// - [JsonProperty(Required = Required.Default, Order = 5)] + [JsonProperty(Required = Required.Default, Order = 5, PropertyName = "rechnungsstatus")] [FieldName("billStatus", Language.EN)] [ProtoMember(5)] - public Rechnungsstatus? rechnungsstatus; + public Rechnungsstatus? Rechnungsstatus { get; set; } /// /// Kennzeichnung, ob es sich um eine Stornorechnung handelt. Im Falle "true" findet sich im Attribut "originalrechnungsnummer" die Nummer der Originalrechnung. /// - [JsonProperty(Required = Required.Always, Order = 6)] + [JsonProperty(Required = Required.Always, Order = 6, PropertyName = "storno")] [FieldName("isCancellation", Language.EN)] [ProtoMember(6)] - public bool storno; + public bool Storno { get; set; } /// /// Eine im Verwendungskontext eindeutige Nummer für die Rechnung. /// - [JsonProperty(Required = Required.Always, Order = 7)] + [JsonProperty(Required = Required.Always, Order = 7, PropertyName = "rechnungsnummer")] [ProtoMember(7)] [BoKey] [FieldName("billNumber", Language.EN)] - public string rechnungsnummer; + public string Rechnungsnummer { get; set; } /// /// Ausstellungsdatum der Rechnung. /// - [JsonProperty(Required = Required.Always, Order = 8)] + [JsonProperty(Required = Required.Always, Order = 8, PropertyName = "rechnungsdatum")] [ProtoMember(8)] [FieldName("billDate", Language.EN)] - public DateTime rechnungsdatum; + public DateTime Rechnungsdatum { get; set; } /// /// Zu diesem Datum ist die Zahlung fällig. /// - [JsonProperty(Required = Required.Always, Order = 9)] + [JsonProperty(Required = Required.Always, Order = 9, PropertyName = "faelligkeitsdatum")] [ProtoMember(9)] [FieldName("dueDate", Language.EN)] - public DateTime faelligkeitsdatum; + public DateTime Faelligkeitsdatum { get; set; } /// /// Ein kontextbezogender Rechnungstyp, z.B. Netznutzungsrechnung. Details siehe ENUM Rechnungstyp /// - [JsonProperty(Required = Required.Always, Order = 10)] + [JsonProperty(Required = Required.Always, Order = 10, PropertyName = "rechnungstyp")] [ProtoMember(10)] [FieldName("billType", Language.EN)] - public Rechnungstyp rechnungsstyp; + public Rechnungstyp Rechnungsstyp { get; set; } /// /// Im Falle einer Stornorechnung (storno = true) steht hier die Rechnungsnummer der stornierten Rechnung. /// - [JsonProperty(Required = Required.Default, Order = 11)] + [JsonProperty(Required = Required.Default, Order = 11, PropertyName = "originalRechnungsnummer")] [ProtoMember(11)] - public string originalRechnungsnummer; + public string OriginalRechnungsnummer { get; set; } /// /// Der Zeitraum der zugrunde liegenden Lieferung zur Rechnung. In der COM Zeitraum können diese angegeben werden. /// - [JsonProperty(Required = Required.Always, Order = 12)] + [JsonProperty(Required = Required.Always, Order = 12, PropertyName = "rechnungsperiode")] [ProtoMember(12)] [FieldName("billPeriod", Language.EN)] - public Zeitraum rechnungsperiode; + public Zeitraum Rechnungsperiode { get; set; } /// /// Der Aussteller der Rechnung. Details /// - [JsonProperty(Required = Required.Always, Order = 13)] + [JsonProperty(Required = Required.Always, Order = 13, PropertyName = "rechnungsersteller")] [ProtoMember(13)] [FieldName("issuer", Language.EN)] - public Geschaeftspartner rechnungsersteller; + public Geschaeftspartner Rechnungsersteller { get; set; } /// /// Der Empfänger der Rechnung. Details /// - [JsonProperty(Required = Required.Always, Order = 14)] + [JsonProperty(Required = Required.Always, Order = 14, PropertyName = "rechnungsempfaenger")] [ProtoMember(14)] [FieldName("recipient", Language.EN)] - public Geschaeftspartner rechnungsempfaenger; + public Geschaeftspartner Rechnungsempfaenger { get; set; } /// /// Die Summe der Nettobeträge der Rechnungsteile. Details /// - [JsonProperty(Required = Required.Always, Order = 15)] + [JsonProperty(Required = Required.Always, Order = 15, PropertyName = "gesamtnetto")] [ProtoMember(15)] [FieldName("totalNet", Language.EN)] - public Betrag gesamtnetto; + public Betrag Gesamtnetto { get; set; } /// /// Die Summe der Steuerbeträge der Rechnungsteile. Details /// - [JsonProperty(Required = Required.Always, Order = 16)] + [JsonProperty(Required = Required.Always, Order = 16, PropertyName = "gesamtsteuer")] [ProtoMember(16)] [FieldName("totalTax", Language.EN)] - public Betrag gesamtsteuer; + public Betrag Gesamtsteuer { get; set; } /// /// Die Summe aus Netto- und Steuerbetrag. Details /// - [JsonProperty(Required = Required.Always, Order = 17)] + [JsonProperty(Required = Required.Always, Order = 17, PropertyName = "gesamtbrutto")] [ProtoMember(17)] [FieldName("totalGross", Language.EN)] - public Betrag gesamtbrutto; + public Betrag Gesamtbrutto { get; set; } /// /// Die Summe evtl. vorausgezahlter Beträge, z.B. Abschläge. Angabe als Bruttowert. Details /// - [JsonProperty(Required = Required.Default, Order = 18)] + [JsonProperty(Required = Required.Default, Order = 18, PropertyName = "vorausgezahlt")] [ProtoMember(18)] [FieldName("prepaid", Language.EN)] - public Betrag vorausgezahlt; + public Betrag Vorausgezahlt { get; set; } /// /// Gesamtrabatt auf den Bruttobetrag. Details /// - [JsonProperty(Required = Required.Default, Order = 19)] + [JsonProperty(Required = Required.Default, Order = 19, PropertyName = "rabattBrutto")] [ProtoMember(19)] [FieldName("discountGross", Language.EN)] - public Betrag rabattBrutto; + public Betrag rabattBrutto { get; set; } /// - /// Der zu zahlende Betrag, der sich aus ( - - ) ergibt. Details + /// Der zu zahlende Betrag, der sich aus ( - - ) ergibt. Details /// /// - [JsonProperty(Required = Required.Always, Order = 20)] + [JsonProperty(Required = Required.Always, Order = 20, PropertyName = "zuzahlen")] [ProtoMember(20)] [FieldName("toPay", Language.EN)] - public Betrag zuzahlen; + public Betrag Zuzahlen { get; set; } /// /// Eine Liste mit Steuerbeträgen pro Steuerkennzeichen/Steuersatz. Die Summe dieser Beträge ergibt den Wert für gesamtsteuer. Details /// - [JsonProperty(Required = Required.Default, Order = 21)] + [JsonProperty(Required = Required.Default, Order = 21, PropertyName = "steuerbetraege")] [ProtoMember(21)] [FieldName("taxList", Language.EN)] - public List steuerbetraege; + public List Steuerbetraege { get; set; } /// /// Die Rechnungspositionen. Details siehe /// [ProtoMember(22)] - [JsonProperty(Required = Required.Always, Order = 22)] + [JsonProperty(Required = Required.Always, Order = 22, PropertyName = "rechnungspositionen")] [FieldName("invoiceItemList", Language.EN)] - public List rechnungspositionen; + public List Rechnungspositionen { get; set; } public Rechnung() { } @@ -192,15 +192,15 @@ public Rechnung(JObject sapPrintDocument) : this() throw new ArgumentException("The SAP print document did not contain a 'tErdz' token. Did you serialize using the right naming convention?"); } - rechnungsnummer = (infoToken["opbel"] ?? infoToken["OPBEL"]).Value(); - rechnungsdatum = TimeZoneInfo.ConvertTime((infoToken["bldat"] ?? infoToken["BLDAT"]).Value(), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME, TimeZoneInfo.Utc); - rechnungsperiode = new Zeitraum() + Rechnungsnummer = (infoToken["opbel"] ?? infoToken["OPBEL"]).Value(); + Rechnungsdatum = TimeZoneInfo.ConvertTime((infoToken["bldat"] ?? infoToken["BLDAT"]).Value(), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME, TimeZoneInfo.Utc); + Rechnungsperiode = new Zeitraum() { - startdatum = TimeZoneInfo.ConvertTime((tErdzToken[0]["ab"] ?? tErdzToken[0]["AB"]).Value(), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME, TimeZoneInfo.Utc), - enddatum = TimeZoneInfo.ConvertTime((tErdzToken[0]["bis"] ?? tErdzToken[0]["BIS"]).Value(), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME, TimeZoneInfo.Utc) + Startdatum = TimeZoneInfo.ConvertTime((tErdzToken[0]["ab"] ?? tErdzToken[0]["AB"]).Value(), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME, TimeZoneInfo.Utc), + Enddatum = TimeZoneInfo.ConvertTime((tErdzToken[0]["bis"] ?? tErdzToken[0]["BIS"]).Value(), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME, TimeZoneInfo.Utc) }; - faelligkeitsdatum = TimeZoneInfo.ConvertTime((infoToken["faedn"] ?? infoToken["FAEDN"]).Value(), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME, TimeZoneInfo.Utc); - storno = false; + Faelligkeitsdatum = TimeZoneInfo.ConvertTime((infoToken["faedn"] ?? infoToken["FAEDN"]).Value(), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME, TimeZoneInfo.Utc); + Storno = false; decimal gNetto, gSteure, gBrutto, vGezahlt, rBrutto, zZahlen; gNetto = gSteure = gBrutto = vGezahlt = rBrutto = zZahlen = 0.00M; @@ -210,7 +210,7 @@ public Rechnung(JObject sapPrintDocument) : this() List rpList = new List(); List stList = new List(); - vorausgezahlt = new Betrag() { waehrung = waehrungscode, wert = 0 }; + Vorausgezahlt = new Betrag() { Waehrung = waehrungscode, Wert = 0 }; foreach (JToken jrp in tErdzToken) { string belzart = (jrp["belzart"] ?? jrp["BELZART"]).ToString(); @@ -224,30 +224,30 @@ public Rechnung(JObject sapPrintDocument) : this() decimal zeitbezogeneMengeWert = 0; if (belzart == "000001") { - rp.positionstext = "ARBEITSPREIS"; + rp.Positionstext = "ARBEITSPREIS"; } else if (belzart == "000003") { - rp.positionstext = "PAUSCHALE"; + rp.Positionstext = "PAUSCHALE"; mengeneinheit = Mengeneinheit.JAHR; zeitbezogeneMengeWert = (jrp["preisbtr"] ?? jrp["PREISBTR"]).Value(); - rp.zeitbezogeneMenge = new Menge() { einheit = Mengeneinheit.TAG, wert = zeitbezogeneMengeWert }; + rp.ZeitbezogeneMenge = new Menge() { Einheit = Mengeneinheit.TAG, Wert = zeitbezogeneMengeWert }; - rp.einzelpreis = new Preis() + rp.Einzelpreis = new Preis() { - wert = decimal.Parse((jrp["zeitant"] ?? jrp["ZEITANT"]).ToString()), - einheit = waehrungseinheit, - bezugswert = mengeneinheit + Wert = decimal.Parse((jrp["zeitant"] ?? jrp["ZEITANT"]).ToString()), + Einheit = waehrungseinheit, + Bezugswert = mengeneinheit }; } else if (belzart == "000004") - rp.positionstext = "VERRECHNUNGSPREIS"; + rp.Positionstext = "VERRECHNUNGSPREIS"; else if (belzart == "SUBT") - rp.positionstext = "zuzüglich Mehrwertsteuer 19,000%"; + rp.Positionstext = "zuzüglich Mehrwertsteuer 19,000%"; else if (belzart == "ZHFBP1" || belzart == "CITAX") - rp.positionstext = belzart; + rp.Positionstext = belzart; else - rp.positionstext = ""; + rp.Positionstext = ""; if ((jrp["massbill"] ?? jrp["MASSBILL"]) != null && !string.IsNullOrWhiteSpace((jrp["massbill"] ?? jrp["MASSBILL"]).Value())) { @@ -258,7 +258,7 @@ public Rechnung(JObject sapPrintDocument) : this() if ((jrp["timbasis"] ?? jrp["TIMBASIS"]).Value() == "365") { mengeneinheit = Mengeneinheit.JAHR; - rp.zeitbezogeneMenge = new Menge() { einheit = Mengeneinheit.TAG, wert = zeitbezogeneMengeWert }; + rp.ZeitbezogeneMenge = new Menge() { Einheit = Mengeneinheit.TAG, Wert = zeitbezogeneMengeWert }; } } else @@ -266,47 +266,47 @@ public Rechnung(JObject sapPrintDocument) : this() mengeneinheit = Mengeneinheit.KWH; } - if (rp.einzelpreis == null) + if (rp.Einzelpreis == null) { if ((jrp["preisbtr"] ?? jrp["PREISBTR"]) != null) { - rp.einzelpreis = new Preis() + rp.Einzelpreis = new Preis() { - wert = decimal.Parse((jrp["preisbtr"] ?? jrp["PREISBTR"]).ToString()), - einheit = waehrungseinheit, - bezugswert = mengeneinheit + Wert = decimal.Parse((jrp["preisbtr"] ?? jrp["PREISBTR"]).ToString()), + Einheit = waehrungseinheit, + Bezugswert = mengeneinheit }; } else - rp.einzelpreis = new Preis() + rp.Einzelpreis = new Preis() { - wert = 0, - einheit = waehrungseinheit, - bezugswert = mengeneinheit + Wert = 0, + Einheit = waehrungseinheit, + Bezugswert = mengeneinheit }; } - rp.positionsnummer = (jrp["belzeile"] ?? jrp["BELZEILE"]).Value(); + rp.Positionsnummer = (jrp["belzeile"] ?? jrp["BELZEILE"]).Value(); if ((jrp["bis"] ?? jrp["BIS"]) != null && (jrp["bis"] ?? jrp["BIS"]).Value() != "0000-00-00") { - rp.lieferungBis = TimeZoneInfo.ConvertTime((jrp["bis"] ?? jrp["BIS"]).Value(), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME, TimeZoneInfo.Utc); + rp.LieferungBis = TimeZoneInfo.ConvertTime((jrp["bis"] ?? jrp["BIS"]).Value(), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME, TimeZoneInfo.Utc); } if ((jrp["ab"] ?? jrp["AB"]) != null && (jrp["ab"] ?? jrp["AB"]).Value() != "0000-00-00") { - rp.lieferungVon = TimeZoneInfo.ConvertTime((jrp["ab"] ?? jrp["AB"]).Value(), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME, TimeZoneInfo.Utc); + rp.LieferungVon = TimeZoneInfo.ConvertTime((jrp["ab"] ?? jrp["AB"]).Value(), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME, TimeZoneInfo.Utc); } if ((jrp["vertrag"] ?? jrp["VERTRAG"]) != null) { - rp.vertragskontoId = (jrp["vertrag"] ?? jrp["VERTRAG"]).Value(); + rp.VertragskontoId = (jrp["vertrag"] ?? jrp["VERTRAG"]).Value(); } if ((jrp["iAbrmenge"] ?? jrp["I_ABRMENGE"]) != null) { - rp.positionsMenge = new Menge() + rp.PositionsMenge = new Menge() { - wert = (jrp["iAbrmenge"] ?? jrp["I_ABRMENGE"]).Value(), - einheit = mengeneinheit + Wert = (jrp["iAbrmenge"] ?? jrp["I_ABRMENGE"]).Value(), + Einheit = mengeneinheit }; } @@ -314,24 +314,24 @@ public Rechnung(JObject sapPrintDocument) : this() { if (belzart != "SUBT" && belzart != "CITAX") { - rp.teilsummeNetto = new Betrag() + rp.TeilsummeNetto = new Betrag() { - wert = (jrp["nettobtr"] ?? jrp["NETTOBTR"]).Value(), - waehrung = waehrungscode + Wert = (jrp["nettobtr"] ?? jrp["NETTOBTR"]).Value(), + Waehrung = waehrungscode }; } else { - rp.teilsummeNetto = new Betrag() + rp.TeilsummeNetto = new Betrag() { - wert = (jrp["sbasw"] ?? jrp["SBASW"]).Value(), - waehrung = waehrungscode + Wert = (jrp["sbasw"] ?? jrp["SBASW"]).Value(), + Waehrung = waehrungscode }; Steuerbetrag steuerbetrag = new Steuerbetrag() { - basiswert = (jrp["sbasw"] ?? jrp["SBASW"]).Value(), - steuerwert = (jrp["sbetw"] ?? jrp["SBETW"]).Value(), - waehrung = (Waehrungscode)Enum.Parse(typeof(Waehrungscode), (jrp["twaers"] ?? jrp["TWAERS"]).Value()) + Basiswert = (jrp["sbasw"] ?? jrp["SBASW"]).Value(), + Steuerwert = (jrp["sbetw"] ?? jrp["SBETW"]).Value(), + Waehrung = (Waehrungscode)Enum.Parse(typeof(Waehrungscode), (jrp["twaers"] ?? jrp["TWAERS"]).Value()) }; decimal steuerProzent; if ((jrp["stprz"] ?? jrp["STPRZ"]) != null && !string.IsNullOrWhiteSpace((jrp["stprz"] ?? jrp["STPRZ"]).Value())) @@ -340,29 +340,29 @@ public Rechnung(JObject sapPrintDocument) : this() } else { - steuerProzent = steuerbetrag.steuerwert / steuerbetrag.basiswert * 100.0M; + steuerProzent = steuerbetrag.Steuerwert / steuerbetrag.Basiswert * 100.0M; } if ((int)steuerProzent == 19) { - steuerbetrag.steuerkennzeichen = Steuerkennzeichen.UST_19; + steuerbetrag.Steuerkennzeichen = Steuerkennzeichen.UST_19; } else if ((int)steuerProzent == 7) { - steuerbetrag.steuerkennzeichen = Steuerkennzeichen.UST_7; + steuerbetrag.Steuerkennzeichen = Steuerkennzeichen.UST_7; } else { throw new NotImplementedException($"Taxrate Internal '{jrp["taxrateInternal"]}' is not mapped."); } - rp.teilsummeSteuer = steuerbetrag; + rp.TeilsummeSteuer = steuerbetrag; } if ((jrp["nettobtr"] ?? jrp["NETTOBTR"]).Value() <= 0) { - vorausgezahlt = new Betrag() { waehrung = waehrungscode, wert = (jrp["nettobtr"] ?? jrp["NETTOBTR"]).Value() }; + Vorausgezahlt = new Betrag() { Waehrung = waehrungscode, Wert = (jrp["nettobtr"] ?? jrp["NETTOBTR"]).Value() }; } } - rp.zeiteinheit = mengeneinheit; + rp.Zeiteinheit = mengeneinheit; rpList.Add(rp); var be = (jrp["nettobtr"] ?? jrp["NETTOBTR"]); @@ -376,9 +376,9 @@ public Rechnung(JObject sapPrintDocument) : this() { Steuerbetrag steuerbetrag = new Steuerbetrag() { - basiswert = (jrp["sbasw"] ?? jrp["SBASW"]).Value(), - steuerwert = (jrp["sbetw"] ?? jrp["SBETW"]).Value(), - waehrung = (Waehrungscode)Enum.Parse(typeof(Waehrungscode), (jrp["twaers"] ?? jrp["TWAERS"]).Value()) + Basiswert = (jrp["sbasw"] ?? jrp["SBASW"]).Value(), + Steuerwert = (jrp["sbetw"] ?? jrp["SBETW"]).Value(), + Waehrung = (Waehrungscode)Enum.Parse(typeof(Waehrungscode), (jrp["twaers"] ?? jrp["TWAERS"]).Value()) }; decimal steuerProzent; if ((jrp["stprz"] ?? jrp["STPRZ"]) != null && !string.IsNullOrWhiteSpace((jrp["stprz"] ?? jrp["STPRZ"]).Value())) @@ -387,15 +387,15 @@ public Rechnung(JObject sapPrintDocument) : this() } else { - steuerProzent = Math.Round(steuerbetrag.steuerwert / steuerbetrag.basiswert * 100.0M); + steuerProzent = Math.Round(steuerbetrag.Steuerwert / steuerbetrag.Basiswert * 100.0M); } if (steuerProzent == 19.0M) { - steuerbetrag.steuerkennzeichen = Steuerkennzeichen.UST_19; + steuerbetrag.Steuerkennzeichen = Steuerkennzeichen.UST_19; } else if (steuerProzent == 7.0M) { - steuerbetrag.steuerkennzeichen = Steuerkennzeichen.UST_7; + steuerbetrag.Steuerkennzeichen = Steuerkennzeichen.UST_7; } else { @@ -407,44 +407,44 @@ public Rechnung(JObject sapPrintDocument) : this() } } } - steuerbetraege = stList; - rechnungspositionen = rpList; + Steuerbetraege = stList; + Rechnungspositionen = rpList; gBrutto = gNetto + gSteure; zZahlen = gBrutto - vGezahlt - rBrutto; - gesamtnetto = new Betrag() { wert = gNetto, waehrung = waehrungscode }; - gesamtsteuer = new Betrag() { wert = gSteure, waehrung = waehrungscode }; - gesamtbrutto = new Betrag() { wert = gBrutto, waehrung = waehrungscode }; - zuzahlen = new Betrag() { wert = zZahlen, waehrung = waehrungscode }; + Gesamtnetto = new Betrag() { Wert = gNetto, Waehrung = waehrungscode }; + Gesamtsteuer = new Betrag() { Wert = gSteure, Waehrung = waehrungscode }; + Gesamtbrutto = new Betrag() { Wert = gBrutto, Waehrung = waehrungscode }; + Zuzahlen = new Betrag() { Wert = zZahlen, Waehrung = waehrungscode }; - rechnungsersteller = new Geschaeftspartner() + Rechnungsersteller = new Geschaeftspartner() { - geschaeftspartnerrolle = new List() { Geschaeftspartnerrolle.LIEFERANT }, - gewerbekennzeichnung = true, + Geschaeftspartnerrolle = new List() { Geschaeftspartnerrolle.LIEFERANT }, + Gewerbekennzeichnung = true, anrede = Anrede.HERR, - name1 = "Mein super Lieferant", - partneradresse = new Adresse() + Name1 = "Mein super Lieferant", + Partneradresse = new Adresse() { - strasse = "Max-Plank-Strasse", - hausnummer = "8", - postleitzahl = "90190", - landescode = Landescode.DE, - ort = "Walldorf" + Strasse = "Max-Plank-Strasse", + Hausnummer = "8", + Postleitzahl = "90190", + Landescode = Landescode.DE, + Ort = "Walldorf" } }; - rechnungsempfaenger = new Geschaeftspartner() + Rechnungsempfaenger = new Geschaeftspartner() { - geschaeftspartnerrolle = new List() { Geschaeftspartnerrolle.KUNDE }, - gewerbekennzeichnung = false, + Geschaeftspartnerrolle = new List() { Geschaeftspartnerrolle.KUNDE }, + Gewerbekennzeichnung = false, anrede = Anrede.HERR, - name1 = "Lustig", - name2 = "Peter", - partneradresse = new Adresse() + Name1 = "Lustig", + Name2 = "Peter", + Partneradresse = new Adresse() { - strasse = "Magnusstraße", - hausnummer = "20", - postleitzahl = "50672", - landescode = Landescode.DE, - ort = "Köln" + Strasse = "Magnusstraße", + Hausnummer = "20", + Postleitzahl = "50672", + Landescode = Landescode.DE, + Ort = "Köln" } }; } diff --git a/BO4E-dotnet/BO/Region.cs b/BO4E-dotnet/BO/Region.cs index 754e0234..ed78b1e2 100644 --- a/BO4E-dotnet/BO/Region.cs +++ b/BO4E-dotnet/BO/Region.cs @@ -1,7 +1,10 @@ using System.Collections.Generic; + using BO4E.COM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.BO @@ -15,23 +18,23 @@ public class Region : BusinessObject /// /// Bezeichnung der Region. /// - [JsonProperty(Required = Required.Always, Order = 4)] + [JsonProperty(Required = Required.Always, Order = 4, PropertyName = "bezeichnung")] [ProtoMember(4)] [BoKey] - public string bezeichnung; + public string Bezeichnung { get; set; } /// /// Positivliste der Kriterien zur Definition der Region. /// - [JsonProperty(Required = Required.Always, Order = 5)] + [JsonProperty(Required = Required.Always, Order = 5, PropertyName = "positivListe")] [ProtoMember(5)] - public List positivListe; + public List PositivListe { get; set; } /// /// Negativliste der Kriterien zur Definition der Region. /// - [JsonProperty(Required = Required.Default, Order = 6)] + [JsonProperty(Required = Required.Default, Order = 6, PropertyName = "negativListe")] [ProtoMember(6)] - public List negativListe; + public List NegativListe { get; set; } } } diff --git a/BO4E-dotnet/BO/Vertrag.cs b/BO4E-dotnet/BO/Vertrag.cs index 9990b0c7..fffb4283 100644 --- a/BO4E-dotnet/BO/Vertrag.cs +++ b/BO4E-dotnet/BO/Vertrag.cs @@ -1,12 +1,14 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Runtime.Serialization; + using BO4E.COM; using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; using Newtonsoft.Json.Linq; + using ProtoBuf; namespace BO4E.BO @@ -22,110 +24,110 @@ public class Vertrag : BusinessObject /// Eine im Verwendungskontext eindeutige Nummer für den Vertrag /// [BoKey] - [JsonProperty(Required = Required.Always, Order = 4)] + [JsonProperty(Required = Required.Always, Order = 4, PropertyName = "vertragsnummer")] [ProtoMember(4)] - public string vertragsnummer; + public string Vertragsnummer { get; set; } /// /// Beschreibung zum Vertrag /// - [JsonProperty(Required = Required.Default, Order = 5)] + [JsonProperty(Required = Required.Default, Order = 5, PropertyName = "beschreibung")] [ProtoMember(5)] - public string beschreibung; + public string Beschreibung { get; set; } /// /// Hier ist festgelegt, um welche Art von Vertrag es sich handelt. Z.B. Netznutzungvertrag. Details siehe ENUM Vertragsart /// - [JsonProperty(Required = Required.Always, Order = 6)] + [JsonProperty(Required = Required.Always, Order = 6, PropertyName = "vertragsart")] [ProtoMember(6)] - public Vertragsart vertragsart; + public Vertragsart Vertragsart { get; set; } /// /// Gibt den Status des Vertrags an. Siehe ENUM Vertragsstatus /// - [JsonProperty(Required = Required.Always, Order = 7)] + [JsonProperty(Required = Required.Always, Order = 7, PropertyName = "vertragstatus")] [ProtoMember(7)] - public Vertragstatus vertragstatus; + public Vertragstatus Vertragstatus { get; set; } // ToDo: shouldn't this be vertragsstatus with "ss"? /// /// Unterscheidungsmöglichkeiten für die Sparte. Siehe ENUM Sparte /// - [JsonProperty(Required = Required.Always, Order = 8)] + [JsonProperty(Required = Required.Always, Order = 8, PropertyName = "sparte")] [ProtoMember(8)] - public Sparte sparte; + public Sparte Sparte { get; set; } /// /// Gibt an, wann der Vertrag beginnt. /// - [JsonProperty(Required = Required.Always, Order = 9)] + [JsonProperty(Required = Required.Always, Order = 9, PropertyName = "vertragsbeginn")] [ProtoMember(9)] - public DateTime vertragsbeginn; + public DateTime Vertragsbeginn { get; set; } /// /// Gibt an, wann der Vertrag (voraussichtlich) endet oder beendet wurde. /// - [JsonProperty(Required = Required.Always, Order = 10)] + [JsonProperty(Required = Required.Always, Order = 10, PropertyName = "vertragsende")] [ProtoMember(10)] - public DateTime vertragsende; + public DateTime Vertragsende { get; set; } /// /// Der "erstgenannte" Vertragspartner. In der Regel der Aussteller des Vertrags. Beispiel: "Vertrag zwischen Vertagspartner 1 ..." Siehe BO Geschaeftspartner /// - [JsonProperty(Required = Required.Default, Order = 11)] // TODO: should be required but our CDS is missing the association + [JsonProperty(Required = Required.Default, Order = 11, PropertyName = "vertragspartner1")] // TODO: should be required but our CDS is missing the association [ProtoMember(11)] - public Geschaeftspartner vertragspartner1; + public Geschaeftspartner Vertragspartner1 { get; set; } /// /// Der "zweitgenannte" Vertragspartner. In der Regel der Empfänger des Vertrags. Beispiel "Vertrag zwischen Vertagspartner 1 und Vertragspartner 2". Siehe BO Geschaeftspartner /// - [JsonProperty(Required = Required.Default, Order = 12)] // TODO: should be required but our CDS is missing the association + [JsonProperty(Required = Required.Default, Order = 12, PropertyName = "vertragspartner2")] // TODO: should be required but our CDS is missing the association [ProtoMember(12)] - public Geschaeftspartner vertragspartner2; + public Geschaeftspartner Vertragspartner2 { get; set; } /// /// Unterzeichner des Vertragspartners1. Siehe COM Unterschrift /// - [JsonProperty(Required = Required.Default, Order = 13)] + [JsonProperty(Required = Required.Default, Order = 13, PropertyName = "unterzeichnervp1")] [ProtoMember(13)] - public List unterzeichnervp1; + public List Unterzeichnervp1 { get; set; } /// /// Unterzeichner des Vertragspartners2. Siehe COM Unterschrift /// - [JsonProperty(Required = Required.Default, Order = 14)] + [JsonProperty(Required = Required.Default, Order = 14, PropertyName = "unterzeichnervp2")] [ProtoMember(14)] - public List unterzeichnervp2; + public List Unterzeichnervp2 { get; set; } /// /// Festlegungen zu Laufzeiten und Kündigungsfristen. Details siehe COM Vertragskonditionen /// - [JsonProperty(Required = Required.Default, Order = 15)] + [JsonProperty(Required = Required.Default, Order = 15, PropertyName = "vertragskonditionen")] [ProtoMember(15)] - public Vertragskonditionen vertragskonditionen; + public Vertragskonditionen Vertragskonditionen { get; set; } /// /// Der Vertragsteil wird dazu verwendet, eine vertragliche Leistung in Bezug zu einer Lokation (Markt- oder Messlokation) festzulegen. Details siehe COM Vertragsteil /// - [JsonProperty(Required = Required.Default, Order = 16)] // TODO: should be required but our CDS is missing the association + [JsonProperty(Required = Required.Default, Order = 16, PropertyName = "vertragsteile")] // TODO: should be required always but our CDS is missing the association [ProtoMember(16)] - public List vertragsteile; + public List Vertragsteile { get; set; } /// /// gemeinderabatt für EDIFACT mapping. /// // ToDo: What is the unit? is 1.0 = 100% discount? - [JsonProperty(Required = Required.Default, Order = 17)] + [JsonProperty(Required = Required.Default, Order = 17, PropertyName = "gemeinderabatt")] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1017)] - public decimal? gemeinderabatt; + public decimal? Gemeinderabatt { get; set; } /// /// korrespondenzpartner für EDIFACT mapping /// - [JsonProperty(Required = Required.Default, Order = 18)] + [JsonProperty(Required = Required.Default, Order = 18, PropertyName = "korrespondenzpartner")] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1018)] // ToDO: isn't an Ansprechpartner the better choice than a Geschaeftspartner? - public Geschaeftspartner korrespondenzpartner; + public Geschaeftspartner Korrespondenzpartner { get; set; } /// @@ -135,15 +137,15 @@ public class Vertrag : BusinessObject [OnDeserialized] protected void OnDeserialized(StreamingContext context) { - if ((vertragsteile == null || vertragsteile.Count == 0) && (userProperties!=null && userProperties.ContainsKey("lokationsId"))) + if ((Vertragsteile == null || Vertragsteile.Count == 0) && (UserProperties != null && UserProperties.ContainsKey("lokationsId"))) { - vertragsteile = new List() + Vertragsteile = new List() { new Vertragsteil() { - vertragsteilbeginn = this.vertragsbeginn, - vertragsteilende = this.vertragsende, - lokation = userProperties["lokationsId"].Value() + Vertragsteilbeginn = this.Vertragsbeginn, + Vertragsteilende = this.Vertragsende, + Lokation = UserProperties["lokationsId"].Value() } }; } diff --git a/BO4E-dotnet/BO/Zaehler.cs b/BO4E-dotnet/BO/Zaehler.cs index 61765c68..ee5628a9 100644 --- a/BO4E-dotnet/BO/Zaehler.cs +++ b/BO4E-dotnet/BO/Zaehler.cs @@ -1,10 +1,13 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; + using BO4E.COM; using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.BO @@ -17,82 +20,82 @@ public class Zaehler : BusinessObject { /// Nummerierung des Zählers, vergeben durch den Messstellenbetreiber [BoKey] - [JsonProperty(Required = Required.Always, Order = 4)] + [JsonProperty(Required = Required.Always, Order = 4, PropertyName = "zaehlernummer")] [ProtoMember(4)] - public string zaehlernummer; + public string Zaehlernummer { get; set; } - /// Strom oder Gas. - [JsonProperty(Required = Required.Always, Order = 5)] + /// Strom oder Gas. + [JsonProperty(Required = Required.Always, Order = 5, PropertyName = "sparte")] [ProtoMember(5)] - public Sparte sparte; + public Sparte Sparte { get; set; } /// Spezifikation die Richtung des Zählers betreffend. - /// - [JsonProperty(Required = Required.Always, Order = 6)] + /// + [JsonProperty(Required = Required.Always, Order = 6, PropertyName = "zaehlerauspraegung")] [ProtoMember(6)] - public Zaehlerauspraegung zaehlerauspraegung; + public Zaehlerauspraegung Zaehlerauspraegung { get; set; } /// Typisierung des Zählers - /// - [JsonProperty(Required = Required.Always, Order = 7)] + /// + [JsonProperty(Required = Required.Always, Order = 7, PropertyName = "zaehlertyp")] [ProtoMember(7)] - public Zaehlertyp zaehlertyp; + public Zaehlertyp Zaehlertyp { get; set; } /// Spezifikation bezüglich unterstützter Tarifarten. - /// - [JsonProperty(Required = Required.Always, Order = 8)] + /// + [JsonProperty(Required = Required.Always, Order = 8, PropertyName = "tarifart")] [ProtoMember(8)] - public Tarifart tarifart; + public Tarifart Tarifart { get; set; } /// Zählerkonstante auf dem Zähler. - [JsonProperty(Required = Required.Default, Order = 9)] + [JsonProperty(Required = Required.Default, Order = 9, PropertyName = "zaehlerkonstante")] [ProtoMember(9)] - public Decimal zaehlerkonstante; + public Decimal zaehlerkonstante { get; set; } /// Bis zu diesem Datum ist der Zähler geeicht. - [JsonProperty(Required = Required.Default, Order = 10)] + [JsonProperty(Required = Required.Default, Order = 10, PropertyName = "eichungBis")] [ProtoMember(10)] - public DateTime? eichungBis; // ToDO implement date + public DateTime? EichungBis { get; set; } // ToDO implement date /// Zu diesem Datum fand die letzte Eichprüfung des Zählers statt. - [JsonProperty(Required = Required.Default, Order = 11)] + [JsonProperty(Required = Required.Default, Order = 11, PropertyName = "letzteEichung")] [ProtoMember(11)] - public DateTime? letzteEichung; + public DateTime? LetzteEichung { get; set; } /// Die Zählwerke des Zählers. /// - [JsonProperty(Required = Required.Always, Order = 12)] + [JsonProperty(Required = Required.Always, Order = 12, PropertyName = "zaehlwerke")] [MinLength(1)] [ProtoMember(12)] - public List zaehlwerke; + public List Zaehlwerke { get; set; } /// Der Hersteller des Zählers. Details - [JsonProperty(Required = Required.Default, Order = 13, NullValueHandling =NullValueHandling.Ignore)] + [JsonProperty(Required = Required.Default, Order = 13, NullValueHandling = NullValueHandling.Ignore, PropertyName = "zaehlerhersteller")] [ProtoMember(13)] - public Geschaeftspartner zaehlerhersteller; + public Geschaeftspartner Zaehlerhersteller { get; set; } /// /// Referenz auf das Smartmeter-Gateway /// - [JsonProperty(Required = Required.Default, Order = 14)] + [JsonProperty(Required = Required.Default, Order = 14, PropertyName = "gateway")] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1014)] - public string gateway; + public string Gateway { get; set; } /// /// Fernschaltung /// - [JsonProperty(Required = Required.Default, Order = 15)] + [JsonProperty(Required = Required.Default, Order = 15, PropertyName = "fernschaltung")] [ProtoMember(1015)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public Fernschaltung? fernschaltung; + public Fernschaltung? Fernschaltung { get; set; } /// /// Messwerterfassung am Zählpunkt /// - [JsonProperty(Required = Required.Default, Order = 16)] + [JsonProperty(Required = Required.Default, Order = 16, PropertyName = "messwerterfassung")] [ProtoMember(1016)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public Messwerterfassung? messwerterfassung; + public Messwerterfassung? Messwerterfassung { get; set; } } } diff --git a/BO4E-dotnet/BO4E-dotnet.csproj b/BO4E-dotnet/BO4E-dotnet.csproj index 54e723ac..2418cbc3 100644 --- a/BO4E-dotnet/BO4E-dotnet.csproj +++ b/BO4E-dotnet/BO4E-dotnet.csproj @@ -24,11 +24,12 @@ LICENSE.txt 0.1.3.0 0.1.3.0 + 0.2.0 - false + true DEBUG diff --git a/BO4E-dotnet/BoEdiMapper.cs b/BO4E-dotnet/BoEdiMapper.cs index 1fff586b..18093974 100644 --- a/BO4E-dotnet/BoEdiMapper.cs +++ b/BO4E-dotnet/BoEdiMapper.cs @@ -55,17 +55,16 @@ public static string ToEdi(string objectName, string objectValue) StaticLogger.Logger = new Microsoft.Extensions.Logging.Debug.DebugLogger("Testlogger", (log, level) => { return true; }); _logger = StaticLogger.Logger; } - Type[] types = Assembly.GetExecutingAssembly().GetTypes(); + //Type[] types = Assembly.GetExecutingAssembly().GetTypes(); Type clazz = Assembly.GetExecutingAssembly().GetType(namespacePrefix + "." + objectName); Type ediClazz = Assembly.GetExecutingAssembly().GetType($"{namespacePrefix}.EDI.{objectName}Edi"); - FieldInfo field = null; - field = clazz.GetField(objectValue); - if (field == null) + var prop = clazz.GetField(objectValue); + if (prop == null) { _logger.LogWarning($"Class objectName has no field {objectValue}; Might already be the edi value..."); - var alternativeField = EdiBoMapper.fromEdi(objectName, objectValue); - if (alternativeField != null && clazz.GetField(alternativeField) != null) + var alternativField = EdiBoMapper.fromEdi(objectName, objectValue); + if (alternativField != null && clazz.GetField(alternativField) != null) { return objectValue; } @@ -81,21 +80,19 @@ public static string ToEdi(string objectName, string objectValue) return objectValue; } // try to find annotation with EdiValue - FieldInfo[] annotatedEdiFields = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.Name == ediClazz.Name).SelectMany(t => t.GetFields()).Where(f => f.GetCustomAttributes(typeof(MappingAttribute), false).Length > 0).ToArray(); + var annotatedEdiFields = Assembly.GetExecutingAssembly().GetTypes() + .Where(t => t.Name == ediClazz.Name) + .SelectMany(t => t.GetFields()) + .Where(f => f.GetCustomAttributes(typeof(MappingAttribute), false).Length > 0).ToArray(); if (annotatedEdiFields.Length == 0) { _logger.LogError($"No annotated EdiFields found for {objectName} / {objectValue}"); return null; } - foreach (FieldInfo aef in annotatedEdiFields) + foreach (var aef in annotatedEdiFields) { - foreach (Attribute a in aef.GetCustomAttributes()) + foreach (MappingAttribute ma in aef.GetCustomAttributes()) { - if (a.GetType() != typeof(MappingAttribute)) - { - continue; - } - MappingAttribute ma = (MappingAttribute)a; var matchCandidate = ma.Mapping.FirstOrDefault(); if (matchCandidate != null && matchCandidate.ToString() == objectValue) { @@ -133,26 +130,14 @@ public static JObject ReplaceWithEdiValues(Object o) } string boString = JsonConvert.SerializeObject(o, new StringEnumConverter()); JObject result = (JObject)JsonConvert.DeserializeObject(boString); - foreach (FieldInfo oField in o.GetType().GetFields()) + foreach (var oProp in o.GetType().GetProperties().Where(p=>p.GetValue(o)!=null)) { - if (oField.GetValue(o) == null) - { - continue; - } - Type originalType; - Type underlyingType = Nullable.GetUnderlyingType(oField.FieldType); - if (underlyingType == null) - { - originalType = oField.FieldType; - } - else - { - originalType = underlyingType; - } + string serializationName = oProp.GetCustomAttribute().PropertyName ?? oProp.Name; + Type originalType = Nullable.GetUnderlyingType(oProp.PropertyType) ?? oProp.PropertyType; if (originalType.IsSubclassOf(typeof(BO4E.COM.COM)) || originalType.IsSubclassOf(typeof(BO4E.BO.BusinessObject))) { - object newValue = ReplaceWithEdiValues(oField.GetValue(o)); - result[oField.Name] = (JToken)newValue; + object newValue = ReplaceWithEdiValues(oProp.GetValue(o)); + result[serializationName] = (JToken)newValue; } else if (originalType.IsGenericType && (originalType.GetGenericTypeDefinition() == typeof(List<>))) { @@ -165,14 +150,14 @@ public static JObject ReplaceWithEdiValues(Object o) Type listType = typeof(List<>).MakeGenericType(listItemEdiType); object newList = Activator.CreateInstance(listType); MethodInfo miAdd = listType.GetMethod("Add"); - foreach (object listItem in (IEnumerable)oField.GetValue(o)) + foreach (object listItem in (IEnumerable)oProp.GetValue(o)) { string newValue = ToEdi(originalListItemType.Name, listItem.ToString()); miAdd.Invoke(newList, new object[] { Enum.Parse(listItemEdiType, newValue) }); } JsonSerializer js = new JsonSerializer(); js.Converters.Add(new StringEnumConverter()); - result[oField.Name] = JToken.FromObject(newList, js); + result[serializationName] = JToken.FromObject(newList, js); } else { @@ -184,19 +169,19 @@ public static JObject ReplaceWithEdiValues(Object o) Type listType = typeof(List<>).MakeGenericType(typeof(JObject)); object newList = Activator.CreateInstance(listType); MethodInfo miAdd = listType.GetMethod("Add"); - foreach (object listItem in (IEnumerable)oField.GetValue(o)) + foreach (object listItem in (IEnumerable)oProp.GetValue(o)) { object newListItem = ReplaceWithEdiValues(listItem); miAdd.Invoke(newList, new object[] { newListItem }); } - result[oField.Name] = JToken.FromObject(newList); + result[serializationName] = JToken.FromObject(newList); } } Type ediType = Assembly.GetExecutingAssembly().GetType($"{namespacePrefix}.EDI.{originalType.Name}Edi"); if (ediType != null) { - string newValue = ToEdi(originalType.Name, oField.GetValue(o).ToString()); - result[oField.Name] = newValue; + string newValue = ToEdi(originalType.Name, oProp.GetValue(o).ToString()); + result[serializationName] = newValue; } } return result; diff --git a/BO4E-dotnet/BoMapper.cs b/BO4E-dotnet/BoMapper.cs index a031a278..c8ed3402 100644 --- a/BO4E-dotnet/BoMapper.cs +++ b/BO4E-dotnet/BoMapper.cs @@ -114,6 +114,7 @@ public static BusinessObject MapObject(string businessObjectName, JObject jobjec /// a BO4E business object () of the type provided in businessObjectName /// /// + [Obsolete("DEPRECATED! Please use the overloaded method MapObject(...) or MapObject(Type t,...) that accept types, not strings.")] public static BusinessObject MapObject(Type businessObjectType, JObject jobject, HashSet userPropertiesWhiteList, LenientParsing lenient = LenientParsing.Strict) { if (!businessObjectType.IsSubclassOf(typeof(BusinessObject))) @@ -260,11 +261,12 @@ public static JSchema GetJsonSchemeFor(Type businessObjectType) /// /// name of the business object in title caseMesslokation /// Array of FieldInfos + [Obsolete("Fields are only private version 1.1", true)] public static FieldInfo[] GetAnnotatedFields(string boName) { return GetAnnotatedFields(boName, typeof(DataCategoryAttribute)); } - + [Obsolete("Fields are only private version 1.1", true)] public static FieldInfo[] GetAnnotatedFields(Type type) { return GetAnnotatedFields(type, typeof(DataCategoryAttribute)); @@ -277,6 +279,7 @@ public static FieldInfo[] GetAnnotatedFields(Type type) /// type of the business object /// type of the attribute/annotation you're interested intypeof(DataCategoryAttribute) /// Array of FieldInfos + [Obsolete("Fields are only private version 1.1",true)] public static FieldInfo[] GetAnnotatedFields(Type boType, Type attributeType) { return boType.GetFields() @@ -292,6 +295,7 @@ public static FieldInfo[] GetAnnotatedFields(Type boType, Type attributeType) /// name of the business object in title caseMesslokation /// type of the attribute/annotation you're interested intypeof(DataCategoryAttribute) /// Array of FieldInfos + [Obsolete("Fields are only private version 1.1",true)] public static FieldInfo[] GetAnnotatedFields(string boName, Type attributeType) { return Assembly.GetExecutingAssembly().GetTypes() diff --git a/BO4E-dotnet/COM/Adresse.cs b/BO4E-dotnet/COM/Adresse.cs index 230de465..fc5a8c2c 100644 --- a/BO4E-dotnet/COM/Adresse.cs +++ b/BO4E-dotnet/COM/Adresse.cs @@ -1,6 +1,8 @@ using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -11,53 +13,53 @@ public class Adresse : COM { /// Die Postleitzahl. Beispiel: 41836 [DataCategory(DataCategory.ADDRESS)] - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "postleitzahl", Required = Required.Always)] [FieldName("zipCode", Language.EN)] [ProtoMember(3)] - public string postleitzahl; + public string Postleitzahl { get; set; } /// Bezeichnung der Stadt. Beispiel Hückelhoven [DataCategory(DataCategory.ADDRESS)] - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "ort", Required = Required.Always)] [FieldName("city", Language.EN)] [ProtoMember(4)] - public string ort; + public string Ort { get; set; } /// Bezeichnung der Straße. Beispiel: Weserstraße [DataCategory(DataCategory.ADDRESS)] - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "strasse", Required = Required.Default)] [FieldName("street", Language.EN)] [ProtoMember(5)] - public string strasse; + public string Strasse { get; set; } /// Hausnummer inkl. Zusatz. Beispiel. 3, 4a etc. [DataCategory(DataCategory.ADDRESS)] - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "hausnummer", Required = Required.Default)] [FieldName("houseNumber", Language.EN)] [ProtoMember(6)] - public string hausnummer; + public string Hausnummer { get; set; } /// /// Im Falle einer Postfachadresse das Postfach. Damit werden Straße und /// Hausnummer nicht berücksichtigt.Beispiel: Postfach 4711 /// [DataCategory(DataCategory.ADDRESS)] - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "postfach", Required = Required.Default)] [ProtoMember(7)] - public string postfach; + public string Postfach { get; set; } /// Zusatzhinweis zum Auffinden der Adresse, z.B. "3. Stock linke Wohnung" [DataCategory(DataCategory.ADDRESS)] - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "adresszusatz", Required = Required.Default)] [ProtoMember(8)] - public string adresszusatz; + public string Adresszusatz { get; set; } /// Im Falle einer c/o-Adresse steht in diesem Attribut die Anrede. Z.B. c/o /// Veronica Hauptmieterin.In diesem Fall enthält die folgende Adresse die Daten ///der in c/o adressierten Person oder Firma. [DataCategory(DataCategory.ADDRESS)] - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "coErgaenzung", Required = Required.Default)] [ProtoMember(9)] - public string coErgaenzung; - /// Offizieller ISO-Landescode. Z.B. NL, Details + public string CoErgaenzung { get; set; } + /// Offizieller ISO-Landescode. Z.B. NL, Details [DataCategory(DataCategory.ADDRESS)] - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "landescode", Required = Required.Default)] [FieldName("countryCode", Language.EN)] [ProtoMember(10)] - public Landescode? landescode; + public Landescode? Landescode { get; set; } } } diff --git a/BO4E-dotnet/COM/Angebotsposition.cs b/BO4E-dotnet/COM/Angebotsposition.cs index 5860adf3..e5b0523b 100644 --- a/BO4E-dotnet/COM/Angebotsposition.cs +++ b/BO4E-dotnet/COM/Angebotsposition.cs @@ -1,5 +1,6 @@ using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -9,20 +10,20 @@ namespace BO4E.COM public class Angebotsposition : COM { /// Bezeichnung der jeweiligen Position des Angebotsteils. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "positionsbezeichung", Required = Required.Always)] [ProtoMember(3)] - public string positionsbezeichung; + public string Positionsbezeichung { get; set; } /// Summe der Verbräuche (z.B. in kWh), die zu dieser Angebotsposition gehören. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "positionsmenge", Required = Required.Default)] [ProtoMember(4)] - public Menge positionsmenge; + public Menge Positionsmenge { get; set; } /// Preis pro Einheit/Stückpreis der jeweiligen Angebotsposition. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "positionspreis", Required = Required.Always)] [ProtoMember(5)] - public Preis positionspreis; + public Preis Positionspreis { get; set; } /// Kosten (PositionsPreis * PositionsStückzahl) für diese Angebotsposition. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "positionsbetrag", Required = Required.Default)] [ProtoMember(6)] - public Betrag positionsbetrag; // or positionskosten?? + public Betrag Positionsbetrag { get; set; } // or positionskosten?? } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Angebotsteil.cs b/BO4E-dotnet/COM/Angebotsteil.cs index 5fcc2697..4d9d2d9e 100644 --- a/BO4E-dotnet/COM/Angebotsteil.cs +++ b/BO4E-dotnet/COM/Angebotsteil.cs @@ -1,7 +1,9 @@ using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; + using BO4E.BO; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -11,28 +13,28 @@ namespace BO4E.COM public class Angebotsteil : COM { /// Identifizierung eines Subkapitels einer Anfrage, beispielsweise das Los einer Ausschreibung. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "anfrageSubreferenz", Required = Required.Default)] [ProtoMember(3)] - public string anfrageSubreferenz; + public string AnfrageSubreferenz { get; set; } /// Marktlokationen, für die dieses Angebotsteil gilt, falls vorhanden. Durch die Marktlokation ist auch die Lieferadresse festgelegt. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "lieferstellenangebotsteil", Required = Required.Default)] [ProtoMember(4)] - public List lieferstellenangebotsteil; + public List Lieferstellenangebotsteil { get; set; } /// Summe der Verbräuche aller in diesem Angebotsteil eingeschlossenen Lieferstellen. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "gesamtmengeangebotsteil", Required = Required.Default)] [ProtoMember(5)] - public Menge gesamtmengeangebotsteil; + public Menge Gesamtmengeangebotsteil { get; set; } /// Summe der Jahresenergiekosten aller in diesem Angebotsteil enthaltenen Lieferstellen. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "gesamtkostenangebotsteil", Required = Required.Default)] [ProtoMember(6)] - public Betrag gesamtkostenangebotsteil; + public Betrag Gesamtkostenangebotsteil { get; set; } /// Einzelne Positionen, die zu diesem Angebotsteil gehören. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "positionen", Required = Required.Always)] [ProtoMember(7)] - public List positionen; + public List Positionen { get; set; } } } diff --git a/BO4E-dotnet/COM/Angebotsvariante.cs b/BO4E-dotnet/COM/Angebotsvariante.cs index cc687ddf..0a936e34 100644 --- a/BO4E-dotnet/COM/Angebotsvariante.cs +++ b/BO4E-dotnet/COM/Angebotsvariante.cs @@ -1,7 +1,10 @@ using System; using System.Collections.Generic; + using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -10,33 +13,33 @@ namespace BO4E.COM [ProtoContract] public class Angebotsvariante : COM { - /// Gibt den Status eines Angebotes an.  - [JsonProperty(Required = Required.Always)] + /// Gibt den Status eines Angebotes an.  + [JsonProperty(PropertyName = "angebotsstatus", Required = Required.Always)] [ProtoMember(4)] - public Angebotsstatus angebotsstatus; + public Angebotsstatus Angebotsstatus { get; set; } /// Umschreibung des Inhalts der Angebotsvariante. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "beschreibung", Required = Required.Default)] [ProtoMember(5)] - public string beschreibung; + public string Beschreibung { get; set; } /// Datum der Erstellung der Angebotsvariante - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "erstelldatum", Required = Required.Default)] [ProtoMember(6)] - public DateTime erstelldatum; + public DateTime Erstelldatum { get; set; } /// Bis zu diesem Zeitpunkt (Tag/Uhrzeit) inklusive gilt die Angebotsvariante, z.B. 31.12.2017, 17:00 Uhr. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "bindefrist", Required = Required.Always)] [ProtoMember(7)] - public DateTime bindefrist; + public DateTime Bindefrist { get; set; } /// Aufsummierte Wirkarbeitsmenge aller Angebotsteile. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "gesamtmenge", Required = Required.Default)] [ProtoMember(8)] - public Menge gesamtmenge; + public Menge Gesamtmenge { get; set; } /// Aufsummierte Kosten aller Angebotsteile. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "gesamtkosten", Required = Required.Default)] [ProtoMember(9)] - public Betrag gesamtkosten; + public Betrag Gesamtkosten { get; set; } /// Angebotsteile werden im einfachsten Fall für eine Marktlokation oder Lieferstellenadresse erzeugt. Hier werden die Mengen und Gesamtkosten aller Angebotspositionen zusammengefasst. Eine Variante besteht mindestens aus einem Angebotsteil. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "teile", Required = Required.Always)] [ProtoMember(10)] - public List teile; + public List Teile { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/AufAbschlag.cs b/BO4E-dotnet/COM/AufAbschlag.cs index 8a0672ec..a1591085 100644 --- a/BO4E-dotnet/COM/AufAbschlag.cs +++ b/BO4E-dotnet/COM/AufAbschlag.cs @@ -1,6 +1,9 @@ using System.Collections.Generic; + using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -10,36 +13,36 @@ namespace BO4E.COM public class AufAbschlag : COM { /// Bezeichnung des Auf-/Abschlags - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "bezeichnung", Required = Required.Always)] [ProtoMember(3)] - public string bezeichnung; + public string Bezeichnung { get; set; } /// Beschreibung zum Auf-/Abschlag - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "beschreibung", Required = Required.Default)] [ProtoMember(4)] - public string beschreibung; - /// Typ des Aufabschlages (z.B. absolut oder prozentual). Details - [JsonProperty(Required = Required.Default)] + public string Beschreibung { get; set; } + /// Typ des Aufabschlages (z.B. absolut oder prozentual). Details + [JsonProperty(PropertyName = "aufAbschlagstyp", Required = Required.Default)] [ProtoMember(5)] - public AufAbschlagstyp? aufAbschlagstyp; + public AufAbschlagstyp? AufAbschlagstyp { get; set; } /// Diesem Preis oder den Kosten ist der Auf/Abschlag zugeordnet. Z.B. Arbeitspreis, Gesamtpreis etc.. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "aufAbschlagsziel", Required = Required.Default)] [ProtoMember(6)] - public AufAbschlagsziel? aufAbschlagsziel; + public AufAbschlagsziel? aufAbschlagsziel { get; set; } /// Gibt an in welcher Währungseinheit der Auf/Abschlag berechnet wird. Euro oder Ct.. (Nur im Falle absoluter Aufschlagstypen). Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "einheit", Required = Required.Default)] [ProtoMember(7)] - public Waehrungseinheit? einheit; + public Waehrungseinheit? Einheit { get; set; } /// Internetseite, auf der die Informationen zum Auf-/Abschlag veröffentlicht sind. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "website", Required = Required.Default)] [ProtoMember(8)] - public string website; + public string Website { get; set; } /// Zeitraum, in dem der Abschlag zur Anwendung kommen kann. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "gueltigkeitszeitraum", Required = Required.Default)] [ProtoMember(9)] - public Zeitraum gueltigkeitszeitraum; + public Zeitraum Gueltigkeitszeitraum { get; set; } /// Werte für die gestaffelten Auf/Abschläge. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "staffeln", Required = Required.Always)] [ProtoMember(10)] - public List staffeln; + public List Staffeln { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Aufgabe.cs b/BO4E-dotnet/COM/Aufgabe.cs index e48257fc..328d7fb2 100644 --- a/BO4E-dotnet/COM/Aufgabe.cs +++ b/BO4E-dotnet/COM/Aufgabe.cs @@ -20,46 +20,46 @@ public class Aufgabe : COM /// /// Eindeutige Kennzeichnung der Aufgabe /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "aufgabenId", Required = Required.Always)] [ProtoMember(3)] - public string aufgabenId; + public string AufgabenId { get; set; } /// /// Optionale Beschreibung der Aufgabe /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "beschreibung", Required = Required.Default)] [ProtoMember(4)] - public string beschreibung; + public string Beschreibung { get; set; } /// /// Optionale Deadline bis zu der die Aufgabe ausführt werden kann oder ihre Ausführung /// sinnvoll ist. /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "deadline", Required = Required.Default)] [ProtoMember(5)] - public DateTime? deadline; + public DateTime? Deadline { get; set; } /// /// Wurde diese Aufgabe schon ausgeführt (true)? Steht sie noch zur Bearbeitung an (false)? /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "ausgefuehrt", Required = Required.Always)] [ProtoMember(6)] - public bool ausgefuehrt; + public bool Ausgefuehrt { get; set; } /// /// Zeitpunkt zu dem die Aufgabe ausgeführt wurde. (Nur sinnvoll, wenn ausgefuehrt==true) /// [JsonConverter(typeof(LenientDateTimeConverter))] - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "ausfuehrungszeitpunkt", Required = Required.Default)] [ProtoMember(7)] - public DateTime? ausfuehrungszeitpunkt; + public DateTime? Ausfuehrungszeitpunkt { get; set; } /// /// Eindeutige Kennung des Benutzers, der diese Aufgabe ausführt hat. /// (Nur sinnvoll, wenn ausgefuehrt==true) /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "ausfuehrender", Required = Required.Default)] [ProtoMember(8)] - public string ausfuehrender; + public string Ausfuehrender { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Ausschreibungsdetail.cs b/BO4E-dotnet/COM/Ausschreibungsdetail.cs index 21baea93..0cff7cf4 100644 --- a/BO4E-dotnet/COM/Ausschreibungsdetail.cs +++ b/BO4E-dotnet/COM/Ausschreibungsdetail.cs @@ -9,64 +9,64 @@ namespace BO4E.COM public class Ausschreibungsdetail : COM { /// Identifikation einer ausgeschriebenen Marktlokation - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName="lokationsId", Required = Required.Always)] [ProtoMember(3)] - public string lokationsId; + public string LokationsId { get;set; } /// Bezeichnung für die Lokation, z.B. Zentraler Einkauf, Hamburg - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName="lokationsbezeichung", Required = Required.Default)] [ProtoMember(4)] - public string lokationsbezeichung; + public string Lokationsbezeichung { get;set; } /// In der angegebenen Netzebene wird die Marktlokation versorgt, z.B. MSP für Mittelspanung. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName="netzebeneLieferung", Required = Required.Always)] [ProtoMember(5)] - public Netzebene netzebeneLieferung; + public Netzebene NetzebeneLieferung { get;set; } /// In der angegebenen Netzebene wird die Lokation gemessen, z.B. NSP für Niederspanung. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName="netzebeneMessung", Required = Required.Always)] [ProtoMember(6)] - public Netzebene netzebeneMessung; + public Netzebene NetzebeneMessung { get;set; } /// Bezeichnung des zuständigen Netzbetreibers, z.B. Stromnetz Hamburg GmbH. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName="netzbetreiber", Required = Required.Default)] [ProtoMember(7)] - public string netzbetreiber; + public string Netzbetreiber { get;set; } /// Bezeichnung des Kunden, der die Marktlokation nutzt. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName="kunde", Required = Required.Default)] [ProtoMember(8)] - public string kunde; + public string Kunde { get;set; } /// Die Bezeichnung des Zählers an der Marktlokation - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName="zaehlernummer", Required = Required.Default)] [ProtoMember(9)] - public string zaehlernummer; + public string Zaehlernummer { get;set; } /// Spezifikation, um welche Zählertechnik es sich im vorliegenden Fall handelt, z.B. Leistungsmessung. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName="zaehlertechnik", Required = Required.Default)] [ProtoMember(10)] - public Zaehlertyp? zaehlertechnik; + public Zaehlertyp? Zaehlertechnik { get;set; } /// Zeigt an, ob es zu der Marktlokation einen Lastgang gibt. Falls ja, kann dieser abgerufen werden und daraus die Verbrauchswerte ermittelt werden. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName="lastgangVorhanden", Required = Required.Default)] [ProtoMember(11)] - public bool? lastgangVorhanden; + public bool? LastgangVorhanden { get;set; } /// Die Adresse an der die Marktlokation sich befindet. Struktur - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName="lokationsadresse", Required = Required.Always)] [ProtoMember(12)] - public Adresse lokationsadresse; + public Adresse Lokationsadresse { get;set; } /// Die (evtl. abweichende) Rechnungsadresse. Struktur - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName="rechnungsadresse", Required = Required.Default)] [ProtoMember(13)] - public Adresse rechnungsadresse; + public Adresse Rechnungsadresse { get;set; } /// Prognosewert für die Jahresarbeit der ausgeschriebenen Lokation. Struktur - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName="prognoseJahresarbeit", Required = Required.Default)] [ProtoMember(14)] - public Menge prognoseJahresarbeit; + public Menge PrognoseJahresarbeit { get;set; } /// Ein Prognosewert für die Arbeit innerhalb des angefragten Lieferzeitraums der ausgeschriebenen Lokation. Struktur - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName="prognoseArbeitLieferzeitraum", Required = Required.Default)] [ProtoMember(15)] - public Menge prognoseArbeitLieferzeitraum; + public Menge PrognoseArbeitLieferzeitraum { get;set; } /// Prognosewert für die abgenommene maximale Leistung der ausgeschriebenen Lokation. Struktur - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName="prognoseLeistung", Required = Required.Default)] [ProtoMember(16)] - public Menge prognoseLeistung; + public Menge PrognoseLeistung { get;set; } /// Angefragter Zeitraum für die ausgeschriebene Belieferung. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName="lieferzeitraum", Required = Required.Default)] [ProtoMember(17)] - public Zeitraum lieferzeitraum; + public Zeitraum Lieferzeitraum { get;set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Ausschreibungslos.cs b/BO4E-dotnet/COM/Ausschreibungslos.cs index 20814cb5..fa03f27b 100644 --- a/BO4E-dotnet/COM/Ausschreibungslos.cs +++ b/BO4E-dotnet/COM/Ausschreibungslos.cs @@ -1,6 +1,9 @@ using System.Collections.Generic; + using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -10,72 +13,72 @@ namespace BO4E.COM public class Ausschreibungslos : COM { /// Laufende Nummer des Loses - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "losnummer", Required = Required.Always)] [ProtoMember(3)] - public string losnummer; + public string Losnummer { get; set; } /// Bezeichnung der Ausschreibung - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "bezeichung", Required = Required.Always)] [ProtoMember(4)] - public string bezeichung; + public string Bezeichung { get; set; } /// Bemerkung des Kunden zur Ausschreibung - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "bemerkung", Required = Required.Default)] [ProtoMember(5)] - public string bemerkung; - /// Bezeichnung der Preismodelle in Ausschreibungen für die Energielieferung. Details - [JsonProperty(Required = Required.Always)] + public string Bemerkung { get; set; } + /// Bezeichnung der Preismodelle in Ausschreibungen für die Energielieferung. Details + [JsonProperty(PropertyName = "preismodell", Required = Required.Always)] [ProtoMember(6)] - public Preismodell preismodell; + public Preismodell Preismodell { get; set; } /// Unterscheidungsmöglichkeiten für die Sparte. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "energieart", Required = Required.Always)] [ProtoMember(7)] - public Sparte energieart; + public Sparte Energieart { get; set; } /// Aufzählung der Möglichkeiten zur Rechnungslegung in Ausschreibungen. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "wunschRechnungslegung", Required = Required.Always)] [ProtoMember(8)] - public Rechnungslegung wunschRechnungslegung; + public Rechnungslegung WunschRechnungslegung { get; set; } /// Aufzählung der Möglichkeiten zu Vertragsformen in Ausschreibungen. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "wunschVertragsform", Required = Required.Always)] [ProtoMember(9)] - public Vertragsform wunschVertragsform; + public Vertragsform WunschVertragsform { get; set; } /// Name des Lizenzpartners - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "betreutDurch", Required = Required.Always)] [ProtoMember(10)] - public string betreutDurch; + public string BetreutDurch { get; set; } /// Anzahl der Lieferstellen in dieser Ausschreibung - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "anzahlLieferstellen", Required = Required.Always)] [ProtoMember(11)] - public int anzahlLieferstellen; // does this make sense? lieferstellen.Size()? + public int AnzahlLieferstellen { get; set; } // does this make sense? lieferstellen.Size()? /// Die ausgeschriebenen Lieferstellen. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "lieferstellen", Required = Required.Always)] [ProtoMember(12)] - public List lieferstellen; + public List Lieferstellen { get; set; } /// Gibt den Gesamtjahresverbrauch (z.B. in kWh) aller in diesem Los enthaltenen Lieferstellen an. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "gesamtmenge", Required = Required.Default)] [ProtoMember(13)] - public Menge gesamtmenge; + public Menge Gesamtmenge { get; set; } /// Mindestmenge Toleranzband (kWh, %) - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "wunschMindestmenge", Required = Required.Default)] [ProtoMember(14)] - public Menge wunschMindestmenge; + public Menge WunschMindestmenge { get; set; } /// Maximalmenge Toleranzband (kWh, %) - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "wunschMaximalmenge", Required = Required.Default)] [ProtoMember(15)] - public Menge wunschMaximalmenge; + public Menge WunschMaximalmenge { get; set; } /// Angabe, in welchem Intervall die Angebotsabgabe wiederholt werden darf. Angabe nur gesetzt für die 2. Phase bei öffentlich-rechtlichen Ausschreibungen, ansonsten NULL - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "wiederholungsintervall", Required = Required.Default)] [ProtoMember(16)] - public Zeitraum wiederholungsintervall; + public Zeitraum Wiederholungsintervall { get; set; } /// Zeitraum, für den die in diesem Los enthaltenen Lieferstellen beliefert werden sollen - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "lieferzeitraum", Required = Required.Default)] [ProtoMember(17)] - public Zeitraum lieferzeitraum; + public Zeitraum lieferzeitraum { get; set; } /// Kundenwunsch zur Kündigungsfrist in der Ausschreibung. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "wunschKuendingungsfrist", Required = Required.Default)] [ProtoMember(18)] - public Zeitraum wunschKuendingungsfrist; + public Zeitraum WunschKuendingungsfrist { get; set; } /// Kundenwunsch zum Zahlungsziel in der Ausschreibung. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "wunschZahlungsziel", Required = Required.Default)] [ProtoMember(19)] - public Zeitraum wunschZahlungsziel; + public Zeitraum WunschZahlungsziel { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Betrag.cs b/BO4E-dotnet/COM/Betrag.cs index 00503744..4f2dc231 100644 --- a/BO4E-dotnet/COM/Betrag.cs +++ b/BO4E-dotnet/COM/Betrag.cs @@ -1,6 +1,8 @@ using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -10,14 +12,14 @@ namespace BO4E.COM public class Betrag : COM { /// Gibt den Betrag des Preises an. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "wert", Required = Required.Always)] [FieldName("value", Language.EN)] [ProtoMember(3)] - public decimal wert; + public decimal Wert { get; set; } /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "waehrung", Required = Required.Always)] [FieldName("currency", Language.EN)] [ProtoMember(4)] - public Waehrungscode waehrung; + public Waehrungscode Waehrung { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/COM.cs b/BO4E-dotnet/COM/COM.cs index 7347cfca..748e4e01 100644 --- a/BO4E-dotnet/COM/COM.cs +++ b/BO4E-dotnet/COM/COM.cs @@ -72,11 +72,11 @@ public abstract class COM : IEquatable /// /// User properties (non bo4e standard) /// - [JsonProperty(PropertyName = BusinessObject.userPropertiesName, Required = Required.Default, Order = 2)] + [JsonProperty(PropertyName = BusinessObject.USER_PROPERTIES_NAME, Required = Required.Default, Order = 2)] [ProtoMember(2)] [JsonExtensionData] [DataCategory(DataCategory.USER_PROPERTIES)] - public IDictionary userProperties; + public IDictionary UserProperties { get; set; } /// /// BO4E components are considered equal iff all of their elements/fields are equal. @@ -113,13 +113,13 @@ public override int GetHashCode() unchecked { result *= this.GetType().GetHashCode(); - foreach (FieldInfo field in this.GetType().GetFields()) + foreach (var prop in this.GetType().GetProperties()) { - if (field.GetValue(this) != null) + if (prop.GetValue(this) != null) { // Using +19 because the default hash code of uninitialised enums is zero. // This would screw up the calculation such that all objects with at least one null value had the same hash code, namely 0. - result *= 19 + field.GetValue(this).GetHashCode(); + result *= 19 + prop.GetValue(this).GetHashCode(); } } return result; @@ -143,8 +143,8 @@ public bool IsValid() /// /// allows adding a GUID to COM objects for tracking across systems /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, Required = Required.Default, Order = 1)] + [JsonProperty(PropertyName="guid", NullValueHandling = NullValueHandling.Ignore, Required = Required.Default, Order = 1)] [ProtoMember(1)] - public string guid; + public string Guid { get;set; } } } diff --git a/BO4E-dotnet/COM/Dienstleistung.cs b/BO4E-dotnet/COM/Dienstleistung.cs index 831b2130..64f1bdf1 100644 --- a/BO4E-dotnet/COM/Dienstleistung.cs +++ b/BO4E-dotnet/COM/Dienstleistung.cs @@ -1,5 +1,7 @@ using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -8,13 +10,13 @@ namespace BO4E.COM [ProtoContract] public class Dienstleistung : COM { - /// Eindeutige Nummer der Dienstleistung. Details - [JsonProperty(Required = Required.Always)] + /// Eindeutige Nummer der Dienstleistung. Details + [JsonProperty(PropertyName = "dienstleistungstyp", Required = Required.Always)] [ProtoMember(3)] - public Dienstleistungstyp dienstleistungstyp; + public Dienstleistungstyp Dienstleistungstyp { get; set; } /// Bezeichnung der Dienstleistung. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "bezeichnung", Required = Required.Always)] [ProtoMember(4)] - public string bezeichnung; + public string Bezeichnung { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Energieherkunft.cs b/BO4E-dotnet/COM/Energieherkunft.cs index 3bbbdfe7..ceb458a5 100644 --- a/BO4E-dotnet/COM/Energieherkunft.cs +++ b/BO4E-dotnet/COM/Energieherkunft.cs @@ -1,5 +1,7 @@ using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -8,13 +10,13 @@ namespace BO4E.COM [ProtoContract] public class Energieherkunft : COM { - /// Art der Erzeugung der Energie. Details - [JsonProperty(Required = Required.Always)] + /// Art der Erzeugung der Energie. Details + [JsonProperty(PropertyName = "erzeugungsart", Required = Required.Always)] [ProtoMember(3)] - public Erzeugungsart erzeugungsart; + public Erzeugungsart Erzeugungsart { get; set; } /// Prozentualer Anteil der jeweiligen Erzeugungsart. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "anteilProzent", Required = Required.Always)] [ProtoMember(4)] - public decimal anteilProzent; + public decimal AnteilProzent { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Energiemix.cs b/BO4E-dotnet/COM/Energiemix.cs index 7078de0f..1ca1f6dc 100644 --- a/BO4E-dotnet/COM/Energiemix.cs +++ b/BO4E-dotnet/COM/Energiemix.cs @@ -1,6 +1,9 @@ using System.Collections.Generic; + using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -10,52 +13,52 @@ namespace BO4E.COM public class Energiemix : COM { /// Eindeutige Nummer zur Identifizierung des Energiemixes. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "energiemixnummer", Required = Required.Always)] [ProtoMember(3)] - public int energiemixnummer; + public int Energiemixnummer { get; set; } /// Strom oder Gas etc.. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "energieart", Required = Required.Always)] [ProtoMember(4)] - public Sparte energieart; + public Sparte Energieart { get; set; } /// Bezeichnung des Energiemix. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "bezeichnung", Required = Required.Always)] [ProtoMember(5)] - public string bezeichnung; + public string Bezeichnung { get; set; } /// Bemerkung zum Energiemix. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "bemerkung", Required = Required.Default)] [ProtoMember(6)] - public string bemerkung; + public string Bemerkung { get; set; } /// Jahr, für das der Energiemix gilt. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "gueltigkeitsjahr", Required = Required.Always)] [ProtoMember(7)] - public int gueltigkeitsjahr; + public int Gueltigkeitsjahr { get; set; } /// Höhe des erzeugten CO2-Ausstosses in g/kWh. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "cO2Emission", Required = Required.Default)] [ProtoMember(8)] - public decimal? cO2Emission; + public decimal? CO2Emission { get; set; } /// Höhe des erzeugten Atommülls in g/kWh. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "atommuell", Required = Required.Default)] [ProtoMember(9)] - public decimal? atommuell; + public decimal? Atommuell { get; set; } /// Zertifikat für den Energiemix. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "oekozertifikat", Required = Required.Default)] [ProtoMember(10)] - public List oekozertifikat; - /// Ökolabel für den Energiemix. Details - [JsonProperty(Required = Required.Default)] + public List oekozertifikat { get; set; } + /// Ökolabel für den Energiemix. Details + [JsonProperty(PropertyName = "oekolabel", Required = Required.Default)] [ProtoMember(11)] - public List oekolabel; + public List Oekolabel { get; set; } /// Kennzeichen, ob der Versorger zu den Öko Top Ten gehört. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "oekoTopTen", Required = Required.Default)] [ProtoMember(12)] - public bool? oekoTopTen; + public bool? OekoTopTen { get; set; } /// Internetseite, auf der die Strommixdaten veröffentlicht sind. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "website", Required = Required.Default)] [ProtoMember(13)] - public string website; + public string Website { get; set; } /// Anteile der jeweiligen Erzeugungsart. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "anteil", Required = Required.Always)] [ProtoMember(14)] - public List anteil; + public List Anteil { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/GenericStringStringInfo.cs b/BO4E-dotnet/COM/GenericStringStringInfo.cs index a8b06d9d..3b773617 100644 --- a/BO4E-dotnet/COM/GenericStringStringInfo.cs +++ b/BO4E-dotnet/COM/GenericStringStringInfo.cs @@ -1,4 +1,7 @@ using System.Collections.Generic; + +using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -13,12 +16,14 @@ public class GenericStringStringInfo : COM /// key (named differently because key is a reserved keyword) /// [ProtoMember(3)] - public string keyColumn; + [JsonProperty(PropertyName = "keyColumn")] + public string KeyColumn { get; set; } /// /// value /// [ProtoMember(4)] - public string value; + [JsonProperty(PropertyName = "value")] + public string Value { get; set; } /// /// convert object to a key value pair @@ -26,7 +31,7 @@ public class GenericStringStringInfo : COM /// public KeyValuePair ToKeyValuePair() { - return new KeyValuePair(this.keyColumn, this.value); + return new KeyValuePair(this.KeyColumn, this.Value); } } } diff --git a/BO4E-dotnet/COM/Geokoordinaten.cs b/BO4E-dotnet/COM/Geokoordinaten.cs index 05e6a049..01224160 100644 --- a/BO4E-dotnet/COM/Geokoordinaten.cs +++ b/BO4E-dotnet/COM/Geokoordinaten.cs @@ -1,4 +1,5 @@ using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -8,12 +9,12 @@ namespace BO4E.COM public class Geokoordinaten : COM { /// Gibt den Breitengrad eines entsprechenden Ortes an. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "breitengrad", Required = Required.Always)] [ProtoMember(3)] - public decimal breitengrad; + public decimal Breitengrad { get; set; } /// Gibt den Längengrad eines entsprechenden Ortes an. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "laengengrad", Required = Required.Always)] [ProtoMember(4)] - public decimal laengengrad; + public decimal Laengengrad { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Geraet.cs b/BO4E-dotnet/COM/Geraet.cs index 5670a2d6..7d0971c7 100644 --- a/BO4E-dotnet/COM/Geraet.cs +++ b/BO4E-dotnet/COM/Geraet.cs @@ -1,4 +1,5 @@ using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -8,12 +9,12 @@ namespace BO4E.COM public class Geraet : COM { /// Die auf dem Geräte aufgedruckte Nummer, die vom MSB vergeben wird. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "geraetenummer", Required = Required.Default)] [ProtoMember(3)] - public string geraetenummer; - /// Festlegung der Eigenschaften des Gerätes. Z.B. Wandler MS/NS. Details - [JsonProperty(Required = Required.Default)] + public string Geraetenummer { get; set; } + /// Festlegung der Eigenschaften des Gerätes. Z.B. Wandler MS/NS. Details + [JsonProperty(PropertyName = "geraeteeigenschaften", Required = Required.Default)] [ProtoMember(4)] - public Geraeteeigenschaften geraeteeigenschaften; + public Geraeteeigenschaften Geraeteeigenschaften { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Geraeteeigenschaften.cs b/BO4E-dotnet/COM/Geraeteeigenschaften.cs index 91dad511..577a8c72 100644 --- a/BO4E-dotnet/COM/Geraeteeigenschaften.cs +++ b/BO4E-dotnet/COM/Geraeteeigenschaften.cs @@ -1,8 +1,12 @@ +using System; +using System.Collections.Generic; + using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; -using System.Collections.Generic; namespace BO4E.COM { @@ -10,15 +14,15 @@ namespace BO4E.COM [ProtoContract] public class Geraeteeigenschaften : COM { - /// Der Typ eines Gerätes, beispielsweise Drehstromzähler. Details - [JsonProperty(Required = Required.Always)] + /// Der Typ eines Gerätes, beispielsweise Drehstromzähler. Details + [JsonProperty(PropertyName = "geraetetyp", Required = Required.Always)] [ProtoMember(3)] - public Geraetetyp geraetetyp; + public Geraetetyp Geraetetyp { get; set; } - /// Weitere Merkmale des Geräts, zum Beispiel Mehrtarif, Eintarif etc.. Details - [JsonProperty(Required = Required.Default)] + /// Weitere Merkmale des Geräts, zum Beispiel Mehrtarif, Eintarif etc.. Details + [JsonProperty(PropertyName = "geraetemerkmal", Required = Required.Default)] [ProtoMember(4)] - public Geraetemerkmal? geraetemerkmal; + public Geraetemerkmal? Geraetemerkmal { get; set; } /// /// Für nicht feste Fields, bsw: 'faktor' @@ -26,6 +30,7 @@ public class Geraeteeigenschaften : COM [JsonProperty(Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1005)] - public Dictionary parameter; // ToDo: add docstring + [Obsolete("Use the COM.UserProperties instead", true)] + private Dictionary Parameter { get; set; } // ToDo: add docstring } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Hardware.cs b/BO4E-dotnet/COM/Hardware.cs index 8e4eead6..712be7d3 100644 --- a/BO4E-dotnet/COM/Hardware.cs +++ b/BO4E-dotnet/COM/Hardware.cs @@ -1,6 +1,8 @@ using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -9,35 +11,35 @@ namespace BO4E.COM [ProtoContract] public class Hardware : COM { - /// Eindeutiger Typ der Hardware. Details - [JsonProperty(Required = Required.Always)] + /// Eindeutiger Typ der Hardware. Details + [JsonProperty(PropertyName = "geraetetyp", Required = Required.Always)] [ProtoMember(3)] - public Geraetetyp geraetetyp; + public Geraetetyp Geraetetyp { get; set; } /// Bezeichnung der Hardware. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "bezeichnung", Required = Required.Always)] [ProtoMember(4)] - public string bezeichnung; + public string Bezeichnung { get; set; } /// Bezeichnung der Hardware. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "geraeteeigenschaften", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1005)] - public Geraeteeigenschaften geraeteeigenschaften; + public Geraeteeigenschaften Geraeteeigenschaften { get; set; } /// /// Gerätenummer des Wandlers /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "geraetenummer", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1006)] - public string geraetenummer; + public string Geraetenummer { get; set; } /// /// Referenz auf die Gerätenummer des Zählers /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "geraetereferenz", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1007)] - public string geraetereferenz; + public string Geraetereferenz { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Katasteradresse.cs b/BO4E-dotnet/COM/Katasteradresse.cs index 96063398..a97ec028 100644 --- a/BO4E-dotnet/COM/Katasteradresse.cs +++ b/BO4E-dotnet/COM/Katasteradresse.cs @@ -1,5 +1,7 @@ using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -10,13 +12,13 @@ public class Katasteradresse : COM { /// Die Gemarkung oder die Flur in der die Liegenschaft liegt [DataCategory(DataCategory.ADDRESS)] - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "gemarkung_flur", Required = Required.Always)] [ProtoMember(3)] - public string gemarkung_flur; + public string Gemarkung_flur { get; set; } /// Das Flurstück mit dem die Liegenschaft (Grundstück) bezeichnet ist. [DataCategory(DataCategory.ADDRESS)] - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "flurstueck", Required = Required.Always)] [ProtoMember(4)] - public string flurstueck; + public string Flurstueck { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Konzessionsabgabe.cs b/BO4E-dotnet/COM/Konzessionsabgabe.cs index e84f15d7..239467ac 100644 --- a/BO4E-dotnet/COM/Konzessionsabgabe.cs +++ b/BO4E-dotnet/COM/Konzessionsabgabe.cs @@ -1,5 +1,7 @@ using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -14,22 +16,22 @@ public class Konzessionsabgabe : COM /// /// Art der Abgabe /// - [JsonProperty(Required = Required.Always, Order = 8)] + [JsonProperty(PropertyName = "satz", Required = Required.Always, Order = 8)] [ProtoMember(3)] - public AbgabeArt satz; + public AbgabeArt Satz { get; set; } /// /// Konzessionsabgabe in E/kWh /// - [JsonProperty(Required = Required.Always, Order = 5)] + [JsonProperty(PropertyName = "kosten", Required = Required.Always, Order = 5)] [ProtoMember(4)] - public decimal kosten; + public decimal Kosten { get; set; } /// /// Gebührenkategorie der Konzessionsabgabe /// - [JsonProperty(Required = Required.Always, Order = 6)] + [JsonProperty(PropertyName = "kategorie", Required = Required.Always, Order = 6)] [ProtoMember(5)] - public string kategorie; + public string Kategorie { get; set; } } } diff --git a/BO4E-dotnet/COM/Kostenblock.cs b/BO4E-dotnet/COM/Kostenblock.cs index f2a6ec62..32d118e0 100644 --- a/BO4E-dotnet/COM/Kostenblock.cs +++ b/BO4E-dotnet/COM/Kostenblock.cs @@ -1,5 +1,7 @@ using System.Collections.Generic; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -9,16 +11,16 @@ namespace BO4E.COM public class Kostenblock : COM { /// Bezeichnung für einen Kostenblock. Z.B. Netzkosten, Messkosten, Umlagen, etc. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "kostenblockbezeichnung", Required = Required.Always)] [ProtoMember(3)] - public string kostenblockbezeichnung; + public string Kostenblockbezeichnung { get; set; } /// Die Summe aller Kostenpositionen dieses Blocks - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "summeKostenblock", Required = Required.Default)] [ProtoMember(4)] - public Betrag summeKostenblock; + public Betrag SummeKostenblock { get; set; } /// Hier sind die Details zu einer Kostenposition aufgeführt. Z.B.:Alliander Netz Heinsberg GmbH, 01.02.2018, 31.12.2018, Arbeitspreis HT, 3.660 kWh, 5,8200 ct/kWh, 213,01 €. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "kostenpositionen", Required = Required.Default)] [ProtoMember(5)] - public List kostenpositionen; + public List Kostenpositionen { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Kostenposition.cs b/BO4E-dotnet/COM/Kostenposition.cs index aed6d861..5f0a0dc5 100644 --- a/BO4E-dotnet/COM/Kostenposition.cs +++ b/BO4E-dotnet/COM/Kostenposition.cs @@ -1,5 +1,7 @@ using System; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -9,40 +11,40 @@ namespace BO4E.COM public class Kostenposition : COM { /// Ein Titel für die Zeile. Hier kann z.B. der Netzbetreiber eingetragen werden, wenn es sich um Netzkosten handelt. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "positionstitel", Required = Required.Always)] [ProtoMember(3)] - public string positionstitel; + public string Positionstitel { get; set; } /// von-Datum der Kostenzeitscheibe. Z.B. 2017-01-01 - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "von", Required = Required.Default)] [ProtoMember(4)] - public DateTime? von; + public DateTime? Von { get; set; } /// bis-Datum der Kostenzeitscheibe. Z.B. 2017-12-31 - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "bis", Required = Required.Default)] [ProtoMember(5)] - public DateTime? bis; + public DateTime? Bis { get; set; } /// Bezeichnung für den Artikel für den die Kosten ermittelt wurden. Beispiel: Arbeitspreis HT - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "artikelbezeichnung", Required = Required.Always)] [ProtoMember(6)] - public string artikelbezeichnung; + public string Artikelbezeichnung { get; set; } /// Detaillierung des Artikels (optional). Beispiel: Drehstromzähler - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "artikeldetail", Required = Required.Default)] [ProtoMember(7)] - public string artikeldetail; - /// Die Menge, die in die Kostenberechnung eingeflossen ist. Beispiel: 3.660 kWh. Details - [JsonProperty(Required = Required.Default)] + public string Artikeldetail { get; set; } + /// Die Menge, die in die Kostenberechnung eingeflossen ist. Beispiel: 3.660 kWh. Details + [JsonProperty(PropertyName = "menge", Required = Required.Default)] [ProtoMember(8)] - public Menge menge; - /// Wenn es einen zeitbasierten Preis gibt (z.B. €/Jahr), dann ist hier die Menge angegeben mit der die Kosten berechnet wurden. Z.B.  138 Tage. Details - [JsonProperty(Required = Required.Default)] + public Menge Menge { get; set; } + /// Wenn es einen zeitbasierten Preis gibt (z.B. €/Jahr), dann ist hier die Menge angegeben mit der die Kosten berechnet wurden. Z.B.  138 Tage. Details + [JsonProperty(PropertyName = "zeitmenge", Required = Required.Default)] [ProtoMember(9)] - public Menge zeitmenge; + public Menge Zeitmenge { get; set; } /// Der Preis für eine Einheit. Beispiele: 5,8200 ct/kWh oder 55 €/Jahr. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "einzelpreis", Required = Required.Always)] [ProtoMember(10)] - public Preis einzelpreis; + public Preis Einzelpreis { get; set; } /// Der errechnete Gesamtbetrag der Position als Ergebnis der Berechnung <Menge> x <Einzelpreis> oder <Einzelpreis> / (Anzahl Tage Jahr) * <zeitmenge>. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "betragKostenposition", Required = Required.Always)] [ProtoMember(11)] - public Betrag betragKostenposition; + public Betrag BetragKostenposition { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Kriteriumswert.cs b/BO4E-dotnet/COM/Kriteriumswert.cs index cf872a75..de4f5845 100644 --- a/BO4E-dotnet/COM/Kriteriumswert.cs +++ b/BO4E-dotnet/COM/Kriteriumswert.cs @@ -1,5 +1,7 @@ using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -13,15 +15,15 @@ public class KriteriumsWert : COM /// /// Hier steht, für welches Kriterium der Wert gilt. Z.B. Postleitzahlen. /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "kriterium", Required = Required.Always)] [ProtoMember(3)] - public Tarifregionskriterium kriterium; + public Tarifregionskriterium Kriterium { get; set; } /// /// Ein Wert, passend zum Kriterium. Z.B. eine Postleitzahl. /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "wert", Required = Required.Always)] [ProtoMember(4)] - public string wert; + public string Wert { get; set; } } } diff --git a/BO4E-dotnet/COM/Marktrolle.cs b/BO4E-dotnet/COM/Marktrolle.cs index 440cc9ed..2bb67fcb 100644 --- a/BO4E-dotnet/COM/Marktrolle.cs +++ b/BO4E-dotnet/COM/Marktrolle.cs @@ -1,5 +1,7 @@ using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -14,23 +16,25 @@ public class Marktrolle : COM /// /// rollencodenummer von Marktrolle /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "rollencodenummer", Required = Required.Default)] [ProtoMember(3)] - public string rollencodenummer; + public string Rollencodenummer { get; set; } /// /// code von Marktrolle /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "code", Required = Required.Default)] [NonOfficial(NonOfficialCategory.UNSPECIFIED)] [ProtoMember(4)] - public string code; + public string Code { get; set; } /// /// List of Marktrolle. Details siehe /// [JsonProperty(Required = Required.Always)] [ProtoMember(5)] - public ENUM.Marktrolle marktrolle; +#pragma warning disable IDE1006 // Naming Styles because Marktrolle is already the name of the enum + public ENUM.Marktrolle marktrolle { get; set; } +#pragma warning restore IDE1006 // Naming Styles } } diff --git a/BO4E-dotnet/COM/Menge.cs b/BO4E-dotnet/COM/Menge.cs index 9037c1a7..4a8f7899 100644 --- a/BO4E-dotnet/COM/Menge.cs +++ b/BO4E-dotnet/COM/Menge.cs @@ -1,6 +1,8 @@ using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -10,14 +12,14 @@ namespace BO4E.COM public class Menge : COM { /// Gibt den absoluten Wert der Menge an. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "wert", Required = Required.Always)] [FieldName("value", Language.EN)] [ProtoMember(3)] - public decimal wert; + public decimal Wert { get; set; } /// Gibt die Einheit zum jeweiligen Wert an. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "einheit", Required = Required.Always)] [FieldName("unit", Language.EN)] [ProtoMember(4)] - public Mengeneinheit einheit; + public Mengeneinheit Einheit { get; set; } } } diff --git a/BO4E-dotnet/COM/Messlokationszuordnung.cs b/BO4E-dotnet/COM/Messlokationszuordnung.cs index dee575c5..5e105994 100644 --- a/BO4E-dotnet/COM/Messlokationszuordnung.cs +++ b/BO4E-dotnet/COM/Messlokationszuordnung.cs @@ -1,7 +1,10 @@ using System; + using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -12,20 +15,20 @@ public class Messlokationszuordnung : COM { /// Die Messlokations-ID, früher die Zählpunktbezeichnung. [DataCategory(DataCategory.POD)] - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "messlokationsId", Required = Required.Always)] [ProtoMember(3)] - public string messlokationsId; + public string MesslokationsId { get; set; } /// Die Operation, mit der eine Messung an dieser Lokation für den Gesamtverbrauch der Marktlokation verrechnet wird. Beispielsweise bei einer Untermessung, wird der Verbauch der Untermessung subtrahiert. Details - [JsonProperty(Required = Required.Default)] // Default weil Hochfrequenz/energy-service-hub#35 + [JsonProperty(PropertyName = "arithmetik", Required = Required.Default)] // Default weil Hochfrequenz/energy-service-hub#35 [ProtoMember(4)] - public ArithmetischeOperation? arithmetik; + public ArithmetischeOperation? Arithmetik { get; set; } /// Zeitpunkt, ab dem die Messlokation zur Marktlokation gehört - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "gueltigSeit", Required = Required.Default)] [ProtoMember(5)] - public DateTime? gueltigSeit; + public DateTime? GueltigSeit { get; set; } /// Zeitpunkt, bis zu dem die Messlokation zur Marktlokation gehört - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "gueltigBis", Required = Required.Default)] [ProtoMember(6)] - public DateTime? gueltigBis; + public DateTime? GueltigBis { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Notiz.cs b/BO4E-dotnet/COM/Notiz.cs index 00c30d40..5bc7d1db 100644 --- a/BO4E-dotnet/COM/Notiz.cs +++ b/BO4E-dotnet/COM/Notiz.cs @@ -1,8 +1,11 @@ using System; using System.Runtime.Serialization; using System.Text.RegularExpressions; + using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -18,23 +21,23 @@ public class Notiz : COM /// /// Person oder System, das die Notiz angelegt hat. /// - [JsonProperty(Required = Required.Always, Order = 7)] + [JsonProperty(PropertyName = "autor", Required = Required.Always, Order = 7)] [ProtoMember(3)] - public string autor; + public string Autor { get; set; } /// /// Zeitpunkt zu dem die Notiz angelegt wurde /// - [JsonProperty(Required = Required.Always, Order = 8)] + [JsonProperty(PropertyName = "zeitpunkt", Required = Required.Always, Order = 8)] [ProtoMember(4)] - public DateTime zeitpunkt; + public DateTime Zeitpunkt { get; set; } /// /// Inhalt der Notiz (Freitext) /// - [JsonProperty(Required = Required.Always, Order = 5)] + [JsonProperty(PropertyName = "inhalt", Required = Required.Always, Order = 5)] [ProtoMember(5)] - public string inhalt; + public string Inhalt { get; set; } [JsonIgnore] @@ -47,7 +50,7 @@ public class Notiz : COM [OnDeserialized] public void CleanUpSapNotes(StreamingContext context) { - this.inhalt = TrailingMinusRegex.Replace(inhalt, string.Empty); + this.Inhalt = TrailingMinusRegex.Replace(Inhalt, string.Empty); } } } diff --git a/BO4E-dotnet/COM/PhysikalischerWert.cs b/BO4E-dotnet/COM/PhysikalischerWert.cs index 92dc82cb..6ab65766 100644 --- a/BO4E-dotnet/COM/PhysikalischerWert.cs +++ b/BO4E-dotnet/COM/PhysikalischerWert.cs @@ -1,6 +1,10 @@ using System; + using BO4E.ENUM; using BO4E.meta; + +using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -16,13 +20,15 @@ public class PhysikalischerWert : COM /// numerischer Wert /// [ProtoMember(3)] - public readonly decimal wert; + [JsonProperty(Required = Required.Always, PropertyName = "wert")] + public decimal Wert { get; set; } /// - /// Einheit von + /// Einheit von /// [ProtoMember(4)] - public readonly Mengeneinheit einheit; + [JsonProperty(Required=Required.Always, PropertyName = "einheit")] + public Mengeneinheit Einheit { get; set; } /// /// initialise with wert and einheit @@ -31,8 +37,8 @@ public class PhysikalischerWert : COM /// zugehörige Mengeneinheit public PhysikalischerWert(decimal wert, Mengeneinheit einheit) { - this.wert = wert; - this.einheit = einheit; + this.Wert = wert; + this.Einheit = einheit; } /// @@ -42,11 +48,16 @@ public PhysikalischerWert(decimal wert, Mengeneinheit einheit) /// zugehörige Einheit als string (case insensitive) public PhysikalischerWert(decimal wert, string einheitString) { - this.wert = wert; - if(!Enum.TryParse(einheitString, true, out this.einheit)) + this.Wert = wert; + + if (!Enum.TryParse(einheitString, true, out Mengeneinheit einheit)) { throw new ArgumentException($"'{einheitString}' is not a valid Mengeneinheit"); } + else + { + this.Einheit = einheit; + } } } } diff --git a/BO4E-dotnet/COM/PositionsAufAbschlag.cs b/BO4E-dotnet/COM/PositionsAufAbschlag.cs index be2a765b..ee757c7f 100644 --- a/BO4E-dotnet/COM/PositionsAufAbschlag.cs +++ b/BO4E-dotnet/COM/PositionsAufAbschlag.cs @@ -1,5 +1,7 @@ using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -9,24 +11,24 @@ namespace BO4E.COM public class PositionsAufAbschlag : COM { /// Bezeichnung des Auf-/Abschlags - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "bezeichnung", Required = Required.Always)] [ProtoMember(3)] - public string bezeichnung; + public string Bezeichnung { get; set; } /// Beschreibung zum Auf-/Abschlag - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "beschreibung", Required = Required.Always)] [ProtoMember(4)] - public string beschreibung; - /// Typ des AufAbschlages. Details - [JsonProperty(Required = Required.Always)] + public string Beschreibung { get; set; } + /// Typ des AufAbschlages. Details + [JsonProperty(PropertyName = "aufAbschlagstyp", Required = Required.Always)] [ProtoMember(5)] - public AufAbschlagstyp aufAbschlagstyp; + public AufAbschlagstyp AufAbschlagstyp { get; set; } /// Höhe des Auf-/Abschlages - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "aufAbschlagswert", Required = Required.Always)] [ProtoMember(6)] - public decimal aufAbschlagswert; + public decimal AufAbschlagswert { get; set; } /// Einheit, in der der Auf-/Abschlag angegeben ist (z.B. ct/kWh). Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "aufAbschlagswaehrung", Required = Required.Always)] [ProtoMember(7)] - public Waehrungseinheit aufAbschlagswaehrung; + public Waehrungseinheit AufAbschlagswaehrung { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Preis.cs b/BO4E-dotnet/COM/Preis.cs index f49ac5ae..1714831d 100644 --- a/BO4E-dotnet/COM/Preis.cs +++ b/BO4E-dotnet/COM/Preis.cs @@ -1,6 +1,8 @@ using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -10,26 +12,26 @@ namespace BO4E.COM public class Preis : COM { /// Gibt die nomiale Höhe des Preises an. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "wert", Required = Required.Always)] [FieldName("value", Language.EN)] [ProtoMember(3)] - public decimal wert; + public decimal Wert { get; set; } /// Währungseinheit für den Preis, z.B. Euro oder Ct. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "einheit", Required = Required.Always)] [FieldName("currency", Language.EN)] [ProtoMember(4)] - public Waehrungseinheit einheit; + public Waehrungseinheit Einheit { get; set; } /// Angabe, für welche Bezugsgröße der Preis gilt. Z.B. kWh. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "bezugswert", Required = Required.Always)] [FieldName("reference", Language.EN)] [ProtoMember(5)] - public Mengeneinheit bezugswert; + public Mengeneinheit Bezugswert { get; set; } /// /// Gibt den Status des veröffentlichten Preises an /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "status", Required = Required.Default)] [ProtoMember(6)] - public Preisstatus? status; + public Preisstatus? Status { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Preisgarantie.cs b/BO4E-dotnet/COM/Preisgarantie.cs index 01d90880..e5c1bb4b 100644 --- a/BO4E-dotnet/COM/Preisgarantie.cs +++ b/BO4E-dotnet/COM/Preisgarantie.cs @@ -1,5 +1,7 @@ using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -12,16 +14,16 @@ namespace BO4E.COM public class Preisgarantie : COM { /// Freitext zur Beschreibung der Preisgarantie - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "beschreibung", Required = Required.Default)] [ProtoMember(3)] - public string beschreibung; - /// Festlegung, auf welche Preisbestandteile die Garantie gewährt wird. Details - [JsonProperty(Required = Required.Always)] + public string Beschreibung { get; set; } + /// Festlegung, auf welche Preisbestandteile die Garantie gewährt wird. Details + [JsonProperty(PropertyName = "preisgarantietyp", Required = Required.Always)] [ProtoMember(4)] - public Preisgarantietyp preisgarantietyp; + public Preisgarantietyp Preisgarantietyp { get; set; } /// Zeitraum, bis zu dem die Preisgarantie gilt, z.B. bis zu einem absolutem / fixem Datum oder als Laufzeit in Monaten. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "zeitlicheGueltigkeit", Required = Required.Always)] [ProtoMember(5)] - public Zeitraum zeitlicheGueltigkeit; + public Zeitraum ZeitlicheGueltigkeit { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Preisposition.cs b/BO4E-dotnet/COM/Preisposition.cs index 56664545..c1c50d2f 100644 --- a/BO4E-dotnet/COM/Preisposition.cs +++ b/BO4E-dotnet/COM/Preisposition.cs @@ -1,6 +1,9 @@ using System.Collections.Generic; + using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -10,48 +13,48 @@ namespace BO4E.COM public class Preisposition : COM { /// Das Modell, das der Preisbildung zugrunde liegt. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "berechnungsmethode", Required = Required.Always)] [ProtoMember(3)] - public Kalkulationsmethode berechnungsmethode; - /// Standardisierte Bezeichnung für die abgerechnete Leistungserbringung. Details - [JsonProperty(Required = Required.Always)] + public Kalkulationsmethode Berechnungsmethode { get; set; } + /// Standardisierte Bezeichnung für die abgerechnete Leistungserbringung. Details + [JsonProperty(PropertyName = "leistungstyp", Required = Required.Always)] [ProtoMember(4)] - public Leistungstyp leistungstyp; + public Leistungstyp Leistungstyp { get; set; } /// Bezeichnung für die in der Position abgebildete Leistungserbringung - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "leistungsbezeichung", Required = Required.Always)] [ProtoMember(5)] - public string leistungsbezeichung; + public string Leistungsbezeichung { get; set; } /// Festlegung, mit welcher Preiseinheit abgerechnet wird, z.B. Ct. oder €. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "preiseinheit", Required = Required.Always)] [ProtoMember(6)] - public Waehrungseinheit preiseinheit; + public Waehrungseinheit Preiseinheit { get; set; } /// Hier wird festgelegt, auf welche Bezugsgröße sich der Preis bezieht, z.B. kWh oder Stück. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "bezugsgroesse", Required = Required.Always)] [ProtoMember(7)] - public Mengeneinheit bezugsgroesse; + public Mengeneinheit Bezugsgroesse { get; set; } /// Die Zeit(dauer) auf die sich der Preis bezieht. Z.B. ein Jahr für einen Leistungspreis der in €/kW/Jahr ausgegeben wird. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "zeitbasis", Required = Required.Default)] [ProtoMember(8)] - public Zeiteinheit? zeitbasis; - /// Festlegung, für welche Tarifzeit der Preis hier festgelegt ist. - [JsonProperty(Required = Required.Default)] + public Zeiteinheit? Zeitbasis { get; set; } + /// Festlegung, für welche Tarifzeit der Preis hier festgelegt ist. + [JsonProperty(PropertyName = "tarifzeit", Required = Required.Default)] [ProtoMember(9)] - public Tarifzeit? tarifzeit; + public Tarifzeit? Tarifzeit { get; set; } /// Eine vom BDEW standardisierte Bezeichnung für die abgerechnete Leistungserbringung. Diese Artikelnummer wird auch im Rechnungsteil der INVOIC verwendet. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "bdewArtikelnummer", Required = Required.Default)] [ProtoMember(10)] - public BDEWArtikelnummer? bdewArtikelnummer; + public BDEWArtikelnummer? BdewArtikelnummer { get; set; } /// Mit der Menge der hier angegebenen Größe wird die Staffelung/Zonung durchgeführt. Z.B. Vollbenutzungsstunden. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "zonungsgroesse", Required = Required.Default)] [ProtoMember(11)] - public Bemessungsgroesse? zonungsgroesse; + public Bemessungsgroesse? Zonungsgroesse { get; set; } /// Zuschläge oder Abschläge auf die Position. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "zu_abschlaege", Required = Required.Default)] [ProtoMember(12)] - public PositionsAufAbschlag zu_abschlaege; + public PositionsAufAbschlag Zu_abschlaege { get; set; } /// Preisstaffeln, die zu dieser Preisposition gehören. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "preisstaffeln", Required = Required.Always)] [ProtoMember(13)] - public List preisstaffeln; + public List Preisstaffeln { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Preisstaffel.cs b/BO4E-dotnet/COM/Preisstaffel.cs index ad410812..1ef8dc30 100644 --- a/BO4E-dotnet/COM/Preisstaffel.cs +++ b/BO4E-dotnet/COM/Preisstaffel.cs @@ -1,4 +1,5 @@ using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -9,20 +10,20 @@ namespace BO4E.COM public class Preisstaffel : COM { /// Preis pro abgerechneter Mengeneinheit - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "einheitspreis", Required = Required.Always)] [ProtoMember(3)] - public decimal einheitspreis; + public decimal Einheitspreis { get; set; } /// Unterer Wert, ab dem die Staffel gilt. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "staffelgrenzeVon", Required = Required.Always)] [ProtoMember(4)] - public decimal staffelgrenzeVon; + public decimal StaffelgrenzeVon { get; set; } /// Oberer Wert, bis zu dem die Staffel gilt. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "staffelgrenzeBis", Required = Required.Always)] [ProtoMember(5)] - public decimal staffelgrenzeBis; - /// Parameter zur Berechnung des Preises anhand der Jahresmenge und weiterer netzbezogener Parameter. - [JsonProperty(Required = Required.Default)] + public decimal StaffelgrenzeBis { get; set; } + /// Parameter zur Berechnung des Preises anhand der Jahresmenge und weiterer netzbezogener Parameter. + [JsonProperty(PropertyName = "sigmoidparameter", Required = Required.Default)] [ProtoMember(6)] - public Sigmoidparameter sigmoidparameter; + public Sigmoidparameter Sigmoidparameter { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Rechnungsposition.cs b/BO4E-dotnet/COM/Rechnungsposition.cs index 3cf15502..f08364ca 100644 --- a/BO4E-dotnet/COM/Rechnungsposition.cs +++ b/BO4E-dotnet/COM/Rechnungsposition.cs @@ -1,7 +1,10 @@ using System; + using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -11,106 +14,106 @@ namespace BO4E.COM public class Rechnungsposition : COM { /// Fortlaufende Nummer für die Rechnungsposition. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "positionsnummer", Required = Required.Always)] [FieldName("invoiceItemNumber", Language.EN)] [ProtoMember(3)] - public int positionsnummer; + public int Positionsnummer { get; set; } /// Start der Lieferung für die abgerechnete Leistung. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "lieferungVon", Required = Required.Always)] [FieldName("deliveryStart", Language.EN)] [ProtoMember(4)] - public DateTime lieferungVon; + public DateTime LieferungVon { get; set; } /// Ende der Lieferung für die abgerechnete Leistung. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "lieferungBis", Required = Required.Always)] [FieldName("deliveryEnd", Language.EN)] [ProtoMember(5)] - public DateTime lieferungBis; + public DateTime LieferungBis { get; set; } /// Bezeichnung für die abgerechnete Position. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "positionstext", Required = Required.Always)] [FieldName("invoiceItemText", Language.EN)] [ProtoMember(6)] - public string positionstext; + public string Positionstext { get; set; } /// Falls sich der Preis auf eine Zeit bezieht, steht hier die Einheit, z.B. JAHR. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "zeiteinheit", Required = Required.Default)] [FieldName("unit", Language.EN)] - [ProtoMember(7)] public Mengeneinheit? zeiteinheit; + [ProtoMember(7)] public Mengeneinheit? Zeiteinheit { get; set; } /// Kennzeichnung der Rechnungsposition mit der Standard-Artikelnummer des BDEW. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "artikelnummer", Required = Required.Default)] [ProtoMember(8)] - public BDEWArtikelnummer? artikelnummer; + public BDEWArtikelnummer? Artikelnummer { get; set; } /// Marktlokation, die zu dieser Position gehört. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "lokationsId", Required = Required.Default)] [ProtoMember(9)] - public string lokationsId; + public string LokationsId { get; set; } /// Die abgerechnete Menge mit Einheit. Z.B. 4372 kWh. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "positionsMenge", Required = Required.Default)] [FieldName("amount", Language.EN)] [ProtoMember(10)] - public Menge positionsMenge; + public Menge PositionsMenge { get; set; } /// Eine auf die Zeiteinheit bezogene Untermenge. Z.B. bei einem Jahrespreis, 3 Monate oder 146 Tage. Basierend darauf wird der Preis aufgeteilt. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "zeitbezogeneMenge", Required = Required.Default)] [FieldName("timeBasedAmount", Language.EN)] [ProtoMember(11)] - public Menge zeitbezogeneMenge; + public Menge ZeitbezogeneMenge { get; set; } /// Der Preis für eine Einheit der energetischen Menge. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "einzelpreis", Required = Required.Always)] [FieldName("unitCost", Language.EN)] [ProtoMember(12)] - public Preis einzelpreis; + public Preis Einzelpreis { get; set; } /// Das Ergebnis der Multiplikation aus einzelpreis * positionsMenge * (Faktor aus zeitbezogeneMenge). Z.B. 12,60€ * 120 kW * 3/12 (für 3 Monate). Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "teilsummeNetto", Required = Required.Default)] [FieldName("subtotalNet", Language.EN)] [ProtoMember(13)] - public Betrag teilsummeNetto; + public Betrag TeilsummeNetto { get; set; } /// Nettobetrag für den Rabatt dieser Position. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "teilrabattNetto", Required = Required.Default)] [FieldName("someDiscountNet", Language.EN)] [ProtoMember(14)] - public Betrag teilrabattNetto; + public Betrag TeilrabattNetto { get; set; } /// Auf die Position entfallende Steuer, bestehend aus Steuersatz und Betrag. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "teilsummeSteuer", Required = Required.Default)] [FieldName("subtotalTax", Language.EN)] [ProtoMember(15)] - public Steuerbetrag teilsummeSteuer; + public Steuerbetrag TeilsummeSteuer { get; set; } /// /// Möglichkeit die Rechnungsposition einem Vertragskonto zuzuordnen, um die Rechnungsposition mittels SAP Convergent Invoicing zu verarbeiten. /// (Ergänzung von Hochfrequenz Unternehmensberatung GmbH) /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "vertragskontoId", Required = Required.Default)] [Obsolete("Please use vertragsId instead of vertragskontoId", false)] [FieldName("contractAccountId", Language.EN)] [ProtoMember(16)] - public string vertragskontoId; + public string VertragskontoId { get; set; } /// /// Möglichkeit die Rechnungsposition einem Vertragskonto zuzuordnen, um die Rechnungsposition mittels SAP Convergent Invoicing zu verarbeiten. /// (Ergänzung von Hochfrequenz Unternehmensberatung GmbH) /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "vertragsId", Required = Required.Default)] [ProtoMember(1017)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] - public string vertragsId; + public string VertragsId { get; set; } /// /// status einer Rechnungsposition in SAP Convergent Invoicing /// (Ergänzung von Hochfrequenz Unternehmensberatung GmbH) /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "status", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1018)] - public RechnungspositionsStatus? status; + public RechnungspositionsStatus? Status { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/RechnungspositionFlat.cs b/BO4E-dotnet/COM/RechnungspositionFlat.cs index e46dceef..27044273 100644 --- a/BO4E-dotnet/COM/RechnungspositionFlat.cs +++ b/BO4E-dotnet/COM/RechnungspositionFlat.cs @@ -1,7 +1,10 @@ using System; + using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -15,96 +18,96 @@ namespace BO4E.COM [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] public class RechnungspositionFlat : COM { - /// - [JsonProperty(Required = Required.Always)] + /// + [JsonProperty(PropertyName = "positionsnummer", Required = Required.Always)] [ProtoMember(3)] - public int positionsnummer; + public int Positionsnummer { get; set; } - /// - [JsonProperty(Required = Required.Always)] + /// + [JsonProperty(PropertyName = "lieferungVon", Required = Required.Always)] [ProtoMember(4)] - public DateTime lieferungVon; + public DateTime LieferungVon { get; set; } - /// - [JsonProperty(Required = Required.Always)] + /// + [JsonProperty(PropertyName = "lieferungBis", Required = Required.Always)] [ProtoMember(5)] - public DateTime lieferungBis; + public DateTime LieferungBis { get; set; } /// /// Der Positionstext entspricht dem SAP CI Teilprozess bzw. der GCN Categoy - /// + /// /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "positionstext", Required = Required.Always)] [ProtoMember(6)] - public string positionstext; + public string Positionstext { get; set; } - /// > - [JsonProperty(Required = Required.Always)] + /// > + [JsonProperty(PropertyName = "lokationsId", Required = Required.Always)] [ProtoMember(7)] - public string lokationsId; + public string LokationsId { get; set; } - /// > - [JsonProperty(Required = Required.Always)] + /// > + [JsonProperty(PropertyName = "vertragskontoId", Required = Required.Always)] [ProtoMember(8)] - public string vertragskontoId; + public string VertragskontoId { get; set; } /// - /// and + /// and /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "preisWert", Required = Required.Always)] [ProtoMember(9)] - public decimal preisWert; + public decimal PreisWert { get; set; } /// - /// and + /// and /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "preisEinheit", Required = Required.Always)] [ProtoMember(10)] - public Waehrungseinheit preisEinheit; + public Waehrungseinheit PreisEinheit { get; set; } /// - /// and + /// and /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "preisBezugswert", Required = Required.Always)] [ProtoMember(11)] - public Mengeneinheit preisBezugswert; + public Mengeneinheit PreisBezugswert { get; set; } /// - /// and + /// and /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "preisStatus", Required = Required.Default)] [ProtoMember(12)] - public Preisstatus? preisStatus; + public Preisstatus? PreisStatus { get; set; } /// /// GCN mediated value value - /// and + /// and /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "positionsMengeWert", Required = Required.Always)] [ProtoMember(13)] - public decimal? positionsMengeWert; + public decimal? PositionsMengeWert { get; set; } /// /// GCN mediated value unit - /// and + /// and /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "positionsMengeEinheit", Required = Required.Always)] [ProtoMember(14)] - public Mengeneinheit? positionsMengeEinheit; + public Mengeneinheit? PositionsMengeEinheit { get; set; } - /// - [JsonProperty(Required = Required.Default)] + /// + [JsonProperty(PropertyName = "vertragsId", Required = Required.Default)] [ProtoMember(15)] - public string vertragsId; + public string VertragsId { get; set; } /// /// status einer Rechnungsposition in SAP Convergent Invoicing /// (Ergänzung von Hochfrequenz Unternehmensberatung GmbH) /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "status", Required = Required.Default)] [ProtoMember(16)] - public RechnungspositionsStatus? status; + public RechnungspositionsStatus? Status { get; set; } /// /// Kind of a copy constructor that moves data from a @@ -114,32 +117,32 @@ public class RechnungspositionFlat : COM public RechnungspositionFlat(Rechnungsposition rp) { // todo: make this reflection based. this is pita. - this.positionsnummer = rp.positionsnummer; - this.lieferungVon = rp.lieferungVon; - this.lieferungBis = rp.lieferungBis; - this.positionstext = rp.positionstext; - this.lokationsId = rp.lokationsId; - this.vertragsId = rp.vertragsId; - this.vertragskontoId = rp.vertragskontoId; - if (rp.einzelpreis != null) + this.Positionsnummer = rp.Positionsnummer; + this.LieferungVon = rp.LieferungVon; + this.LieferungBis = rp.LieferungBis; + this.Positionstext = rp.Positionstext; + this.LokationsId = rp.LokationsId; + this.VertragsId = rp.VertragsId; + this.VertragskontoId = rp.VertragskontoId; + if (rp.Einzelpreis != null) { - this.preisWert = rp.einzelpreis.wert; - this.preisEinheit = rp.einzelpreis.einheit; - this.preisBezugswert = rp.einzelpreis.bezugswert; - this.preisStatus = rp.einzelpreis.status; + this.PreisWert = rp.Einzelpreis.Wert; + this.PreisEinheit = rp.Einzelpreis.Einheit; + this.PreisBezugswert = rp.Einzelpreis.Bezugswert; + this.PreisStatus = rp.Einzelpreis.Status; } - if (rp.positionsMenge != null) + if (rp.PositionsMenge != null) { - this.positionsMengeEinheit = rp.positionsMenge.einheit; - this.positionsMengeWert = rp.positionsMenge.wert; + this.PositionsMengeEinheit = rp.PositionsMenge.Einheit; + this.PositionsMengeWert = rp.PositionsMenge.Wert; } else { - this.positionsMengeEinheit = null; - this.positionsMengeWert = null; + this.PositionsMengeEinheit = null; + this.PositionsMengeWert = null; } - this.guid = rp.guid; - this.status = rp.status; + this.Guid = rp.Guid; + this.Status = rp.Status; } /// @@ -151,27 +154,27 @@ public Rechnungsposition ToRechnungsposition() // todo: make this reflection based. this is pure pita. in fact the whole process of the flat structure is pita for sap Rechnungsposition result = new Rechnungsposition() { - positionsnummer = positionsnummer, - lieferungVon = lieferungVon, - lieferungBis = lieferungBis, - positionstext = positionstext, - lokationsId = lokationsId, - vertragsId = vertragsId, - vertragskontoId = vertragskontoId, - einzelpreis = new Preis() + Positionsnummer = Positionsnummer, + LieferungVon = LieferungVon, + LieferungBis = LieferungBis, + Positionstext = Positionstext, + LokationsId = LokationsId, + VertragsId = VertragsId, + VertragskontoId = VertragskontoId, + Einzelpreis = new Preis() { - wert = preisWert, - einheit = preisEinheit, - bezugswert = preisBezugswert, - status = preisStatus ?? Preisstatus.VORLAEUFIG // poor default choice + Wert = PreisWert, + Einheit = PreisEinheit, + Bezugswert = PreisBezugswert, + Status = PreisStatus ?? Preisstatus.VORLAEUFIG // poor default choice }, - positionsMenge = new Menge() + PositionsMenge = new Menge() { - einheit = positionsMengeEinheit ?? Mengeneinheit.KWH, // poor default choice - wert = positionsMengeWert ?? 0.0M, // poor default choice + Einheit = PositionsMengeEinheit ?? Mengeneinheit.KWH, // poor default choice + Wert = PositionsMengeWert ?? 0.0M, // poor default choice }, - guid = guid, - status = status + Guid = Guid, + Status = Status }; return result; } diff --git a/BO4E-dotnet/COM/RegionaleGueltigkeit.cs b/BO4E-dotnet/COM/RegionaleGueltigkeit.cs index 5cfff37b..f615823b 100644 --- a/BO4E-dotnet/COM/RegionaleGueltigkeit.cs +++ b/BO4E-dotnet/COM/RegionaleGueltigkeit.cs @@ -1,6 +1,9 @@ using System.Collections.Generic; + using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -9,13 +12,13 @@ namespace BO4E.COM [ProtoContract] public class RegionaleGueltigkeit : COM { - /// Unterscheidung ob Positivliste oder Negativliste übertragen wird. Details - [JsonProperty(Required = Required.Always)] + /// Unterscheidung ob Positivliste oder Negativliste übertragen wird. Details + [JsonProperty(PropertyName = "gueltigkeitstyp", Required = Required.Always)] [ProtoMember(3)] - public Gueltigkeitstyp gueltigkeitstyp; + public Gueltigkeitstyp Gueltigkeitstyp { get; set; } /// Hier steht, für welches Kriterium die Liste gilt. Z.B. Postleitzahlen. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "kriteriumsWerte", Required = Required.Always)] [ProtoMember(4)] - public List kriteriumsWerte; + public List KriteriumsWerte { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/RegionalePreisgarantie.cs b/BO4E-dotnet/COM/RegionalePreisgarantie.cs index ef25538e..0b9a7295 100644 --- a/BO4E-dotnet/COM/RegionalePreisgarantie.cs +++ b/BO4E-dotnet/COM/RegionalePreisgarantie.cs @@ -1,15 +1,14 @@ -using Newtonsoft.Json; -using ProtoBuf; +using Newtonsoft.Json; -namespace BO4E.COM -{ - /// Abbildung einer Preisgarantie mit regionaler Abgrenzung. - //[ProtoContract] - public class RegionalePreisgarantie : Preisgarantie - { - /// Regionale Eingrenzung der Preisgarantie. Details - [JsonProperty(Required = Required.Always)] - //[ProtoMember(6)] - public RegionaleGueltigkeit regionaleGueltigkeit; - } +namespace BO4E.COM +{ + /// Abbildung einer Preisgarantie mit regionaler Abgrenzung. + //[ProtoContract] + public class RegionalePreisgarantie : Preisgarantie + { + /// Regionale Eingrenzung der Preisgarantie. Details + [JsonProperty(PropertyName = "regionaleGueltigkeit", Required = Required.Always)] + //[ProtoMember(6)] + public RegionaleGueltigkeit RegionaleGueltigkeit { get; set; } + } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/RegionalePreisstaffel.cs b/BO4E-dotnet/COM/RegionalePreisstaffel.cs index 05a8a34c..a632e92f 100644 --- a/BO4E-dotnet/COM/RegionalePreisstaffel.cs +++ b/BO4E-dotnet/COM/RegionalePreisstaffel.cs @@ -1,5 +1,4 @@ using Newtonsoft.Json; -using ProtoBuf; namespace BO4E.COM { @@ -7,9 +6,9 @@ namespace BO4E.COM //[ProtoContract] public class RegionalePreisstaffel : Preisstaffel { - /// Regionale Eingrenzung der Preisstaffel. Details - [JsonProperty(Required = Required.Always)] + /// Regionale Eingrenzung der Preisstaffel. Details + [JsonProperty(PropertyName = "regionaleGueltigkeit", Required = Required.Always)] //[ProtoMember(8)] - public RegionaleGueltigkeit regionaleGueltigkeit; + public RegionaleGueltigkeit RegionaleGueltigkeit { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/RegionaleTarifpreisposition.cs b/BO4E-dotnet/COM/RegionaleTarifpreisposition.cs index ad821d1e..8ab7b0bd 100644 --- a/BO4E-dotnet/COM/RegionaleTarifpreisposition.cs +++ b/BO4E-dotnet/COM/RegionaleTarifpreisposition.cs @@ -1,6 +1,9 @@ using System.Collections.Generic; + using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -9,25 +12,25 @@ namespace BO4E.COM [ProtoContract] public class RegionaleTarifpreisposition : COM { - /// Angabe des Preistyps (z.B. Grundpreis) Details - [JsonProperty(Required = Required.Always)] + /// Angabe des Preistyps (z.B. Grundpreis) Details + [JsonProperty(PropertyName = "preistyp", Required = Required.Always)] [ProtoMember(3)] - public Preistyp preistyp; + public Preistyp Preistyp { get; set; } /// Einheit des Preises (z.B. EURO) Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "einheit", Required = Required.Always)] [ProtoMember(4)] - public string einheit; + public string Einheit { get; set; } /// Größe, auf die sich die Einheit bezieht, beispielsweise kWh, Jahr. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "bezugseinheit", Required = Required.Always)] [ProtoMember(5)] - public Mengeneinheit bezugseinheit; + public Mengeneinheit Bezugseinheit { get; set; } /// Gibt an, nach welcher Menge die vorgenannte Einschränkung erfolgt (z.B. Jahresstromverbrauch in kWh).Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "mengeneinheitstaffel", Required = Required.Default)] [ProtoMember(6)] - public Mengeneinheit? mengeneinheitstaffel; + public Mengeneinheit? Mengeneinheitstaffel { get; set; } /// Hier sind die Staffeln mit ihren Preisangaben und regionalen Gültigkeiten definiert. Struktur - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "preisstaffeln", Required = Required.Default)] [ProtoMember(7)] - public List preisstaffeln; + public List Preisstaffeln { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/RegionalerAufAbschlag.cs b/BO4E-dotnet/COM/RegionalerAufAbschlag.cs index 8b1177a6..7b1f1dbd 100644 --- a/BO4E-dotnet/COM/RegionalerAufAbschlag.cs +++ b/BO4E-dotnet/COM/RegionalerAufAbschlag.cs @@ -1,6 +1,9 @@ using System.Collections.Generic; + using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -11,78 +14,78 @@ namespace BO4E.COM public class RegionalerAufAbschlag : COM { /// Bezeichnung des Auf-/Abschlags - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "bezeichnung", Required = Required.Always)] [ProtoMember(3)] - public string bezeichnung; + public string Bezeichnung { get; set; } /// Beschreibung zum Auf-/Abschlag - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "beschreibung", Required = Required.Default)] [ProtoMember(4)] - public string beschreibung; + public string Beschreibung { get; set; } - /// Typ des Aufabschlages (z.B. absolut oder prozentual). Details - [JsonProperty(Required = Required.Default)] + /// Typ des Aufabschlages (z.B. absolut oder prozentual). Details + [JsonProperty(PropertyName = "aufAbschlagstyp", Required = Required.Default)] [ProtoMember(5)] - public AufAbschlagstyp? aufAbschlagstyp; + public AufAbschlagstyp? AufAbschlagstyp { get; set; } - /// Diesem Preis oder den Kosten ist der Auf/Abschlag zugeordnet. Z.B. Arbeitspreis, Gesamtpreis etc.. Details - [JsonProperty(Required = Required.Default)] + /// Diesem Preis oder den Kosten ist der Auf/Abschlag zugeordnet. Z.B. Arbeitspreis, Gesamtpreis etc.. Details + [JsonProperty(PropertyName = "aufAbschlagsziel", Required = Required.Default)] [ProtoMember(6)] - public AufAbschlagsziel? aufAbschlagsziel; + public AufAbschlagsziel? AufAbschlagsziel { get; set; } /// Gibt an in welcher Währungseinheit der Auf/Abschlag berechnet wird. Euro oder Ct.. (Nur im Falle absoluter Aufschlagstypen). Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "einheit", Required = Required.Default)] [ProtoMember(7)] - public Waehrungseinheit? einheit; + public Waehrungseinheit? Einheit { get; set; } /// Internetseite, auf der die Informationen zum Auf-/Abschlag veröffentlicht sind. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "website", Required = Required.Default)] [ProtoMember(8)] - public string website; + public string Website { get; set; } /// Zusatzprodukte, die nur in Kombination mit diesem AufAbschlag erhältlich sind. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "zusatzprodukte", Required = Required.Default)] [ProtoMember(9)] - public List zusatzprodukte; + public List Zusatzprodukte { get; set; } /// Voraussetzungen, die erfüllt sein müssen, damit dieser AufAbschlag zur Anwendung kommen kann - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "voraussetzungen", Required = Required.Default)] [ProtoMember(10)] - public List voraussetzungen; + public List Voraussetzungen { get; set; } /// Zeitraum, in dem der Abschlag zur Anwendung kommen kann. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "gueltigkeitszeitraum", Required = Required.Default)] [ProtoMember(11)] - public Zeitraum gueltigkeitszeitraum; + public Zeitraum Gueltigkeitszeitraum { get; set; } /// Durch die Anwendung des Auf/Abschlags kann eine Änderung des Tarifnamens auftreten. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "tarifnamensaenderungen", Required = Required.Default)] [ProtoMember(12)] - public string tarifnamensaenderungen; + public string Tarifnamensaenderungen { get; set; } /// Der Energiemix kann sich durch einen AufAbschlag ändern (z.B. zwei Cent Aufschlag für Ökostrom: Sollte dies der Fall sein,wird hier die neue Zusammensetzung des Energiemix angegeben. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "energiemixaenderung", Required = Required.Default)] [ProtoMember(13)] - public Energiemix energiemixaenderung; + public Energiemix Energiemixaenderung { get; set; } /// Änderungen in den Vertragskonditionen. Falls in dieser Komponenten angegeben, werden die Tarifparameter hiermit überschrieben. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "vertagskonditionsaenderung", Required = Required.Default)] [ProtoMember(14)] - public Vertragskonditionen vertagskonditionsaenderung; + public Vertragskonditionen Vertagskonditionsaenderung { get; set; } /// Änderungen in den Garantievereinbarungen. Falls in dieser Komponenten angegeben, werden die Tarifparameter hiermit überschrieben. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "garantieaenderung", Required = Required.Default)] [ProtoMember(15)] - public Preisgarantie garantieaenderung; + public Preisgarantie Garantieaenderung { get; set; } /// Änderungen in den Einschränkungen zum Tarif. Falls in dieser Komponenten angegeben, werden die Tarifparameter hiermit überschrieben. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "einschraenkungsaenderung", Required = Required.Default)] [ProtoMember(16)] - public Tarifeinschraenkung einschraenkungsaenderung; + public Tarifeinschraenkung Einschraenkungsaenderung { get; set; } /// Werte für die gestaffelten Auf/Abschläge mit regionaler Eingrenzung. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "staffeln", Required = Required.Always)] [ProtoMember(17)] - public List staffeln; + public List Staffeln { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Regionskriterium.cs b/BO4E-dotnet/COM/Regionskriterium.cs index 5b3178c3..cf428d7d 100644 --- a/BO4E-dotnet/COM/Regionskriterium.cs +++ b/BO4E-dotnet/COM/Regionskriterium.cs @@ -1,5 +1,7 @@ using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -11,38 +13,38 @@ namespace BO4E.COM public class Regionskriterium : COM { /// - /// Hier wird festgelegt, ob es sich um ein einschließendes oder ausschließendes Kriterium handelt.Details siehe + /// Hier wird festgelegt, ob es sich um ein einschließendes oder ausschließendes Kriterium handelt.Details siehe /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "gueltigkeitstyp", Required = Required.Always)] [ProtoMember(3)] - public Gueltigkeitstyp gueltigkeitstyp; + public Gueltigkeitstyp Gueltigkeitstyp { get; set; } /// - /// Das Kriterium gilt in der angegebenen Sparte.Details siehe + /// Das Kriterium gilt in der angegebenen Sparte.Details siehe /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "sparte", Required = Required.Default)] [ProtoMember(4)] - public Sparte? sparte; + public Sparte? Sparte { get; set; } /// - /// Unterscheidung, wie der Wert angewendet werden soll, z.B.kleiner, größer, gleich.Details siehe + /// Unterscheidung, wie der Wert angewendet werden soll, z.B.kleiner, größer, gleich.Details siehe /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "mengenoperator", Required = Required.Always)] [ProtoMember(5)] - public Mengenoperator mengenoperator; + public Mengenoperator Mengenoperator { get; set; } /// - /// Hier wird das Kriterium selbst angegeben, z.B.Bundesland. Details siehe + /// Hier wird das Kriterium selbst angegeben, z.B.Bundesland. Details siehe /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "regionskriteriumtyp", Required = Required.Always)] [ProtoMember(6)] - public Regionskriteriumtyp regionskriteriumtyp; + public Regionskriteriumtyp Regionskriteriumtyp { get; set; } /// /// Der Wert, den das Kriterium annehmen kann, z.B.NRW.Im Falle des Regionskriteriumstyp BUNDESWEIT spielt dieser Wert keine Rolle. /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "wert", Required = Required.Always)] [ProtoMember(7)] - public string wert; + public string Wert { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Rufnummer.cs b/BO4E-dotnet/COM/Rufnummer.cs index a7a81a10..23c71379 100644 --- a/BO4E-dotnet/COM/Rufnummer.cs +++ b/BO4E-dotnet/COM/Rufnummer.cs @@ -1,5 +1,7 @@ using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -9,13 +11,15 @@ namespace BO4E.COM public class Rufnummer : COM { /// Ausprägung der Nummer, z.B. Zentrale, Faxnummer, Mobilnummer etc. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "nummerntyp", Required = Required.Always)] [ProtoMember(3)] - public Rufnummernart nummerntyp; + public Rufnummernart Nummerntyp { get; set; } /// Die konkrete Nummer, z.B. 02433 5 26 01 900 - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "rufnummer", Required = Required.Always)] [ProtoMember(4)] - public string rufnummer; +#pragma warning disable IDE1006 // Naming Styles + public string rufnummer { get; set; } +#pragma warning restore IDE1006 // Naming Styles } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Sigmoidparameter.cs b/BO4E-dotnet/COM/Sigmoidparameter.cs index 2be81dd7..cb7cfa9e 100644 --- a/BO4E-dotnet/COM/Sigmoidparameter.cs +++ b/BO4E-dotnet/COM/Sigmoidparameter.cs @@ -1,4 +1,5 @@ using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -8,23 +9,23 @@ namespace BO4E.COM public class Sigmoidparameter : COM { /// Briefmarke Ortsverteilnetz //? - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "A", Required = Required.Always)] [ProtoMember(3)] - public decimal A; + public decimal A { get; set; } /// Wendepunkt für die bepreiste Menge - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "B", Required = Required.Always)] [ProtoMember(4)] - public decimal B; + public decimal B { get; set; } /// Exponent - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "C", Required = Required.Always)] [ProtoMember(5)] - public decimal C; + public decimal C { get; set; } /// Briefmarke Transportnetz - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "D", Required = Required.Always)] [ProtoMember(6)] - public decimal D; + public decimal D { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Steuerbetrag.cs b/BO4E-dotnet/COM/Steuerbetrag.cs index 2b759c46..a91a2854 100644 --- a/BO4E-dotnet/COM/Steuerbetrag.cs +++ b/BO4E-dotnet/COM/Steuerbetrag.cs @@ -1,6 +1,8 @@ using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -9,28 +11,28 @@ namespace BO4E.COM [ProtoContract] public class Steuerbetrag : COM { - /// Kennzeichnung des Steuersatzes, bzw. Verfahrens. Details - [JsonProperty(Required = Required.Always)] + /// Kennzeichnung des Steuersatzes, bzw. Verfahrens. Details + [JsonProperty(PropertyName = "steuerkennzeichen", Required = Required.Always)] [FieldName("taxIdentifier", Language.EN)] [ProtoMember(3)] - public Steuerkennzeichen steuerkennzeichen; + public Steuerkennzeichen Steuerkennzeichen { get; set; } /// Nettobetrag für den die Steuer berechnet wurde. Z.B. 100 - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "basiswert", Required = Required.Always)] [FieldName("baseValue", Language.EN)] [ProtoMember(4)] - public decimal basiswert; + public decimal Basiswert { get; set; } /// Aus dem Basiswert berechnete Steuer. Z.B. 19 (bei UST_19) - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "steuerwert", Required = Required.Always)] [FieldName("taxValue", Language.EN)] [ProtoMember(5)] - public decimal steuerwert; + public decimal Steuerwert { get; set; } /// Währung. Z.B. Euro. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "waehrung", Required = Required.Always)] [FieldName("currency", Language.EN)] [ProtoMember(6)] - public Waehrungscode waehrung; + public Waehrungscode Waehrung { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Tarifberechnungsparameter.cs b/BO4E-dotnet/COM/Tarifberechnungsparameter.cs index b839ce56..812a0d70 100644 --- a/BO4E-dotnet/COM/Tarifberechnungsparameter.cs +++ b/BO4E-dotnet/COM/Tarifberechnungsparameter.cs @@ -1,5 +1,7 @@ using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -9,47 +11,48 @@ namespace BO4E.COM public class Tarifberechnungsparameter : COM { /// Gibt an, wie die Einzelpreise des Tarifes zu verarbeiten sind. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "berechnungsmethode", Required = Required.Default)] [ProtoMember(3)] - public Tarifkalkulationsmethode? berechnungsmethode; - + public Tarifkalkulationsmethode? Berechnungsmethode { get; set; } + /// Zeigt an, ob der Messpreis im Grundpreis enthalten ist. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "messpreisInGPEnthalten", Required = Required.Default)] [ProtoMember(4)] - public string messpreisInGPEnthalten; + public string MesspreisInGPEnthalten { get; set; } - /// Typ des Messpreises. Details + /// Typ des Messpreises. Details [ProtoMember(5)] - public Messpreistyp? messpreistyp; - + [JsonProperty(PropertyName = "messpreistyp", Required = Required.Default)] + public Messpreistyp? Messpreistyp { get; set; } + /// Im Preis bereits eingeschlossene Leistung (für Gas). - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "kwInklusive", Required = Required.Default)] [ProtoMember(6)] - public decimal? kwInklusive; - + public decimal? KwInklusive { get; set; } + /// Intervall, indem die über "kwInklusive" hinaus abgenommene Leistung kostenpflichtig wird (z.B. je 5 kW 20 EURO). - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "kwWeitereMengen", Required = Required.Default)] [ProtoMember(7)] - public decimal? kwWeitereMengen; - + public decimal? KwWeitereMengen { get; set; } + /// Bei der Bildung des Durchschnittspreises für die Höchst- und Mindestpreisbetrachtung wird in Abhängigkeit von diesem Flag der Messpreis mit berücksichtigt. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "messpreisBeruecksichtigen", Required = Required.Default)] [ProtoMember(9)] - public bool? messpreisBeruecksichtigen; - + public bool? MesspreisBeruecksichtigen { get; set; } + /// Höchstpreis für den Durchschnitts-Arbeitspreis NT. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "hoechstpreisNT", Required = Required.Default)] [ProtoMember(10)] - public Preis hoechstpreisNT; - + public Preis HoechstpreisNT { get; set; } + /// Höchstpreis für den Durchschnitts-Arbeitspreis HT. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "hoechstpreisHT", Required = Required.Default)] [ProtoMember(11)] - public Preis hoechstpreisHT; - + public Preis HoechstpreisHT { get; set; } + /// Mindestpreis für den Durchschnitts-Arbeitspreis. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "mindestpreis", Required = Required.Default)] [ProtoMember(12)] - public Preis mindestpreis; + public Preis Mindestpreis { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Tarifeinschraenkung.cs b/BO4E-dotnet/COM/Tarifeinschraenkung.cs index e61f7e4a..b2a1fc92 100644 --- a/BO4E-dotnet/COM/Tarifeinschraenkung.cs +++ b/BO4E-dotnet/COM/Tarifeinschraenkung.cs @@ -1,6 +1,9 @@ using System.Collections.Generic; + using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -10,23 +13,23 @@ namespace BO4E.COM public class Tarifeinschraenkung : COM { /// Weitere Produkte, die gemeinsam mit diesem Tarif bestellt werden können. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "zusatzprodukte", Required = Required.Default)] [ProtoMember(3)] - public List zusatzprodukte; + public List Zusatzprodukte { get; set; } - /// Voraussetzungen, die erfüllt sein müssen, damit dieser Tarif zur Anwendung kommen kann. Details - [JsonProperty(Required = Required.Default)] + /// Voraussetzungen, die erfüllt sein müssen, damit dieser Tarif zur Anwendung kommen kann. Details + [JsonProperty(PropertyName = "voraussetzungen", Required = Required.Default)] [ProtoMember(4)] - public List voraussetzungen; + public List Voraussetzungen { get; set; } /// Liste der Zähler/Geräte, die erforderlich sind, damit dieser Tarif zur Anwendung gelangen kann.(Falls keine Zähler angegeben sind, ist der Tarif nicht an das Vorhandensein bestimmter Zähler gebunden.)Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "einschraenkungzaehler", Required = Required.Default)] [ProtoMember(5)] - public Geraet einschraenkungzaehler; + public Geraet Einschraenkungzaehler { get; set; } /// Die vereinbarte Leistung, die (näherungsweise) abgenommen wird. Insbesondere Gastarife können daran gebunden sein, dass die Leistung einer vereinbarten Höhe entspricht.Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "einschraenkungleistung", Required = Required.Default)] [ProtoMember(6)] - public Menge einschraenkungleistung; + public Menge Einschraenkungleistung { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Tarifpreisposition.cs b/BO4E-dotnet/COM/Tarifpreisposition.cs index 4a9096b6..2ec30576 100644 --- a/BO4E-dotnet/COM/Tarifpreisposition.cs +++ b/BO4E-dotnet/COM/Tarifpreisposition.cs @@ -1,5 +1,7 @@ using BO4E.ENUM; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -8,29 +10,29 @@ namespace BO4E.COM [ProtoContract] public class Tarifpreisposition : COM { - /// Angabe des Preistypes (z.B. Grundpreis) Details - [JsonProperty(Required = Required.Always)] + /// Angabe des Preistypes (z.B. Grundpreis) Details + [JsonProperty(PropertyName = "preistyp", Required = Required.Always)] [ProtoMember(3)] - public Preistyp preistyp; + public Preistyp Preistyp { get; set; } /// Einheit des Preises (z.B. EURO) Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "einheit", Required = Required.Always)] [ProtoMember(4)] - public Waehrungseinheit einheit; + public Waehrungseinheit Einheit { get; set; } /// Größe, auf die sich die Einheit bezieht, beispielsweise kWh, Jahr. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "bezugseinheit", Required = Required.Always)] [ProtoMember(5)] - public Mengeneinheit bezugseinheit; + public Mengeneinheit Bezugseinheit { get; set; } /// Gibt an, nach welcher Menge die vorgenannte Einschränkung erfolgt (z.B. Jahresstromverbrauch in kWh).Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "mengeneinheitstaffel", Required = Required.Default)] [ProtoMember(6)] - public Mengeneinheit? mengeneinheitstaffel; + public Mengeneinheit? Mengeneinheitstaffel { get; set; } /// Hier sind die Staffeln mit ihren Preisenangaben definiert. Struktur - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "preisstaffeln", Required = Required.Always)] [ProtoMember(7)] - public Preisstaffel preisstaffeln; + public Preisstaffel Preisstaffeln { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Unterschrift.cs b/BO4E-dotnet/COM/Unterschrift.cs index cd33e765..64dfd93e 100644 --- a/BO4E-dotnet/COM/Unterschrift.cs +++ b/BO4E-dotnet/COM/Unterschrift.cs @@ -1,5 +1,7 @@ using System; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -14,22 +16,22 @@ public class Unterschrift : COM /// /// Ort, an dem die Unterschrift geleistet wird /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "ort", Required = Required.Default)] [ProtoMember(3)] - public string ort; + public string Ort { get; set; } /// /// Datum der Unterschrift /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "datum", Required = Required.Default)] [ProtoMember(4)] - public DateTime? datum; + public DateTime? Datum { get; set; } /// /// Name des Unterschreibers /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "name", Required = Required.Always)] [ProtoMember(5)] - public string name; + public string Name { get; set; } } } diff --git a/BO4E-dotnet/COM/Verbrauch.cs b/BO4E-dotnet/COM/Verbrauch.cs index 639cee88..0683f6e5 100644 --- a/BO4E-dotnet/COM/Verbrauch.cs +++ b/BO4E-dotnet/COM/Verbrauch.cs @@ -1,9 +1,12 @@ using System; using System.IO; using System.Runtime.Serialization; + using BO4E.ENUM; + using Newtonsoft.Json; using Newtonsoft.Json.Linq; + using ProtoBuf; namespace BO4E.COM @@ -18,7 +21,7 @@ public class Verbrauch : COM /// Central Europe Standard Time as hard coded default time. Public to be used elsewhere ;) /// [ProtoIgnore] - public static readonly TimeZoneInfo CENTRAL_EUROPE_STANDARD_TIME; + public static TimeZoneInfo CENTRAL_EUROPE_STANDARD_TIME { get; private set; } static Verbrauch() { var assembly = typeof(Verbrauch).Assembly; // ??? zumindest eher als executing assembly. @@ -37,24 +40,24 @@ static Verbrauch() /// /// Beginn des Zeitraumes, für den der Verbrauch angegeben wird. /// - [JsonProperty(Required = Required.Default, Order = 7)] + [JsonProperty(PropertyName = "startdatum", Required = Required.Default, Order = 7)] [ProtoMember(3)] - public DateTime startdatum; + public DateTime Startdatum { get; set; } /// /// Ende des Zeitraumes, für den der Verbrauch angegeben wird. /// - [JsonProperty(Required = Required.Default, Order = 8)] + [JsonProperty(PropertyName = "enddatum", Required = Required.Default, Order = 8)] [ProtoMember(4)] - public DateTime enddatum; // ToDo: is DateTime? better suited? + public DateTime Enddatum { get; set; } // ToDo: is DateTime? better suited? /// /// Gibt an, ob es sich um eine PROGNOSE oder eine MESSUNG handelt. /// - /// - [JsonProperty(Required = Required.Always, Order = 5)] + /// + [JsonProperty(PropertyName = "wertermittlungsverfahren", Required = Required.Always, Order = 5)] [ProtoMember(5)] - public Wertermittlungsverfahren wertermittlungsverfahren; + public Wertermittlungsverfahren Wertermittlungsverfahren { get; set; } /// /// Die OBIS-Kennzahl für den Wert, die festlegt, welche Größe mit dem Stand gemeldet wird. @@ -62,30 +65,30 @@ static Verbrauch() /// /// 1-0:1.8.1 /// - [JsonProperty(Required = Required.Always, Order = 6)] + [JsonProperty(PropertyName = "obiskennzahl", Required = Required.Always, Order = 6)] [ProtoMember(6)] - public string obiskennzahl; + public string Obiskennzahl { get; set; } /// /// Gibt den absoluten Wert der Menge an. /// - [JsonProperty(Required = Required.Always, Order = 7)] + [JsonProperty(PropertyName = "wert", Required = Required.Always, Order = 7)] [ProtoMember(7)] - public decimal wert; + public decimal Wert { get; set; } /// /// Gibt die Einheit zum jeweiligen Wert an. /// /// - [JsonProperty(Required = Required.Always, Order = 8)] + [JsonProperty(PropertyName = "einheit", Required = Required.Always, Order = 8)] [ProtoMember(8)] - public Mengeneinheit einheit; + public Mengeneinheit Einheit { get; set; } /// type /// arbeitleistungtagesparameterabhmalo | veranschlagtejahresmenge | TUMKundenwert - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "type", Required = Required.Default)] [ProtoMember(9)] - public Verbrauchsmengetyp? type; + public Verbrauchsmengetyp? Type { get; set; } /// [OnDeserialized] @@ -128,45 +131,45 @@ public void FixSapCdsBug() { //using (MiniProfiler.Current.Step("FixSapCdsBug (Verbrauch)")) // don't do this. it slows down everything ! // { - if (startdatum != null && enddatum != null && startdatum > enddatum) + if (Startdatum != null && Enddatum != null && Startdatum > Enddatum) { - TimeSpan diff = startdatum - enddatum; - if (diff.Hours <= 25 && diff.Hours >= 23 && diff.Minutes == 45 && startdatum.Hour >= 22 && enddatum.Hour == 0) + TimeSpan diff = Startdatum - Enddatum; + if (diff.Hours <= 25 && diff.Hours >= 23 && diff.Minutes == 45 && Startdatum.Hour >= 22 && Enddatum.Hour == 0) { - enddatum += new TimeSpan(diff.Hours + 1, 0, 0); + Enddatum += new TimeSpan(diff.Hours + 1, 0, 0); } else { // something seems wrong but not sure how to fix it. } } - startdatum = DateTime.SpecifyKind(startdatum, DateTimeKind.Utc); - enddatum = DateTime.SpecifyKind(enddatum, DateTimeKind.Utc); - if ((int)(enddatum - startdatum).TotalHours == 2) + Startdatum = DateTime.SpecifyKind(Startdatum, DateTimeKind.Utc); + Enddatum = DateTime.SpecifyKind(Enddatum, DateTimeKind.Utc); + if ((int)(Enddatum - Startdatum).TotalHours == 2) { // check DST of start and enddatum - var startdatumLocal = TimeZoneInfo.ConvertTimeFromUtc(startdatum, Verbrauch.CENTRAL_EUROPE_STANDARD_TIME); - var enddatumLocal = TimeZoneInfo.ConvertTimeFromUtc(enddatum, Verbrauch.CENTRAL_EUROPE_STANDARD_TIME); + var startdatumLocal = TimeZoneInfo.ConvertTimeFromUtc(Startdatum, Verbrauch.CENTRAL_EUROPE_STANDARD_TIME); + var enddatumLocal = TimeZoneInfo.ConvertTimeFromUtc(Enddatum, Verbrauch.CENTRAL_EUROPE_STANDARD_TIME); if (!Verbrauch.CENTRAL_EUROPE_STANDARD_TIME.IsDaylightSavingTime(startdatumLocal - new TimeSpan(0, 0, 1)) && Verbrauch.CENTRAL_EUROPE_STANDARD_TIME.IsDaylightSavingTime(enddatumLocal)) { // change winter-->summer time (e.g. UTC+1-->UTC+2) // this is an artefact of the sap enddatum computation - enddatum -= new TimeSpan(1, 0, 0); // toDo: get offset from timezoneinfo->rules->dstOffset + Enddatum -= new TimeSpan(1, 0, 0); // toDo: get offset from timezoneinfo->rules->dstOffset } } - else if ((int)(enddatum - startdatum).TotalMinutes == -45) + else if ((int)(Enddatum - Startdatum).TotalMinutes == -45) { // check DST of start and enddatum //var startdatumLocal = TimeZoneInfo.ConvertTimeFromUtc(startdatum, Verbrauch.CENTRAL_EUROPE_STANDARD_TIME); - var enddatumLocal = TimeZoneInfo.ConvertTimeFromUtc(enddatum, Verbrauch.CENTRAL_EUROPE_STANDARD_TIME); + var enddatumLocal = TimeZoneInfo.ConvertTimeFromUtc(Enddatum, Verbrauch.CENTRAL_EUROPE_STANDARD_TIME); if (!Verbrauch.CENTRAL_EUROPE_STANDARD_TIME.IsDaylightSavingTime(enddatumLocal - new TimeSpan(1, 0, 0)) && Verbrauch.CENTRAL_EUROPE_STANDARD_TIME.IsDaylightSavingTime(enddatumLocal - new TimeSpan(1, 0, 1))) { // change winter-->summer time (e.g. UTC+1-->UTC+2) // this is an artefact of the sap enddatum computation - enddatum += new TimeSpan(1, 0, 0); // toDo: get offset from timezoneinfo->rules->dstOffset + Enddatum += new TimeSpan(1, 0, 0); // toDo: get offset from timezoneinfo->rules->dstOffset } } - if (userProperties != null && userProperties.TryGetValue(_SAP_PROFDECIMALS_KEY, out JToken profDecimalsRaw)) + if (UserProperties != null && UserProperties.TryGetValue(_SAP_PROFDECIMALS_KEY, out JToken profDecimalsRaw)) { var profDecimals = profDecimalsRaw.Value(); if (profDecimals > 0) @@ -174,10 +177,10 @@ public void FixSapCdsBug() // or should I import math.pow() for this purpose? for (int i = 0; i < profDecimals; i++) { - wert /= 10.0M; + Wert /= 10.0M; } } - userProperties.Remove(_SAP_PROFDECIMALS_KEY); + UserProperties.Remove(_SAP_PROFDECIMALS_KEY); } } diff --git a/BO4E-dotnet/COM/Vertragskonditionen.cs b/BO4E-dotnet/COM/Vertragskonditionen.cs index a2c65626..291df368 100644 --- a/BO4E-dotnet/COM/Vertragskonditionen.cs +++ b/BO4E-dotnet/COM/Vertragskonditionen.cs @@ -1,8 +1,11 @@ +using System; + using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; -using System; namespace BO4E.COM @@ -12,93 +15,93 @@ namespace BO4E.COM public class Vertragskonditionen : COM { /// Freitext zur Beschreibung der Konditionen, z.B. "Standardkonditionen Gas" - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "beschreibung", Required = Required.Default)] [ProtoMember(3)] - public string beschreibung; + public string Beschreibung { get; set; } /// Anzahl der vereinbarten Abschläge pro Jahr, z.B. 12 - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "anzahlAbschlaege", Required = Required.Default)] [ProtoMember(4)] - public int? anzahlAbschlaege; //ToDo: bo4e.de models this as decimal which is wrong imho + public int? AnzahlAbschlaege { get; set; } //ToDo: bo4e.de models this as decimal which is wrong imho /// Über diesen Zeitraum läuft der Vertrag. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "vertragslaufzeit", Required = Required.Default)] [ProtoMember(5)] - public Zeitraum vertragslaufzeit; + public Zeitraum Vertragslaufzeit { get; set; } /// Innerhalb dieser Frist kann der Vertrag gekündigt werden. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "kuendigungsfrist", Required = Required.Default)] [ProtoMember(6)] - public Zeitraum kuendigungsfrist; + public Zeitraum Kuendigungsfrist { get; set; } /// Falls der Vertrag nicht gekündigt wird, verlängert er sich automatisch um die hier angegebene Zeit. Details - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "vertragsverlaengerung", Required = Required.Default)] [ProtoMember(7)] - public Zeitraum vertragsverlaengerung; + public Zeitraum Vertragsverlaengerung { get; set; } /// In diesen Zyklen werden Abschläge gestellt. Details . Alternativ kann auch die Anzahl in den Konditionen angeben werden." - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "abschlagszyklus", Required = Required.Default)] [ProtoMember(8)] - public Zeitraum abschlagszyklus; + public Zeitraum Abschlagszyklus { get; set; } // ToDo: Docstring! - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "startAbrechnungsjahr", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1009)] - public DateTime? startAbrechnungsjahr; + public DateTime? StartAbrechnungsjahr { get; set; } // ToDo: Docstring! why is this a zeitraum and no DateTime?? - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "geplanteTurnusablesung", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1010)] - public Zeitraum geplanteTurnusablesung; + public Zeitraum GeplanteTurnusablesung { get; set; } // ToDo: Docstring! what is the unit? days? why don't you use zeitraum? - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "turnusablesungIntervall", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1011)] - public int? turnusablesungIntervall; + public int? TurnusablesungIntervall { get; set; } // ToDo: Docstring! - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "netznutzungsabrechnung", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1012)] - public Zeitraum netznutzungsabrechnung; + public Zeitraum Netznutzungsabrechnung { get; set; } // ToDo: Docstring! what is the unit? days? why dont you use zeitraum? - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "netznutzungsabrechnungIntervall", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1013)] - public int? netznutzungsabrechnungIntervall; + public int? NetznutzungsabrechnungIntervall { get; set; } // ToDo: Docstring! - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "haushaltskunde", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1014)] - public bool? haushaltskunde; + public bool? Haushaltskunde { get; set; } // ToDo: Docstring! - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "netznutzungsvertrag", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1015)] - public NetznutzungsVertrag? netznutzungsvertrag; + public NetznutzungsVertrag? Netznutzungsvertrag { get; set; } // ToDo: Docstring! - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "netznutzungszahler", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1016)] - public Netznutzungszahler? netznutzungszahler; + public Netznutzungszahler? Netznutzungszahler { get; set; } // ToDo: Docstring! - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "netznutzungsabrechnungsvariante", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1017)] - public Netznutzungsabrechnungsvariante? netznutzungsabrechnungsvariante; + public Netznutzungsabrechnungsvariante? Netznutzungsabrechnungsvariante { get; set; } // ToDo: Docstring! - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "netznutzungsabrechnungsgrundlage", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1018)] - public Netznutzungsabrechnungsgrundlage? netznutzungsabrechnungsgrundlage; + public Netznutzungsabrechnungsgrundlage? Netznutzungsabrechnungsgrundlage { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Vertragsteil.cs b/BO4E-dotnet/COM/Vertragsteil.cs index 61681933..82916b18 100644 --- a/BO4E-dotnet/COM/Vertragsteil.cs +++ b/BO4E-dotnet/COM/Vertragsteil.cs @@ -1,6 +1,9 @@ using System; + using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -15,68 +18,68 @@ public class Vertragsteil : COM /// /// Start der Gültigkeit des Vertragsteils. /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "vertragsteilbeginn", Required = Required.Always)] [ProtoMember(3)] - public DateTime vertragsteilbeginn; + public DateTime Vertragsteilbeginn { get; set; } /// /// Ende der Gültigkeit des Vertragsteils. /// - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "vertragsteilende", Required = Required.Always)] [ProtoMember(4)] - public DateTime vertragsteilende; + public DateTime Vertragsteilende { get; set; } /// /// Der Identifier für diejenigen Markt- oder Messlokation, die zu diesem Vertragsteil gehören. /// Verträge für mehrere Lokationen werden mit mehreren Vertragsteilen abgebildet. /// [ProtoMember(5)] - [JsonProperty(Required = Required.Default)] - public string lokation; + [JsonProperty(PropertyName = "lokation", Required = Required.Default)] + public string Lokation { get; set; } /// /// Für die Lokation festgeschriebene Abnahmemenge. Siehe COM Menge /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "vertraglichFixierteMenge", Required = Required.Default)] [ProtoMember(6)] - public Menge vertraglichFixierteMenge; + public Menge VertraglichFixierteMenge { get; set; } /// /// Für die Lokation festgelegte Mindestabnahmemenge. Siehe COM Menge /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "minimaleAbnahmemenge", Required = Required.Default)] [ProtoMember(7)] - public Menge minimaleAbnahmemenge; + public Menge MinimaleAbnahmemenge { get; set; } /// /// Für die Lokation festgelegte maximale Abnahmemenge. Siehe COM Menge /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "maximaleAbnahmemenge", Required = Required.Default)] [ProtoMember(8)] - public Menge maximaleAbnahmemenge; + public Menge MaximaleAbnahmemenge { get; set; } /// /// jahresverbrauchsprognose für EDIFACT mapping /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "jahresverbrauchsprognose", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1009)] - public Menge jahresverbrauchsprognose; + public Menge Jahresverbrauchsprognose { get; set; } /// /// kundenwert für EDIFACT mapping /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "kundenwert", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1010)] - public Menge kundenwert; + public Menge Kundenwert { get; set; } /// /// verbrauchsaufteilung für EDIFACT mapping /// - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "verbrauchsaufteilung", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1011)] - public string verbrauchsaufteilung; // ToDo: evaluate if this actually should be an enum + public string Verbrauchsaufteilung { get; set; } // ToDo: evaluate if this actually should be an enum } } diff --git a/BO4E-dotnet/COM/Zaehlwerk.cs b/BO4E-dotnet/COM/Zaehlwerk.cs index f39c2470..86c9c8f7 100644 --- a/BO4E-dotnet/COM/Zaehlwerk.cs +++ b/BO4E-dotnet/COM/Zaehlwerk.cs @@ -1,9 +1,12 @@ +using System; +using System.Collections.Generic; + using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; -using System; -using System.Collections.Generic; namespace BO4E.COM { @@ -12,91 +15,91 @@ namespace BO4E.COM public class Zaehlwerk : COM { /// Identifikation des Zählwerks (Registers) innerhalb des Zählers. Oftmals eine laufende Nummer hinter der Zählernummer. Z.B. 47110815_1 - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "zaehlwerkId", Required = Required.Always)] [ProtoMember(3)] - public string zaehlwerkId; + public string ZaehlwerkId { get; set; } /// Zusätzliche Bezeichnung, z.B. Zählwerk_Wirkarbeit. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "bezeichnung", Required = Required.Always)] [ProtoMember(4)] - public string bezeichnung; + public string Bezeichnung { get; set; } /// Die Energierichtung, Einspeisung oder Ausspeisung. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "richtung", Required = Required.Always)] [ProtoMember(5)] - public Energierichtung richtung; + public Energierichtung Richtung { get; set; } /// Die OBIS-Kennzahl für das Zählwerk, die festlegt, welche auf die gemessene Größe mit dem Stand gemeldet wird. Nur Zählwerkstände mit dieser OBIS-Kennzahl werden an diesem Zählwerk registriert. Beispiel:1-0:1.8.1 für elektrische Wirkarbeit. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "obisKennzahl", Required = Required.Always)] [ProtoMember(6)] - public string obisKennzahl; + public string ObisKennzahl { get; set; } /// Mit diesem Faktor wird eine Zählerstandsdifferenz multipliziert, um zum eigentlichen Verbrauch im Zeitraum zu kommen. - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "wandlerfaktor", Required = Required.Always)] [ProtoMember(7)] - public decimal wandlerfaktor; + public decimal Wandlerfaktor { get; set; } /// Die Einheit der gemessenen Größe, z.B. kWh. Details - [JsonProperty(Required = Required.Always)] + [JsonProperty(PropertyName = "einheit", Required = Required.Always)] [ProtoMember(8)] - public Mengeneinheit einheit; + public Mengeneinheit Einheit { get; set; } /// Obis kennzahl - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "kennzahl", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [Obsolete("Use existing obisKennzahl instead.", true)] [ProtoMember(1009)] - public string kennzahl; + public string Kennzahl { get; set; } /// schwachlastfaehig - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "schwachlastfaehig", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1010)] - public Schwachlastfaehig? schwachlastfaehig; + public Schwachlastfaehig? Schwachlastfaehig { get; set; } /// Verwendungungszweck der Werte Marktlokation - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "verwendungszwecke", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1011)] - public List verwendungszwecke; + public List Verwendungszwecke { get; set; } /// Stromverbrauchsart/Verbrauchsart Marktlokation - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "verbrauchsart", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1012)] - public Verbrauchsart? verbrauchsart; + public Verbrauchsart? Verbrauchsart { get; set; } /// Stromverbrauchsart/Unterbrechbarkeit Marktlokation - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "unterbrechbarkeit", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1013)] - public Unterbrechbarkeit? unterbrechbarkeit; + public Unterbrechbarkeit? Unterbrechbarkeit { get; set; } /// Stromverbrauchsart/Wärmenutzung Marktlokation - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "waermenutzung", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1014)] - public Waermenutzung? waermenutzung; + public Waermenutzung? Waermenutzung { get; set; } - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "konzessionsabgabe", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1015)] - public Konzessionsabgabe konzessionsabgabe; + public Konzessionsabgabe Konzessionsabgabe { get; set; } - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "steuerbefreit", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1016)] - public bool? steuerbefreit; + public bool? Steuerbefreit { get; set; } - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "vorkommastelle", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1017)] - public int? vorkommastelle; + public int? Vorkommastelle { get; set; } - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "nachkommastelle", Required = Required.Default)] [NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] [ProtoMember(1018)] - public int? nachkommastelle; + public int? Nachkommastelle { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/COM/Zeitraum.cs b/BO4E-dotnet/COM/Zeitraum.cs index 72be3189..a5a6bb5e 100644 --- a/BO4E-dotnet/COM/Zeitraum.cs +++ b/BO4E-dotnet/COM/Zeitraum.cs @@ -1,8 +1,11 @@ using System; using System.Runtime.Serialization; + using BO4E.ENUM; using BO4E.meta; + using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -12,57 +15,57 @@ namespace BO4E.COM public class Zeitraum : COM { /// Die Einheit in der die Dauer angeben ist. Z.B. Monate. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "einheit", Required = Required.Default)] [FieldName("unit", Language.EN)] [ProtoMember(3)] - public Zeiteinheit? einheit; + public Zeiteinheit? Einheit { get; set; } /// Gibt die Anzahl der Zeiteinheiten an, z.B. 3 (Monate). - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "dauer", Required = Required.Default)] [FieldName("duration", Language.EN)] [ProtoMember(4)] - public decimal? dauer; + public decimal? Dauer { get; set; } /// Gibt Tag und Uhrzeit (falls vorhanden) an, wann der Zeitraum startet. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "startdatum", Required = Required.Default)] [FieldName("startDate", Language.EN)] [ProtoMember(5)] - public DateTime? startdatum; + public DateTime? Startdatum { get; set; } /// Gibt Tag und Uhrzeit (falls vorhanden) an, wann der Zeitraum endet. - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "enddatum", Required = Required.Default)] [FieldName("endDate", Language.EN)] [ProtoMember(6)] - public DateTime? enddatum; + public DateTime? Enddatum { get; set; } /// - /// sets and iff and are given. + /// sets and iff and are given. /// [OnSerialized] public void FillNullValues(StreamingContext context) { - if (startdatum.HasValue && enddatum.HasValue) + if (Startdatum.HasValue && Enddatum.HasValue) { - TimeSpan ts = enddatum.Value - startdatum.Value; + TimeSpan ts = Enddatum.Value - Startdatum.Value; if (ts.TotalSeconds < 60) { - dauer = (decimal)ts.TotalSeconds; - einheit = Zeiteinheit.SEKUNDE; + Dauer = (decimal)ts.TotalSeconds; + Einheit = Zeiteinheit.SEKUNDE; } else if (ts.TotalSeconds < 3600) { - dauer = (decimal)ts.TotalMinutes; - einheit = Zeiteinheit.MINUTE; + Dauer = (decimal)ts.TotalMinutes; + Einheit = Zeiteinheit.MINUTE; } else if (ts.TotalSeconds < 24 * 3600) { - dauer = (decimal)ts.TotalHours; - einheit = Zeiteinheit.STUNDE; + Dauer = (decimal)ts.TotalHours; + Einheit = Zeiteinheit.STUNDE; } else// if (ts.TotalDays < 31) { - dauer = (decimal)ts.TotalDays; - einheit = Zeiteinheit.TAG; + Dauer = (decimal)ts.TotalDays; + Einheit = Zeiteinheit.TAG; } } } diff --git a/BO4E-dotnet/COM/Zustaendigkeit.cs b/BO4E-dotnet/COM/Zustaendigkeit.cs index 4bee72d6..617afece 100644 --- a/BO4E-dotnet/COM/Zustaendigkeit.cs +++ b/BO4E-dotnet/COM/Zustaendigkeit.cs @@ -1,5 +1,5 @@ -using BO4E.ENUM; using Newtonsoft.Json; + using ProtoBuf; namespace BO4E.COM @@ -9,16 +9,16 @@ namespace BO4E.COM public class Zustaendigkeit : COM { /// Berufliche Rolle des Ansprechpartners - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "jobtitel", Required = Required.Default)] [ProtoMember(3)] - public string jobtitel; + public string Jobtitel { get; set; } /// Abteilung, in der der Ansprechpartner tätig ist - [JsonProperty(Required = Required.Default)] + [JsonProperty(PropertyName = "abteilung", Required = Required.Default)] [ProtoMember(4)] - public string abteilung; - /// Hier kann eine thematische Zuordnung des APs angegeben werden. Details - [JsonProperty(Required = Required.Default)] + public string Abteilung { get; set; } + /// Hier kann eine thematische Zuordnung des APs angegeben werden. Details + [JsonProperty(PropertyName = "themengebiet", Required = Required.Default)] [ProtoMember(5)] - public string themengebiet; + public string Themengebiet { get; set; } } } \ No newline at end of file diff --git a/BO4E-dotnet/meta/Bo4eUri.cs b/BO4E-dotnet/meta/Bo4eUri.cs index 2b6e4753..a770374d 100644 --- a/BO4E-dotnet/meta/Bo4eUri.cs +++ b/BO4E-dotnet/meta/Bo4eUri.cs @@ -6,7 +6,9 @@ using System.Linq; using System.Reflection; using System.Text.RegularExpressions; + using BO4E.BO; + using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -20,7 +22,7 @@ public class Bo4eUri : Uri { private const string BO4E_SCHEME = "bo4e://"; private const string NULL_KEY_PLACEHOLDER = "~"; // an allowed character in URLs that is not escaped - private static readonly Regex FILTER_AND_PATTERN = new Regex(@"\s*(?\w+)\s*(?:=|eq)\s*(['""]|)(?\w+)\1\s*(?:and)?\s*", RegexOptions.IgnoreCase|RegexOptions.Compiled); // \1 backreferences the '" group (in c#, would be \2 in other parsers) + private static readonly Regex FILTER_AND_PATTERN = new Regex(@"\s*(?\w+)\s*(?:=|eq)\s*(['""]|)(?\w+)\1\s*(?:and)?\s*", RegexOptions.IgnoreCase | RegexOptions.Compiled); // \1 backreferences the '" group (in c#, would be \2 in other parsers) /// /// Instantiates a Bo4eUri object. Throws Argument(Null)Exception if URI is null, not well formed ( or doesn't match the bo4e uri regex. @@ -141,38 +143,38 @@ public static Bo4eUri GetUri(BusinessObject bo, bool includeUserProperties = fal Bo4eUri baseUri = new Bo4eUri(baseUriString); string relativeUriString = string.Empty; - foreach (FieldInfo keyField in GetKeyFields(bo)) + foreach (PropertyInfo keyProp in GetKeyFields(bo)) { //relativeUriString += keyField.Name; // line is useful for debugging - if (keyField.GetValue(bo) != null) + if (keyProp.GetValue(bo) != null) { - if (keyField.GetValue(bo).GetType() == typeof(string)) + if (keyProp.GetValue(bo).GetType() == typeof(string)) { - if (keyField.GetValue(bo).ToString() == string.Empty) + if (keyProp.GetValue(bo).ToString() == string.Empty) { relativeUriString += NULL_KEY_PLACEHOLDER + "/"; } else { - relativeUriString += keyField.GetValue(bo) + "/"; + relativeUriString += keyProp.GetValue(bo) + "/"; } } - else if (keyField.GetValue(bo).GetType() == typeof(int)) + else if (keyProp.GetValue(bo).GetType() == typeof(int)) { - relativeUriString += keyField.GetValue(bo).ToString() + "/"; + relativeUriString += keyProp.GetValue(bo).ToString() + "/"; } - else if (keyField.GetValue(bo) is Enum) + else if (keyProp.GetValue(bo) is Enum) { - relativeUriString += keyField.GetValue(bo).ToString() + "/"; + relativeUriString += keyProp.GetValue(bo).ToString() + "/"; } - else if (keyField.GetValue(bo).GetType().IsSubclassOf(typeof(BusinessObject))) + else if (keyProp.GetValue(bo).GetType().IsSubclassOf(typeof(BusinessObject))) { - BusinessObject innerBo = (BusinessObject)keyField.GetValue(bo); + BusinessObject innerBo = (BusinessObject)keyProp.GetValue(bo); relativeUriString += GetUri(innerBo).GetComponents(UriComponents.Path, UriFormat.UriEscaped).ToString(); } else { - throw new NotImplementedException($"Using {keyField.GetValue(bo).GetType()} as [BoKey] is not supported yet."); + throw new NotImplementedException($"Using {keyProp.GetValue(bo).GetType()} as [BoKey] is not supported yet."); } } else @@ -185,10 +187,10 @@ public static Bo4eUri GetUri(BusinessObject bo, bool includeUserProperties = fal relativeUriString += NULL_KEY_PLACEHOLDER + "/"; } } - if (includeUserProperties && bo.userProperties != null && bo.userProperties.Count > 0) + if (includeUserProperties && bo.UserProperties != null && bo.UserProperties.Count > 0) { int n = 0; - foreach (var up in bo.userProperties) + foreach (var up in bo.UserProperties) { if (n == 0) { @@ -214,40 +216,43 @@ public static Bo4eUri GetUri(BusinessObject bo, bool includeUserProperties = fal } } - private static IList GetKeyFields(BusinessObject bo) + private static IList GetKeyFields(BusinessObject bo) { if (bo == null) { throw new ArgumentNullException("Business Object must not be null."); } - return GetKeyFields(bo.GetType()); + return GetKeyProperties(bo.GetType()); } - private static IList GetKeyFields(Type boType) + private static IList GetKeyProperties(Type boType) { - FieldInfo[] allKeyFields = BoMapper.GetAnnotatedFields(boType, typeof(BoKey)); - if (allKeyFields.Length == 0) + var allKeyProperties = boType.GetProperties() + .Where(p => p.GetCustomAttributes(typeof(BoKey), false).Length > 0) + .OrderBy(af => af.GetCustomAttribute()?.Order) + .ToArray(); + if (allKeyProperties.Length == 0) { throw new NotImplementedException($"Business Object {boType.Name} has no [BoKey] defined => can't create URI."); } - IList ownKeyFields = new List(); + IList ownKeyProps = new List(); bool ignoreInheritedFields = false; // default - foreach (FieldInfo keyField in allKeyFields) + foreach (var keyProp in allKeyProperties) { - if (keyField.DeclaringType == boType - && keyField.GetCustomAttribute().IgnoreInheritedKeys) + if (keyProp.DeclaringType == boType + && keyProp.GetCustomAttribute().IgnoreInheritedKeys) { ignoreInheritedFields = true; - ownKeyFields.Add(keyField); + ownKeyProps.Add(keyProp); } } if (ignoreInheritedFields) { - return ownKeyFields; + return ownKeyProps; } else { - return allKeyFields.ToList(); + return allKeyProperties.ToList(); } } @@ -279,13 +284,13 @@ public JObject GetQueryObject(Type boType = null, int i = 0) // business objects is the same as the order of the BO key values encoded in the URI // path segments. - foreach (FieldInfo keyField in GetKeyFields(boType)) + foreach (PropertyInfo keyProp in GetKeyProperties(boType)) { - string keyFieldName = keyField.Name; - JsonPropertyAttribute jpa = keyField.GetCustomAttribute(); + string keyPropName = keyProp.Name; + JsonPropertyAttribute jpa = keyProp.GetCustomAttribute(); if (jpa != null && jpa.PropertyName != null) { - keyFieldName = jpa.PropertyName; + keyPropName = jpa.PropertyName; } string keyValue; try @@ -300,18 +305,18 @@ public JObject GetQueryObject(Type boType = null, int i = 0) { keyValue = keyValue.Substring(0, keyValue.Length - 1); } - if (keyField.FieldType == typeof(string)) + if (keyProp.PropertyType == typeof(string)) { if (keyValue == NULL_KEY_PLACEHOLDER) { - result.Add(keyFieldName, null); + result.Add(keyPropName, null); } else { - result.Add(keyFieldName, keyValue); + result.Add(keyPropName, keyValue); } } - else if (keyField.FieldType == typeof(int)) + else if (keyProp.PropertyType == typeof(int)) { /*if (keyField.FieldType.IsEnum) { @@ -321,32 +326,32 @@ public JObject GetQueryObject(Type boType = null, int i = 0) else*/ if (Int32.TryParse(keyValue, out int keyValueInt)) { - result.Add(keyFieldName, keyValueInt); + result.Add(keyPropName, keyValueInt); } else { - throw new ArgumentException($"Key segment {keyFieldName} could not be parsed as int although an integer type was expected!"); + throw new ArgumentException($"Key segment {keyPropName} could not be parsed as int although an integer type was expected!"); } } - else if (keyField.FieldType.IsSubclassOf(typeof(BusinessObject))) + else if (keyProp.PropertyType.IsSubclassOf(typeof(BusinessObject))) { - JObject subresult = GetQueryObject(keyField.FieldType, i - 1); - result.Add(keyFieldName, subresult); + JObject subresult = GetQueryObject(keyProp.PropertyType, i - 1); + result.Add(keyPropName, subresult); } else { - throw new NotImplementedException($"Using {keyField.FieldType} as [BoKey] is not supported yet."); + throw new NotImplementedException($"Using {keyProp.PropertyType} as [BoKey] is not supported yet."); } } var query = System.Web.HttpUtility.ParseQueryString(this.Query); - var boFields = this.GetBoType().GetFields().Select(f => f.Name); + var boProps = this.GetBoType().GetProperties().Select(p => p.Name); if (query.AllKeys.Contains("filter")) // currently this pattern only supports AND concatenation, not OR. result should contain multiple JObjects { string filter = query.Get("filter"); foreach (Match match in FILTER_AND_PATTERN.Matches(filter)) { - if (boFields.Contains(match.Groups["key"].Value)) + if (boProps.Contains(match.Groups["key"].Value, StringComparer.OrdinalIgnoreCase)) { result[match.Groups["key"].Value] = match.Groups["value"].Value; } @@ -363,9 +368,9 @@ public Bo4eUri AddFilter(IDictionary filterObject) { NameValueCollection query = System.Web.HttpUtility.ParseQueryString(this.Query); string filterString = string.Empty; - var boFields = this.GetBoType().GetFields().Select(f => f.Name); + var boFields = this.GetBoType().GetProperties().Select(p => p.Name); string andString = " and "; - foreach (var kvp in filterObject.Where(kvp => kvp.Value != null && boFields.Contains(kvp.Key))) + foreach (var kvp in filterObject.Where(kvp => kvp.Value != null && boFields.Contains(kvp.Key, StringComparer.OrdinalIgnoreCase))) { filterString += $"{andString}{kvp.Key} eq '{kvp.Value}'"; } diff --git a/BO4E-dotnet/meta/DataCategory.cs b/BO4E-dotnet/meta/DataCategory.cs index 24c4b393..64caeff2 100644 --- a/BO4E-dotnet/meta/DataCategory.cs +++ b/BO4E-dotnet/meta/DataCategory.cs @@ -35,7 +35,7 @@ public enum DataCategory /// POD, /// - /// the might be handled separately with this DataCategory + /// the might be handled separately with this DataCategory /// USER_PROPERTIES, } diff --git a/BO4ETestProject/BoEdiMapper/messlokation.json b/BO4ETestProject/BoEdiMapper/messlokation.json index 808045c4..343680d1 100644 --- a/BO4ETestProject/BoEdiMapper/messlokation.json +++ b/BO4ETestProject/BoEdiMapper/messlokation.json @@ -2,7 +2,7 @@ "expectedResult": { "versionStruktur": 1, "boTyp": "MESSLOKATION", - "messLokationsId": "DE1234567889", + "messlokationsId": "DE1234567889", "sparte": "STROM", "netzebeneMessung": "E06", "messgebietNr": null, @@ -19,7 +19,7 @@ "input": { "versionStruktur": 1, "boTyp": "MESSLOKATION", - "messLokationsId": "DE1234567889", + "messlokationsId": "DE1234567889", "sparte": "STROM", "netzebeneMessung": "NSP", "messgebietNr": null, diff --git a/BO4ETestProject/BoMapperTests/messlokation_hf_sap.json b/BO4ETestProject/BoMapperTests/messlokation_hf_sap.json index 51b163ac..2f014eda 100644 --- a/BO4ETestProject/BoMapperTests/messlokation_hf_sap.json +++ b/BO4ETestProject/BoMapperTests/messlokation_hf_sap.json @@ -3,7 +3,7 @@ "input": { "versionStruktur": 1, "boTyp": "MESSLOKATION", - "messLokationsId": "DE0000000000000000000000010000397", + "messlokationsId": "DE0000000000000000000000010000397", "sparte": "STROM", "netzebeneMessung": "MSP", "messgebietNr": null, diff --git a/BO4ETestProject/BoMapperTests/messlokation_userProps.json b/BO4ETestProject/BoMapperTests/messlokation_userProps.json index 60f40ecc..882a38f2 100644 --- a/BO4ETestProject/BoMapperTests/messlokation_userProps.json +++ b/BO4ETestProject/BoMapperTests/messlokation_userProps.json @@ -4,7 +4,7 @@ "input": { "versionStruktur": 1, "boTyp": "MESSLOKATION", - "messLokationsId": "DE0000000000000000000000010000397", + "messlokationsId": "DE0000000000000000000000010000397", "sparte": "STROM", "netzebeneMessung": "MSP", "messgebietNr": null, diff --git a/BO4ETestProject/BoMapperTests/rechnung.json b/BO4ETestProject/BoMapperTests/rechnung.json index b350386a..52f033f7 100644 --- a/BO4ETestProject/BoMapperTests/rechnung.json +++ b/BO4ETestProject/BoMapperTests/rechnung.json @@ -8,7 +8,7 @@ "rechnungsnummer": "003000000007", "rechnungsdatum": "2019-08-27T22:00:00Z", "faelligkeitsdatum": "2019-08-27T22:00:00Z", - "rechnungsstyp": "ABSCHLAGSRECHNUNG", + "rechnungstyp": "ABSCHLAGSRECHNUNG", "rechnungsperiode": { "startdatum": "2019-01-10T23:00:00Z", "enddatum": "2019-12-24T23:00:00Z" diff --git a/BO4ETestProject/TestBOCOMDesign.cs b/BO4ETestProject/TestBOCOMDesign.cs index 151272a1..6d66725a 100644 --- a/BO4ETestProject/TestBOCOMDesign.cs +++ b/BO4ETestProject/TestBOCOMDesign.cs @@ -2,11 +2,13 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; -using BO4E; + using BO4E.BO; using BO4E.COM; using BO4E.meta; + using Microsoft.VisualStudio.TestTools.UnitTesting; + using Newtonsoft.Json; namespace TestBO4E @@ -15,13 +17,13 @@ namespace TestBO4E public class TestBOCOMDesign { [TestMethod] - public void TestNoPropertiesBo() + public void TestNoBOFields() { - foreach (var type in typeof(BusinessObject).Assembly.GetTypes().Where(t => t.BaseType == typeof(BusinessObject))) + foreach (var type in typeof(BusinessObject).Assembly.GetTypes().Where(t => typeof(BusinessObject).IsAssignableFrom(t))) { - var properties = type.GetProperties(); + var fields = type.GetFields(BindingFlags.Public); // properties are not allowed in BusinessObjects because a lot of features rely on fields! - Assert.AreEqual(0, properties.Count(), $"Type {type} must not contain properties but has: {String.Join(", ", properties.ToList())}"); + Assert.AreEqual(0, fields.Count(), $"Type {type} must not contain fields but has: {string.Join(", ", fields.ToList())}"); } } @@ -35,13 +37,13 @@ public void TestBoAllPublic() } [TestMethod] - public void TestNoPropertiesCOM() + public void TestNoCOMFields() { - foreach (var type in typeof(BO4E.COM.COM).Assembly.GetTypes().Where(t => t.BaseType == typeof(BO4E.COM.COM))) + foreach (var type in typeof(BO4E.COM.COM).Assembly.GetTypes().Where(t => typeof(COM).IsAssignableFrom(t))) { - var properties = type.GetProperties(); + var fields = type.GetFields(); // properties are not allowed in COM Objects because a lot of features rely on fields! - Assert.AreEqual(0, properties.Count(), $"Type {type} must not contain properties but has: {String.Join(", ", properties.ToList())}"); + Assert.AreEqual(0, fields.Count(), $"Type {type} must not contain fields but has: {string.Join(", ", fields.ToList())}"); } } @@ -91,8 +93,11 @@ public void TestBoKeys() { foreach (var type in typeof(BusinessObject).Assembly.GetTypes().Where(t => t.BaseType == typeof(BusinessObject) && !t.IsAbstract && !NO_KEYS_WHITELIST.Contains(t))) { - var keyFields = BoMapper.GetAnnotatedFields(type, typeof(BoKey)); - Assert.IsTrue(keyFields.Count() > 0, $"Type {type} is derived from {nameof(BusinessObject)} but has no [{nameof(BoKey)}] attribute."); + var keyProps = type.GetProperties() + .Where(p => p.GetCustomAttributes(typeof(BoKey), false).Length > 0) + .OrderBy(ap => ap.GetCustomAttribute()?.Order) + .ToArray(); + Assert.IsTrue(keyProps.Count() > 0, $"Type {type} is derived from {nameof(BusinessObject)} but has no [{nameof(BoKey)}] attribute."); } } @@ -104,21 +109,21 @@ public void NullableDefaultEnums() { foreach (var boType in typeof(BusinessObject).Assembly.GetTypes().Where(t => (t.BaseType == typeof(BusinessObject) || t.BaseType == typeof(COM)) && !t.IsAbstract)) { - foreach (var obligDefaultField in boType.GetFields(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance) + foreach (var obligDefaultField in boType.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance) .Where(field => field.GetCustomAttributes(typeof(JsonPropertyAttribute), true) .Cast() .Any(jpa => jpa.Required == Required.Default))) { - if (Nullable.GetUnderlyingType(obligDefaultField.FieldType) != null || obligDefaultField.FieldType==typeof(string)) + if (Nullable.GetUnderlyingType(obligDefaultField.PropertyType) != null || obligDefaultField.PropertyType == typeof(string)) { // it is already nullable. continue; } - if (!obligDefaultField.FieldType.IsPrimitive && !obligDefaultField.FieldType.IsEnum) + if (!obligDefaultField.PropertyType.IsPrimitive && !obligDefaultField.PropertyType.IsEnum) { continue; } - Assert.IsTrue(false, $"The type {obligDefaultField.FieldType} of {boType.FullName}.{obligDefaultField.Name} is not nullable but not marked as obligatory."); + Assert.IsTrue(false, $"The type {obligDefaultField.PropertyType} of {boType.FullName}.{obligDefaultField.Name} is not nullable but not marked as obligatory."); // this is a problem because e.g. for integers you can't distinguish between no value (null) or initial value (0). Same is true for Enum values } } diff --git a/BO4ETestProject/TestBOCOMGuids.cs b/BO4ETestProject/TestBOCOMGuids.cs index 56606514..6d17e5c1 100644 --- a/BO4ETestProject/TestBOCOMGuids.cs +++ b/BO4ETestProject/TestBOCOMGuids.cs @@ -15,9 +15,9 @@ public void TestBOGuids() { Energiemenge em = new Energiemenge() { - lokationsId = "DE123456", - lokationstyp = BO4E.ENUM.Lokationstyp.MaLo, - energieverbrauch = new List(), + LokationsId = "DE123456", + LokationsTyp = BO4E.ENUM.Lokationstyp.MaLo, + Energieverbrauch = new List(), guid = Guid.NewGuid().ToString() }; diff --git a/BO4ETestProject/TestBo4eUri.cs b/BO4ETestProject/TestBo4eUri.cs index 5d1af1c9..3bc4327d 100644 --- a/BO4ETestProject/TestBo4eUri.cs +++ b/BO4ETestProject/TestBo4eUri.cs @@ -2,10 +2,14 @@ using System.Collections.Generic; using System.IO; using System.Linq; + using BO4E.BO; using BO4E.meta; + using JsonDiffPatchDotNet; + using Microsoft.VisualStudio.TestTools.UnitTesting; + using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -113,7 +117,7 @@ public void TestBoNamesAndTypes() private static readonly Dictionary> boKeyNamesResults = new Dictionary>() { {typeof(Marktlokation), new List{"marktlokationsId"}}, - {typeof(Messlokation), new List{"messLokationsId"} } //<-- should be the json property name if annotated + {typeof(Messlokation), new List{"messlokationsId"} } //<-- should be the json property name if annotated }; [TestMethod] @@ -123,7 +127,7 @@ public void TestBoKeyNames() { List expectedList = boKeyNamesResults[boType]; List actualList = BusinessObject.GetBoKeyNames(boType); - Assert.IsTrue(expectedList.SequenceEqual(actualList), $"{boType.ToString()}: expected: [{String.Join(",", expectedList)}] actual: [{String.Join(",", actualList)}] "); + Assert.IsTrue(expectedList.SequenceEqual(actualList), $"{boType.ToString()}: expected: [{string.Join(",", expectedList)}] actual: [{string.Join(",", actualList)}] "); } } @@ -154,8 +158,8 @@ public void TestUPInclusion() { string emString = @"{'versionStruktur':1,'boTyp':'ENERGIEMENGE','lokationsId':'DE0000000000000000000000010000400','lokationstyp':'MeLo','zw':'000000000030000301','anlagennummer':'4000000199','messlokationsId':'DE0000000000000000000000010000400','marktlokationsId':''}"; Energiemenge em = JsonConvert.DeserializeObject(emString); - Assert.IsNotNull(em.userProperties); - Assert.IsTrue(em.userProperties.Keys.Count > 0); + Assert.IsNotNull(em.UserProperties); + Assert.IsTrue(em.UserProperties.Keys.Count > 0); Bo4eUri uri = em.GetURI(true); Assert.IsTrue(uri.ToString().Contains("messlokationsId=")); Assert.IsTrue(uri.ToString().Contains("anlagennummer=4000000199")); diff --git a/BO4ETestProject/TestBoExpansion.cs b/BO4ETestProject/TestBoExpansion.cs index f743b9c9..40b707b6 100644 --- a/BO4ETestProject/TestBoExpansion.cs +++ b/BO4ETestProject/TestBoExpansion.cs @@ -11,7 +11,7 @@ public class TestBoExpansion [TestMethod] public void TestBoExpansionMaLo() { - HashSet result = new HashSet(BusinessObject.GetExpandableFieldNames(typeof(Marktlokation)).Keys); + HashSet result = new HashSet(BusinessObject.GetExpandablePropertyNames(typeof(Marktlokation)).Keys); Assert.IsTrue(result.Contains("zugehoerigeMesslokationen")); HashSet result2 = new HashSet(BusinessObject.GetExpandableFieldNames("Marktlokation").Keys); @@ -22,7 +22,7 @@ public void TestBoExpansionMaLo() [TestMethod] public void TestBoExpansionMeLo() { - HashSet result = new HashSet(BusinessObject.GetExpandableFieldNames(typeof(Messlokation)).Keys); + HashSet result = new HashSet(BusinessObject.GetExpandablePropertyNames(typeof(Messlokation)).Keys); Assert.IsTrue(result.Contains("messadresse")); Assert.IsTrue(result.Contains("messlokationszaehler")); Assert.IsTrue(result.Contains("messlokationszaehler.zaehlwerke")); @@ -31,7 +31,7 @@ public void TestBoExpansionMeLo() [TestMethod] public void TestTypesEnergiemenge() { - Dictionary result = BusinessObject.GetExpandableFieldNames(typeof(Energiemenge)); + Dictionary result = BusinessObject.GetExpandablePropertyNames(typeof(Energiemenge)); Assert.IsTrue(result.ContainsKey("energieverbrauch")); Type verbrauchsType = result["energieverbrauch"]; Assert.IsTrue(verbrauchsType.IsGenericType); diff --git a/BO4ETestProject/TestBoMapper.cs b/BO4ETestProject/TestBoMapper.cs index e7e2d944..fd043181 100644 --- a/BO4ETestProject/TestBoMapper.cs +++ b/BO4ETestProject/TestBoMapper.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using System.Reflection; using BO4E; using BO4E.BO; @@ -20,13 +19,6 @@ namespace TestBO4E [TestClass] public class TestBoMapper { - [TestMethod] - public void TestFieldAnnotationFinder() - { - FieldInfo[] result = BoMapper.GetAnnotatedFields("Messlokation"); - Assert.IsTrue(result.Length > 0); - } - [TestMethod] public void TestBoMapping() { @@ -159,8 +151,8 @@ public void TestVertragQuickFix() json = JsonConvert.DeserializeObject(jsonString); } var v = JsonConvert.DeserializeObject(json["input"].ToString(), LenientParsing.MOST_LENIENT.GetJsonSerializerSettings()); - Assert.IsNotNull(v.vertragsteile); - Assert.AreEqual("DE54321", v.vertragsteile.First().lokation); + Assert.IsNotNull(v.Vertragsteile); + Assert.AreEqual("DE54321", v.Vertragsteile.First().Lokation); } [TestMethod] @@ -176,7 +168,7 @@ public void TestSummerTimeBug() Energiemenge em = JsonConvert.DeserializeObject(json["input"].ToString(), LenientParsing.MOST_LENIENT.GetJsonSerializerSettings()); if (TimeZoneInfo.Local == Verbrauch.CENTRAL_EUROPE_STANDARD_TIME) { - Assert.AreEqual(2, em.energieverbrauch.Count); // weil 2 verschiedene status + Assert.AreEqual(2, em.Energieverbrauch.Count); // weil 2 verschiedene status } } @@ -192,7 +184,7 @@ public void TestVertragStringToInt() } LenientParsing lenients = LenientParsing.StringToInt; Vertrag v = JsonConvert.DeserializeObject(json["input"].ToString(), lenients.GetJsonSerializerSettings()); - Assert.AreEqual(v.vertragskonditionen.anzahlAbschlaege, 12); + Assert.AreEqual(v.Vertragskonditionen.AnzahlAbschlaege, 12); } [TestMethod] @@ -206,11 +198,11 @@ public void TestProfDecimalsVerbrauchBug() json = JsonConvert.DeserializeObject(jsonString); } Energiemenge em = JsonConvert.DeserializeObject(json["input"].ToString(), LenientParsing.MOST_LENIENT.GetJsonSerializerSettings()); - Assert.AreEqual(4, em.energieverbrauch.Count); - Assert.AreEqual(59.0M, em.energieverbrauch[0].wert); - Assert.AreEqual(58.0M, em.energieverbrauch[1].wert); - Assert.AreEqual(57.0M, em.energieverbrauch[2].wert); - Assert.AreEqual(57.123M, em.energieverbrauch[3].wert); + Assert.AreEqual(4, em.Energieverbrauch.Count); + Assert.AreEqual(59.0M, em.Energieverbrauch[0].Wert); + Assert.AreEqual(58.0M, em.Energieverbrauch[1].Wert); + Assert.AreEqual(57.0M, em.Energieverbrauch[2].Wert); + Assert.AreEqual(57.123M, em.Energieverbrauch[3].Wert); } [TestMethod] @@ -224,36 +216,36 @@ public void TestProfDecimalsEnergiemengeBug() json = JsonConvert.DeserializeObject(jsonString); } Energiemenge em = JsonConvert.DeserializeObject(json["input"].ToString(), LenientParsing.MOST_LENIENT.GetJsonSerializerSettings()); - Assert.AreEqual(1.375000M, em.energieverbrauch.First().wert); - Assert.AreEqual(1.2130000M, em.energieverbrauch.Last().wert); + Assert.AreEqual(1.375000M, em.Energieverbrauch.First().Wert); + Assert.AreEqual(1.2130000M, em.Energieverbrauch.Last().Wert); } [TestMethod] public void TestSapTimeZoneUserProperties() { Verbrauch v1 = JsonConvert.DeserializeObject("{\"startdatum\":\"2019-03-30T02:45:00\",\"enddatum\":\"2019-03-30T03:15:00\",\"wertermittlungsverfahren\":1,\"obiskennzahl\":\"1-0:1.29.0\",\"wert\":0.0,\"einheit\":1,\"zw\":\"000000000030000301\",\"Status\":\"IU015\",\"sap_timezone\":\"CET\"}"); - Assert.AreEqual(DateTimeKind.Utc, v1.startdatum.Kind); - Assert.AreEqual(DateTimeKind.Utc, v1.enddatum.Kind); - Assert.AreEqual(2.75, v1.startdatum.TimeOfDay.TotalHours); - Assert.AreEqual(3.25, v1.enddatum.TimeOfDay.TotalHours); + Assert.AreEqual(DateTimeKind.Utc, v1.Startdatum.Kind); + Assert.AreEqual(DateTimeKind.Utc, v1.Enddatum.Kind); + Assert.AreEqual(2.75, v1.Startdatum.TimeOfDay.TotalHours); + Assert.AreEqual(3.25, v1.Enddatum.TimeOfDay.TotalHours); Verbrauch v2 = JsonConvert.DeserializeObject("{\"startdatum\":\"2019-03-30T02:45:00\",\"enddatum\":\"2019-03-30T03:15:00\",\"wertermittlungsverfahren\":1,\"obiskennzahl\":\"1-0:1.29.0\",\"wert\":0.0,\"einheit\":1,\"zw\":\"000000000030000301\",\"Status\":\"IU015\",\"sap_timezone\":\"UTC\"}"); - Assert.AreEqual(DateTimeKind.Utc, v2.startdatum.Kind); - Assert.AreEqual(DateTimeKind.Utc, v2.enddatum.Kind); - Assert.AreEqual(2.75, v2.startdatum.TimeOfDay.TotalHours); - Assert.AreEqual(3.25, v2.enddatum.TimeOfDay.TotalHours); + Assert.AreEqual(DateTimeKind.Utc, v2.Startdatum.Kind); + Assert.AreEqual(DateTimeKind.Utc, v2.Enddatum.Kind); + Assert.AreEqual(2.75, v2.Startdatum.TimeOfDay.TotalHours); + Assert.AreEqual(3.25, v2.Enddatum.TimeOfDay.TotalHours); Verbrauch v3 = JsonConvert.DeserializeObject("{\"startdatum\":\"2019-10-27T02:30:00\",\"enddatum\":\"2019-10-27T02:45:00\",\"wertermittlungsverfahren\":1,\"obiskennzahl\":\"1-0:1.29.0\",\"wert\":0.0,\"einheit\":1,\"zw\":\"000000000030000301\",\"Status\":\"IU015\",\"sap_timezone\":\"CEST\"}"); - Assert.AreEqual(DateTimeKind.Utc, v3.startdatum.Kind); - Assert.AreEqual(DateTimeKind.Utc, v3.enddatum.Kind); - Assert.AreEqual(2.5, v3.startdatum.TimeOfDay.TotalHours); - Assert.AreEqual(2.75, v3.enddatum.TimeOfDay.TotalHours); + Assert.AreEqual(DateTimeKind.Utc, v3.Startdatum.Kind); + Assert.AreEqual(DateTimeKind.Utc, v3.Enddatum.Kind); + Assert.AreEqual(2.5, v3.Startdatum.TimeOfDay.TotalHours); + Assert.AreEqual(2.75, v3.Enddatum.TimeOfDay.TotalHours); Verbrauch v4 = JsonConvert.DeserializeObject("{\"startdatum\":\"2019-10-27T02:45:00\",\"enddatum\":\"2019-10-27T03:15:00\",\"wertermittlungsverfahren\":1,\"obiskennzahl\":\"1-0:1.29.0\",\"wert\":0.0,\"einheit\":1,\"zw\":\"000000000030000301\",\"Status\":\"IU015\",\"sap_timezone\":\"CEST\"}"); - Assert.AreEqual(DateTimeKind.Utc, v4.startdatum.Kind); - Assert.AreEqual(DateTimeKind.Utc, v4.enddatum.Kind); - Assert.AreEqual(2.75, v4.startdatum.TimeOfDay.TotalHours); - Assert.AreEqual(3.25, v4.enddatum.TimeOfDay.TotalHours); + Assert.AreEqual(DateTimeKind.Utc, v4.Startdatum.Kind); + Assert.AreEqual(DateTimeKind.Utc, v4.Enddatum.Kind); + Assert.AreEqual(2.75, v4.Startdatum.TimeOfDay.TotalHours); + Assert.AreEqual(3.25, v4.Enddatum.TimeOfDay.TotalHours); } [TestMethod] @@ -262,17 +254,17 @@ public void TestSommerzeitumstellung() // endzeitpunkt wird im sap aus startzeitpunkt + 1 std zusammengesetzt. bei umstellung auf sommerzeit entsteht als artefakt ein shift Verbrauch v1 = JsonConvert.DeserializeObject("{\"zw\":\"000000000020720475\",\"startdatum\":\"201903310100\",\"enddatum\":\"201903310300\",\"wert\":263,\"status\":\"IU021\",\"obiskennzahl\":\"7-10:99.33.17\",\"wertermittlungsverfahren\":\"MESSUNG\",\"einheit\":\"KWH\",\"sap_timezone\":\"CET\"}", new LenientDateTimeConverter()); - Assert.AreEqual(new DateTime(2019, 3, 31, 2, 0, 0, DateTimeKind.Utc), v1.enddatum); + Assert.AreEqual(new DateTime(2019, 3, 31, 2, 0, 0, DateTimeKind.Utc), v1.Enddatum); // negativ test: nur in der sommerzeit soll das nicht passieren Verbrauch v2 = JsonConvert.DeserializeObject("{\"zw\":\"000000000020720475\",\"startdatum\":\"201905310100\",\"enddatum\":\"201905310300\",\"wert\":263,\"status\":\"IU021\",\"obiskennzahl\":\"7-10:99.33.17\",\"wertermittlungsverfahren\":\"MESSUNG\",\"einheit\":\"KWH\",\"sap_timezone\":\"CET\"}", new LenientDateTimeConverter()); - Assert.AreEqual(new DateTime(2019, 5, 31, 3, 0, 0, DateTimeKind.Utc), v2.enddatum); + Assert.AreEqual(new DateTime(2019, 5, 31, 3, 0, 0, DateTimeKind.Utc), v2.Enddatum); // negativ test: nur in der winterzeit soll das nicht passieren Verbrauch v3 = JsonConvert.DeserializeObject("{\"zw\":\"000000000020720475\",\"startdatum\":\"201901310100\",\"enddatum\":\"201901310300\",\"wert\":263,\"status\":\"IU021\",\"obiskennzahl\":\"7-10:99.33.17\",\"wertermittlungsverfahren\":\"MESSUNG\",\"einheit\":\"KWH\",\"sap_timezone\":\"CET\"}", new LenientDateTimeConverter()); - Assert.AreEqual(new DateTime(2019, 1, 31, 3, 0, 0, DateTimeKind.Utc), v3.enddatum); + Assert.AreEqual(new DateTime(2019, 1, 31, 3, 0, 0, DateTimeKind.Utc), v3.Enddatum); } @@ -325,11 +317,11 @@ public void TestNullableDateTimeDeserialization() { Aufgabe a = JsonConvert.DeserializeObject("{\"ccat\":\"ZE01\",\"casenr\":\"470272\",\"objtype\":\"ZISUPROFIL\",\"aufgabenId\":\"REIMPORT\",\"ausgefuehrt\":\"false\",\"ausfuehrender\":\"\",\"ausfuehrungszeitpunkt\":\"0000-00-00T00:00:00Z\"}"); Assert.IsNotNull(a); - Assert.IsFalse(a.ausfuehrungszeitpunkt.HasValue); + Assert.IsFalse(a.Ausfuehrungszeitpunkt.HasValue); Aufgabe b = JsonConvert.DeserializeObject("{\"ccat\":\"ZE01\",\"casenr\":\"470272\",\"objtype\":\"ZISUPROFIL\",\"aufgabenId\":\"REIMPORT\",\"ausgefuehrt\":\"false\",\"ausfuehrender\":\"\",\"ausfuehrungszeitpunkt\":\"2019-07-10T11:52:59Z\"}"); Assert.IsNotNull(b); - Assert.IsTrue(b.ausfuehrungszeitpunkt.HasValue); + Assert.IsTrue(b.Ausfuehrungszeitpunkt.HasValue); } } } diff --git a/BO4ETestProject/TestCOMValidity.cs b/BO4ETestProject/TestCOMValidity.cs index 7bab3dc8..dd9ca002 100644 --- a/BO4ETestProject/TestCOMValidity.cs +++ b/BO4ETestProject/TestCOMValidity.cs @@ -14,11 +14,11 @@ public void TestVerbrauch() Assert.IsFalse(v1.IsValid()); Verbrauch v2 = new Verbrauch { - startdatum = new DateTime(), - enddatum = new DateTime(), - einheit = BO4E.ENUM.Mengeneinheit.ANZAHL, - wert = (decimal)123.456, - obiskennzahl = "asd" + Startdatum = new DateTime(), + Enddatum = new DateTime(), + Einheit = BO4E.ENUM.Mengeneinheit.ANZAHL, + Wert = (decimal)123.456, + Obiskennzahl = "asd" }; Assert.IsTrue(v2.IsValid()); } diff --git a/BO4ETestProject/TestEnergiemengeAdding.cs b/BO4ETestProject/TestEnergiemengeAdding.cs index df64b15c..7c93b466 100644 --- a/BO4ETestProject/TestEnergiemengeAdding.cs +++ b/BO4ETestProject/TestEnergiemengeAdding.cs @@ -13,41 +13,41 @@ public void TestSimpleAdd() { Energiemenge em1 = new Energiemenge() { - lokationsId = "DE123", - lokationstyp = BO4E.ENUM.Lokationstyp.MaLo, - energieverbrauch = new List() + LokationsId = "DE123", + LokationsTyp = BO4E.ENUM.Lokationstyp.MaLo, + Energieverbrauch = new List() { new BO4E.COM.Verbrauch() { - einheit = BO4E.ENUM.Mengeneinheit.ANZAHL, - obiskennzahl = "1-2-3", - enddatum = new DateTime(), - startdatum = new DateTime(), - wert = (decimal)123.456, - wertermittlungsverfahren= BO4E.ENUM.Wertermittlungsverfahren.PROGNOSE + Einheit = BO4E.ENUM.Mengeneinheit.ANZAHL, + Obiskennzahl = "1-2-3", + Enddatum = new DateTime(), + Startdatum = new DateTime(), + Wert = (decimal)123.456, + Wertermittlungsverfahren= BO4E.ENUM.Wertermittlungsverfahren.PROGNOSE } } }; Energiemenge em2 = new Energiemenge() { - lokationsId = "DE123", - lokationstyp = BO4E.ENUM.Lokationstyp.MaLo, - energieverbrauch = new List() + LokationsId = "DE123", + LokationsTyp = BO4E.ENUM.Lokationstyp.MaLo, + Energieverbrauch = new List() { new BO4E.COM.Verbrauch() { - einheit = BO4E.ENUM.Mengeneinheit.ANZAHL, - obiskennzahl = "4-5-6", - enddatum = new DateTime(), - startdatum = new DateTime(), - wert = (decimal)123.456, - wertermittlungsverfahren= BO4E.ENUM.Wertermittlungsverfahren.PROGNOSE + Einheit = BO4E.ENUM.Mengeneinheit.ANZAHL, + Obiskennzahl = "4-5-6", + Enddatum = new DateTime(), + Startdatum = new DateTime(), + Wert = (decimal)123.456, + Wertermittlungsverfahren= BO4E.ENUM.Wertermittlungsverfahren.PROGNOSE } } }; Energiemenge result = em1 + em2; Assert.IsNotNull(result); - Assert.AreEqual(2, result.energieverbrauch.Count); + Assert.AreEqual(2, result.Energieverbrauch.Count); } [TestMethod] @@ -55,13 +55,13 @@ public void TestIllegalAdd() { Energiemenge em1 = new Energiemenge() { - lokationsId = "DE456", - lokationstyp = BO4E.ENUM.Lokationstyp.MeLo + LokationsId = "DE456", + LokationsTyp = BO4E.ENUM.Lokationstyp.MeLo }; Energiemenge em2 = new Energiemenge() { - lokationsId = "DE789", - lokationstyp = BO4E.ENUM.Lokationstyp.MeLo + LokationsId = "DE789", + LokationsTyp = BO4E.ENUM.Lokationstyp.MeLo }; Assert.ThrowsException(() => em1 + em2); } diff --git a/BO4ETestProject/TestEqualities.cs b/BO4ETestProject/TestEqualities.cs index f977b32b..5f2a9eb9 100644 --- a/BO4ETestProject/TestEqualities.cs +++ b/BO4ETestProject/TestEqualities.cs @@ -1,9 +1,12 @@ using System; using System.Collections.Generic; + using BO4E.BO; using BO4E.COM; using BO4E.ENUM; + using Microsoft.VisualStudio.TestTools.UnitTesting; + using Newtonsoft.Json; namespace TestBO4E @@ -22,17 +25,17 @@ public void TestEqualsCOM() v1 = new Verbrauch() { - einheit = Mengeneinheit.KWH, - obiskennzahl = "1-1:1.8.0", - startdatum = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc) + Einheit = Mengeneinheit.KWH, + Obiskennzahl = "1-1:1.8.0", + Startdatum = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc) }; v2 = new Verbrauch() { - einheit = Mengeneinheit.KWH, - obiskennzahl = "1-1:1.8.0", - startdatum = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc) + Einheit = Mengeneinheit.KWH, + Obiskennzahl = "1-1:1.8.0", + Startdatum = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc) }; Assert.AreEqual(v1, v2); @@ -40,9 +43,9 @@ public void TestEqualsCOM() Assert.AreEqual(v1.GetHashCode(), v2.GetHashCode()); Assert.IsFalse(v1 == v2); - v2.obiskennzahl = "1-1:1.8.1"; + v2.Obiskennzahl = "1-1:1.8.1"; Assert.AreNotEqual(v1, v2); - Assert.AreNotEqual(v1.GetHashCode(), v2.GetHashCode()); + Assert.AreNotEqual(v1.GetHashCode(), v2.GetHashCode()); Assert.AreNotEqual(new Preis(), new Menge()); } @@ -53,25 +56,25 @@ public void TestEqualsBO() Energiemenge em2 = new Energiemenge(); Assert.ThrowsException(() => em1.Equals(em2)); Assert.AreEqual(em1.GetHashCode(), em2.GetHashCode()); - - em1.lokationsId = "DE1234"; - em2.lokationsId = "DE1234"; - em1.lokationstyp = BO4E.ENUM.Lokationstyp.MeLo; - em2.lokationstyp = BO4E.ENUM.Lokationstyp.MeLo; + em1.LokationsId = "DE1234"; + em2.LokationsId = "DE1234"; + + em1.LokationsTyp = BO4E.ENUM.Lokationstyp.MeLo; + em2.LokationsTyp = BO4E.ENUM.Lokationstyp.MeLo; - em1.energieverbrauch = new List(); + em1.Energieverbrauch = new List(); Verbrauch v1 = new Verbrauch { - obiskennzahl = "1-2-3-4-5" + Obiskennzahl = "1-2-3-4-5" }; - em1.energieverbrauch.Add(v1); - em2.energieverbrauch = new List(); + em1.Energieverbrauch.Add(v1); + em2.Energieverbrauch = new List(); Verbrauch v2 = new Verbrauch { - obiskennzahl = "1-2-3-4-5" + Obiskennzahl = "1-2-3-4-5" }; - em2.energieverbrauch.Add(v2); + em2.Energieverbrauch.Add(v2); Assert.AreEqual(em1, em2); //Assert.AreEqual(em1.GetHashCode(), em2.GetHashCode()); @@ -79,28 +82,28 @@ public void TestEqualsBO() Verbrauch v3 = new Verbrauch { - einheit = BO4E.ENUM.Mengeneinheit.KWH, - obiskennzahl = "ABC", - startdatum = new DateTime(2018, 1, 1), - enddatum = new DateTime(2018, 12, 31), - wert = 123.456M + Einheit = BO4E.ENUM.Mengeneinheit.KWH, + Obiskennzahl = "ABC", + Startdatum = new DateTime(2018, 1, 1), + Enddatum = new DateTime(2018, 12, 31), + Wert = 123.456M }; - em1.energieverbrauch = new List { v3 }; - em2.energieverbrauch = new List { v3 }; + em1.Energieverbrauch = new List { v3 }; + em2.Energieverbrauch = new List { v3 }; Assert.AreEqual(em1, em2); //Assert.AreEqual(em1.GetHashCode(), em2.GetHashCode()); Assert.IsFalse(em1 == em2); Verbrauch v4 = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(v1)); - v4.wert = 789.012M; - em1.energieverbrauch.Add(v4); + v4.Wert = 789.012M; + em1.Energieverbrauch.Add(v4); Assert.AreNotEqual(em1, em2); - em2.energieverbrauch.Add(v4); + em2.Energieverbrauch.Add(v4); Assert.AreEqual(em1, em2); - em1.energieverbrauch = new List { v3, v4 }; - em2.energieverbrauch = new List { v4, v3 }; + em1.Energieverbrauch = new List { v3, v4 }; + em2.Energieverbrauch = new List { v4, v3 }; Assert.AreNotEqual(em1, em2); //Assert.AreNotEqual(em1.GetHashCode(), em2.GetHashCode()); diff --git a/BO4ETestProject/TestMaLoMeLoId.cs b/BO4ETestProject/TestMaLoMeLoId.cs index 3c9e9059..44f7c937 100644 --- a/BO4ETestProject/TestMaLoMeLoId.cs +++ b/BO4ETestProject/TestMaLoMeLoId.cs @@ -1,7 +1,7 @@ using BO4E.BO; using BO4E.ENUM; + using Microsoft.VisualStudio.TestTools.UnitTesting; -using Newtonsoft.Json; namespace TestBO4E { @@ -40,15 +40,15 @@ public void TestMeLoValidity() { var malo = new Marktlokation() { - marktlokationsId = "1235678901", - sparte = Sparte.STROM, - energierichtung = Energierichtung.AUSSP + MarktlokationsId = "1235678901", + Sparte = Sparte.STROM, + Energierichtung = Energierichtung.AUSSP }; Assert.IsFalse(malo.IsValid()); // because the obligatory bilanzierungsmethode is not set - malo.bilanzierungsmethode = Bilanzierungsmethode.SLP; - Assert.IsTrue(malo.IsValid(checkId:false)); // because all obligatory fields are set + malo.Bilanzierungsmethode = Bilanzierungsmethode.SLP; + Assert.IsTrue(malo.IsValid(checkId: false)); // because all obligatory fields are set Assert.IsFalse(malo.IsValid()); // but the marklokationsId is wrong - malo.marktlokationsId = "51238696781"; // matches the appropriate regex and has the right check sum + malo.MarktlokationsId = "51238696781"; // matches the appropriate regex and has the right check sum Assert.IsTrue(malo.IsValid()); } } diff --git a/BO4ETestProject/TestNotizDeserialization.cs b/BO4ETestProject/TestNotizDeserialization.cs index 65fe1045..2a365c44 100644 --- a/BO4ETestProject/TestNotizDeserialization.cs +++ b/BO4ETestProject/TestNotizDeserialization.cs @@ -14,7 +14,7 @@ public class TestNotizDeserialization public void TestMinusRemoval() { Notiz n = JsonConvert.DeserializeObject("{\"klaerfallnummer\":\"468982\",\"autor\":\"Konstantin Klein\",\"zeitpunkt\":\"2019-05-24T14:05:00Z\",\"inhalt\":\"hallo. das ist eine notiz mit einem lustigen emoji 🥝\n------------------------------------------------------------------------\",\"tdid\":\"0002\",\"tdname\":\"0000468982\",\"tdobject\":\"EMMA_CASE\"}"); - Assert.AreEqual("hallo. das ist eine notiz mit einem lustigen emoji 🥝", n.inhalt); + Assert.AreEqual("hallo. das ist eine notiz mit einem lustigen emoji 🥝", n.Inhalt); } } } diff --git a/BO4ETestProject/TestProtobufSerialization.cs b/BO4ETestProject/TestProtobufSerialization.cs index 988293dd..9a7d1848 100644 --- a/BO4ETestProject/TestProtobufSerialization.cs +++ b/BO4ETestProject/TestProtobufSerialization.cs @@ -1,10 +1,12 @@ using System; using System.IO; -using System.Linq; + using BO4E.BO; using BO4E.COM; + using Microsoft.VisualStudio.TestTools.UnitTesting; + using ProtoBuf; namespace TestBO4E @@ -17,25 +19,25 @@ public void TestProtobufRoundTrip() { Energiemenge em = new Energiemenge() { - lokationsId = "54321012345", - lokationstyp = BO4E.ENUM.Lokationstyp.MaLo, - energieverbrauch = new System.Collections.Generic.List() + LokationsId = "54321012345", + LokationsTyp = BO4E.ENUM.Lokationstyp.MaLo, + Energieverbrauch = new System.Collections.Generic.List() { new Verbrauch() { - einheit = BO4E.ENUM.Mengeneinheit.KWH, - wert = 10.0M, - startdatum = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2019, 1, 2, 0, 0, 0, DateTimeKind.Utc), - obiskennzahl = "1�0:1.8.1" + Einheit = BO4E.ENUM.Mengeneinheit.KWH, + Wert = 10.0M, + Startdatum = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2019, 1, 2, 0, 0, 0, DateTimeKind.Utc), + Obiskennzahl = "1�0:1.8.1" }, new Verbrauch() { - einheit = BO4E.ENUM.Mengeneinheit.MWH, - wert = 23.0M, - startdatum = new DateTime(2019, 1, 2, 0, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2019, 1, 3, 0, 0, 0, DateTimeKind.Utc), - obiskennzahl = "1�0:1.8.1" + Einheit = BO4E.ENUM.Mengeneinheit.MWH, + Wert = 23.0M, + Startdatum = new DateTime(2019, 1, 2, 0, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2019, 1, 3, 0, 0, 0, DateTimeKind.Utc), + Obiskennzahl = "1�0:1.8.1" } } }; @@ -58,7 +60,7 @@ public void TestProtobufRoundTrip() backStream.Seek(0, SeekOrigin.Begin); emRoundTrip = Serializer.Deserialize(backStream); } - Assert.IsNotNull(emRoundTrip.lokationsId); + Assert.IsNotNull(emRoundTrip.LokationsId); Assert.IsTrue(emRoundTrip.IsValid()); Assert.AreEqual(em, emRoundTrip); } diff --git a/BO4ETestProject/TestUserProperties.cs b/BO4ETestProject/TestUserProperties.cs index 6fdfaa9e..f28593fc 100644 --- a/BO4ETestProject/TestUserProperties.cs +++ b/BO4ETestProject/TestUserProperties.cs @@ -1,5 +1,7 @@ using BO4E.BO; + using Microsoft.VisualStudio.TestTools.UnitTesting; + using Newtonsoft.Json; namespace TestBO4E @@ -13,9 +15,9 @@ public void TestDeserialization() string meloJson = @"{'messlokationsId': 'DE0123456789012345678901234567890', 'sparte': 'STROM', 'myCustomInfo': 'some_value_not_covered_by_bo4e', 'myCustomValue': 123.456}"; var melo = JsonConvert.DeserializeObject(meloJson); Assert.IsTrue(melo.IsValid()); - Assert.IsNotNull(melo.userProperties); - Assert.AreEqual("some_value_not_covered_by_bo4e", melo.userProperties["myCustomInfo"].ToObject()); - Assert.AreEqual(123.456M, melo.userProperties["myCustomValue"].ToObject()); + Assert.IsNotNull(melo.UserProperties); + Assert.AreEqual("some_value_not_covered_by_bo4e", melo.UserProperties["myCustomInfo"].ToObject()); + Assert.AreEqual(123.456M, melo.UserProperties["myCustomValue"].ToObject()); } } diff --git a/TestBO4E-dotnet-Encryption/TestAnonymizer.cs b/TestBO4E-dotnet-Encryption/TestAnonymizer.cs index fc2641d2..a95bd88b 100644 --- a/TestBO4E-dotnet-Encryption/TestAnonymizer.cs +++ b/TestBO4E-dotnet-Encryption/TestAnonymizer.cs @@ -153,18 +153,18 @@ public void TestAnonymizeEnergiemengeHashing() BO4E.StaticLogger.Logger = new Microsoft.Extensions.Logging.Debug.DebugLogger("Testlogger", (log, level) => { return true; }); Energiemenge em = new Energiemenge() { - lokationsId = "DE0123456789012345678901234567890", - lokationstyp = BO4E.ENUM.Lokationstyp.MeLo, - energieverbrauch = new List() + LokationsId = "DE0123456789012345678901234567890", + LokationsTyp = BO4E.ENUM.Lokationstyp.MeLo, + Energieverbrauch = new List() { new Verbrauch() { - wert = 123.456M, - wertermittlungsverfahren=BO4E.ENUM.Wertermittlungsverfahren.MESSUNG, - startdatum=new DateTime(2019,1,1,0,0,0,DateTimeKind.Utc), - enddatum = new DateTime(2019,2,1,0,0,0,DateTimeKind.Utc), - obiskennzahl="1-2-3-4", - einheit =BO4E.ENUM.Mengeneinheit.KWH + Wert = 123.456M, + Wertermittlungsverfahren=BO4E.ENUM.Wertermittlungsverfahren.MESSUNG, + Startdatum=new DateTime(2019,1,1,0,0,0,DateTimeKind.Utc), + Enddatum = new DateTime(2019,2,1,0,0,0,DateTimeKind.Utc), + Obiskennzahl="1-2-3-4", + Einheit =BO4E.ENUM.Mengeneinheit.KWH } } }; @@ -173,27 +173,27 @@ public void TestAnonymizeEnergiemengeHashing() conf.SetOption(DataCategory.USER_PROPERTIES, AnonymizerApproach.HASH); Anonymizer anonymizer = new Anonymizer(conf); var verbrauch2 = JsonConvert.DeserializeObject("{\"zw\":\"000000000000485549\",\"startdatum\":\"2018-03-24T01:45:00Z\",\"enddatum\":\"2018-03-24T02:00:00Z\",\"wert\":\"59\",\"status\":\"IU012\",\"obiskennzahl\":\"1-1:2.29.0\",\"wertermittlungsverfahren\":\"MESSUNG\",\"einheit\":\"KWH\"}"); - em.energieverbrauch.Add(verbrauch2); + em.Energieverbrauch.Add(verbrauch2); // hash everything var result = anonymizer.ApplyOperations(em); Assert.IsNotNull(result); - Assert.AreNotEqual(em.lokationsId, result.lokationsId); - Assert.IsTrue(Messlokation.ValidateId(result.lokationsId)); - Assert.AreEqual(em.energieverbrauch.Count, result.energieverbrauch.Count); - Assert.IsNotNull(result.energieverbrauch[1].userProperties["zw"]); - Assert.AreNotEqual(em.energieverbrauch[1].userProperties["zw"].Value(), result.energieverbrauch[1].userProperties["zw"].Value()); + Assert.AreNotEqual(em.LokationsId, result.LokationsId); + Assert.IsTrue(Messlokation.ValidateId(result.LokationsId)); + Assert.AreEqual(em.Energieverbrauch.Count, result.Energieverbrauch.Count); + Assert.IsNotNull(result.Energieverbrauch[1].UserProperties["zw"]); + Assert.AreNotEqual(em.Energieverbrauch[1].UserProperties["zw"].Value(), result.Energieverbrauch[1].UserProperties["zw"].Value()); Assert.IsTrue(Anonymizer.HasHashedKey(result)); // do not hash zw user property conf.unaffectedUserProperties.Add("zw"); result = anonymizer.ApplyOperations(em); Assert.IsNotNull(result); - Assert.AreNotEqual(em.lokationsId, result.lokationsId); - Assert.IsTrue(Messlokation.ValidateId(result.lokationsId)); - Assert.AreEqual(em.energieverbrauch.Count, result.energieverbrauch.Count); - Assert.IsNotNull(result.energieverbrauch[1].userProperties["zw"]); - Assert.AreEqual(em.energieverbrauch[1].userProperties["zw"].Value(), result.energieverbrauch[1].userProperties["zw"].Value()); + Assert.AreNotEqual(em.LokationsId, result.LokationsId); + Assert.IsTrue(Messlokation.ValidateId(result.LokationsId)); + Assert.AreEqual(em.Energieverbrauch.Count, result.Energieverbrauch.Count); + Assert.IsNotNull(result.Energieverbrauch[1].UserProperties["zw"]); + Assert.AreEqual(em.Energieverbrauch[1].UserProperties["zw"].Value(), result.Energieverbrauch[1].UserProperties["zw"].Value()); Assert.IsTrue(Anonymizer.HasHashedKey(result)); } @@ -203,16 +203,16 @@ public void TestAnonymizeEnergiemengeEncryptionRoundtrip() BO4E.StaticLogger.Logger = new Microsoft.Extensions.Logging.Debug.DebugLogger("Testlogger", (log, level) => { return true; }); Energiemenge em = new Energiemenge() { - lokationsId = "DE0123456789012345678901234567890", - lokationstyp = BO4E.ENUM.Lokationstyp.MeLo, - energieverbrauch = new List() + LokationsId = "DE0123456789012345678901234567890", + LokationsTyp = BO4E.ENUM.Lokationstyp.MeLo, + Energieverbrauch = new List() { new Verbrauch() { - wert = 123.456M, - wertermittlungsverfahren=BO4E.ENUM.Wertermittlungsverfahren.MESSUNG, - obiskennzahl="1-2-3-4", - einheit =BO4E.ENUM.Mengeneinheit.KWH + Wert = 123.456M, + Wertermittlungsverfahren=BO4E.ENUM.Wertermittlungsverfahren.MESSUNG, + Obiskennzahl="1-2-3-4", + Einheit =BO4E.ENUM.Mengeneinheit.KWH } } }; @@ -242,7 +242,7 @@ public void TestAnonymizeEnergiemengeEncryptionRoundtrip() decryptingAnonymizer.SetPrivateKey(keyPair.Private); decryptedEm = decryptingAnonymizer.ApplyOperations(encryptedEm); } - Assert.AreEqual(em.lokationsId, decryptedEm.lokationsId); + Assert.AreEqual(em.LokationsId, decryptedEm.LokationsId); Assert.IsFalse(Anonymizer.HasHashedKey(em)); } @@ -252,9 +252,9 @@ public void TestHashingDetectionForNonconformingString() BO4E.StaticLogger.Logger = new Microsoft.Extensions.Logging.Debug.DebugLogger("Testlogger", (log, level) => { return true; }); Energiemenge em = new Energiemenge() { - lokationsId = "asdkasldkmaslkdmas", // not identifyable as lokationsId - lokationstyp = BO4E.ENUM.Lokationstyp.MeLo, - energieverbrauch = new List() + LokationsId = "asdkasldkmaslkdmas", // not identifyable as lokationsId + LokationsTyp = BO4E.ENUM.Lokationstyp.MeLo, + Energieverbrauch = new List() }; Assert.IsFalse(Anonymizer.HasHashedKey(em)); @@ -274,11 +274,11 @@ public void TestCompletenessReportHashing() BO4E.StaticLogger.Logger = new Microsoft.Extensions.Logging.Debug.DebugLogger("Testlogger", (log, level) => { return true; }); CompletenessReport cr = new CompletenessReport() { - lokationsId = "56789012345", - coverage = 0.9M, - einheit = BO4E.ENUM.Mengeneinheit.MWH, + LokationsId = "56789012345", + Coverage = 0.9M, + Einheit = BO4E.ENUM.Mengeneinheit.MWH, wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.MESSUNG, - userProperties = new Dictionary() + UserProperties = new Dictionary() { { "anlage", "5012345678" }, { "profil", "123456" } @@ -294,12 +294,12 @@ public void TestCompletenessReportHashing() hashedReport = anonymizer.ApplyOperations(cr); } Assert.IsNotNull(hashedReport); - Assert.AreNotEqual(cr.lokationsId, hashedReport.lokationsId); - Assert.IsTrue(Marktlokation.ValidateId(hashedReport.lokationsId)); - Assert.IsNotNull(cr.userProperties["anlage"]); - Assert.AreNotEqual(cr.userProperties["anlage"].Value(), hashedReport.userProperties["anlage"].Value()); - Assert.IsNotNull(cr.userProperties["profil"]); - Assert.AreNotEqual(cr.userProperties["profil"].Value(), hashedReport.userProperties["profil"].Value()); + Assert.AreNotEqual(cr.LokationsId, hashedReport.LokationsId); + Assert.IsTrue(Marktlokation.ValidateId(hashedReport.LokationsId)); + Assert.IsNotNull(cr.UserProperties["anlage"]); + Assert.AreNotEqual(cr.UserProperties["anlage"].Value(), hashedReport.UserProperties["anlage"].Value()); + Assert.IsNotNull(cr.UserProperties["profil"]); + Assert.AreNotEqual(cr.UserProperties["profil"].Value(), hashedReport.UserProperties["profil"].Value()); conf.hashingSalt = "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4="; CompletenessReport saltedReport; @@ -307,12 +307,12 @@ public void TestCompletenessReportHashing() { saltedReport = anonymizer.ApplyOperations(cr); } - Assert.IsNotNull(saltedReport.lokationsId); - Assert.AreNotEqual(cr.lokationsId, saltedReport.lokationsId); - Assert.AreNotEqual(hashedReport.lokationsId, saltedReport.lokationsId); + Assert.IsNotNull(saltedReport.LokationsId); + Assert.AreNotEqual(cr.LokationsId, saltedReport.LokationsId); + Assert.AreNotEqual(hashedReport.LokationsId, saltedReport.LokationsId); - Assert.IsTrue(Anonymizer.IsHashedKey(hashedReport.lokationsId)); - Assert.IsTrue(Anonymizer.IsHashedKey(saltedReport.lokationsId)); + Assert.IsTrue(Anonymizer.IsHashedKey(hashedReport.LokationsId)); + Assert.IsTrue(Anonymizer.IsHashedKey(saltedReport.LokationsId)); } [TestMethod] @@ -321,18 +321,18 @@ public void TestSameHashDifferentObjectTypes() BO4E.StaticLogger.Logger = new Microsoft.Extensions.Logging.Debug.DebugLogger("Testlogger", (log, level) => { return true; }); Energiemenge em = new Energiemenge() { - lokationsId = "DE0123456789012345678901234567890", - lokationstyp = BO4E.ENUM.Lokationstyp.MeLo, - energieverbrauch = new List() + LokationsId = "DE0123456789012345678901234567890", + LokationsTyp = BO4E.ENUM.Lokationstyp.MeLo, + Energieverbrauch = new List() { new Verbrauch() { - wert = 123.456M, - wertermittlungsverfahren=BO4E.ENUM.Wertermittlungsverfahren.MESSUNG, - startdatum=new DateTime(2019,1,1,0,0,0,DateTimeKind.Utc), - enddatum = new DateTime(2019,2,1,0,0,0,DateTimeKind.Utc), - obiskennzahl="1-2-3-4", - einheit =BO4E.ENUM.Mengeneinheit.KWH + Wert = 123.456M, + Wertermittlungsverfahren=BO4E.ENUM.Wertermittlungsverfahren.MESSUNG, + Startdatum=new DateTime(2019,1,1,0,0,0,DateTimeKind.Utc), + Enddatum = new DateTime(2019,2,1,0,0,0,DateTimeKind.Utc), + Obiskennzahl="1-2-3-4", + Einheit =BO4E.ENUM.Mengeneinheit.KWH } } }; @@ -340,19 +340,17 @@ public void TestSameHashDifferentObjectTypes() Messlokation melo = new Messlokation() { - messlokationsId = "DE0123456789012345678901234567890" + MesslokationsId = "DE0123456789012345678901234567890" }; Assert.IsTrue(melo.IsValid()); var conf = new AnonymizerConfiguration(); conf.SetOption(DataCategory.POD, AnonymizerApproach.HASH); - using (Anonymizer anonymizer = new Anonymizer(conf)) - { - var hashedEm = anonymizer.ApplyOperations(em); - var hashedMelo = anonymizer.ApplyOperations(melo); - Assert.AreEqual(hashedEm.lokationsId, hashedMelo.messlokationsId); - } + using Anonymizer anonymizer = new Anonymizer(conf); + var hashedEm = anonymizer.ApplyOperations(em); + var hashedMelo = anonymizer.ApplyOperations(melo); + Assert.AreEqual(hashedEm.LokationsId, hashedMelo.MesslokationsId); } [TestMethod] @@ -374,10 +372,10 @@ public void TestCaginMeLos() { Messlokation melo = new Messlokation() { - messlokationsId = plaintextMeLoId + MesslokationsId = plaintextMeLoId }; var hashedMelo = anonymizer.ApplyOperations(melo); - result[plaintextMeLoId] = hashedMelo.messlokationsId; + result[plaintextMeLoId] = hashedMelo.MesslokationsId; } } var resultJson = JsonConvert.SerializeObject(result); diff --git a/TestBO4E-dotnet-Encryption/TestEncrypter.cs b/TestBO4E-dotnet-Encryption/TestEncrypter.cs index a66543a3..5201e9cc 100644 --- a/TestBO4E-dotnet-Encryption/TestEncrypter.cs +++ b/TestBO4E-dotnet-Encryption/TestEncrypter.cs @@ -50,7 +50,7 @@ public void TestDisposal() { exceptionThrown = true; } - def = new SymmetricEncrypter(symkey); + _ = new SymmetricEncrypter(symkey); Assert.IsFalse(exceptionThrown); } @@ -153,13 +153,11 @@ public void TestBOEncryption() using (X509AsymmetricEncrypter xasydecMultiple = new X509AsymmetricEncrypter(keyPair.Private)) { - using (X509AsymmetricEncrypter xasydecMultiple2 = new X509AsymmetricEncrypter(keyPair2.Private)) - { - boDecrypted = xasydecMultiple.Decrypt(eoMultiple); - BusinessObject boDecrypted2 = xasydecMultiple2.Decrypt(eoMultiple); - string actualString2 = JsonConvert.SerializeObject(boDecrypted2); - Assert.AreEqual(expectedString, actualString2, "Original and encrypted->decrypted object do not match!"); - } + using X509AsymmetricEncrypter xasydecMultiple2 = new X509AsymmetricEncrypter(keyPair2.Private); + boDecrypted = xasydecMultiple.Decrypt(eoMultiple); + BusinessObject boDecrypted2 = xasydecMultiple2.Decrypt(eoMultiple); + string actualString2 = JsonConvert.SerializeObject(boDecrypted2); + Assert.AreEqual(expectedString, actualString2, "Original and encrypted->decrypted object do not match!"); } expectedString = JsonConvert.SerializeObject(bo); actualString = JsonConvert.SerializeObject(boDecrypted); @@ -182,7 +180,7 @@ public void TestKeysFromBase64() [TestMethod] public void TestLogObjectDecryption() { - byte[] publicKey = Convert.FromBase64String("C1RpdN5DO86swpkegPxEMB60yVSXYLta6PfSnHuYpxA="); + //byte[] publicKey = Convert.FromBase64String("C1RpdN5DO86swpkegPxEMB60yVSXYLta6PfSnHuYpxA="); byte[] privateKey = Convert.FromBase64String("7BSU9FLrvo8hSk58fs/vHTN4fmRFYbwvI9ZRKmTDt/o="); try { diff --git a/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/delete_address_from_melo.json b/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/delete_address_from_melo.json index dd56ace4..7f6d7e0a 100644 --- a/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/delete_address_from_melo.json +++ b/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/delete_address_from_melo.json @@ -4,7 +4,7 @@ }, "input": { "boTyp": "MESSLOKATION", - "messLokationsId": "DEIMUDDERIHRMELOID12345", + "messlokationsId": "DEIMUDDERIHRMELOID12345", "sparte": "STROM", "messadresse": { "ort": "Leipzig", diff --git a/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/delete_pod_from_melo.json b/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/delete_pod_from_melo.json index 5f418cf2..ed1df2ca 100644 --- a/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/delete_pod_from_melo.json +++ b/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/delete_pod_from_melo.json @@ -4,7 +4,7 @@ }, "input": { "boTyp": "MESSLOKATION", - "messLokationsId": "DEIMUDDERIHRMELOID12345", + "messlokationsId": "DEIMUDDERIHRMELOID12345", "sparte": "STROM", "messadresse": { "ort": "Leipzig", @@ -15,6 +15,6 @@ }, "assertions": { "$['MESSLOKATION'][0]['messadresse']['strasse']": "Lindenauer Markt", - "$['MESSLOKATION'][0]['messLokationsId']": "|null|" + "$['MESSLOKATION'][0]['messlokationsId']": "|null|" } } \ No newline at end of file diff --git a/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/encrypt_pod.json b/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/encrypt_pod.json index 8bd57d36..84fccb63 100644 --- a/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/encrypt_pod.json +++ b/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/encrypt_pod.json @@ -5,7 +5,7 @@ "input": { "boTyp": "MESSLOKATION", "versionStruktur": 1, - "messLokationsId": "DEIMUDDERIHRMELOID12345", + "messlokationsId": "DEIMUDDERIHRMELOID12345", "sparte": 0, "netzebeneMessung": 0, "messadresse": { diff --git a/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/hash_address.json b/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/hash_address.json index 30edc6cb..19dad2c2 100644 --- a/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/hash_address.json +++ b/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/hash_address.json @@ -4,7 +4,7 @@ }, "input": { "boTyp": "MESSLOKATION", - "messLokationsId": "DEIMUDDERIHRMELOID12345", + "messlokationsId": "DEIMUDDERIHRMELOID12345", "sparte": "STROM", "messadresse": { "ort": "Leipzig", diff --git a/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/hash_pod.json b/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/hash_pod.json index d31e645c..ab4ef7c8 100644 --- a/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/hash_pod.json +++ b/TestBO4E-dotnet-Encryption/anonymizerTests/masterdata/hash_pod.json @@ -4,7 +4,7 @@ }, "input": { "boTyp": "MESSLOKATION", - "messLokationsId": "DEIMUDDERIHRMELOID12345", + "messlokationsId": "DEIMUDDERIHRMELOID12345", "sparte": "STROM", "messadresse": { "ort": "Leipzig", @@ -15,6 +15,6 @@ }, "assertions": { "$['MESSLOKATION'][0]['messadresse']['strasse']": "Lindenauer Markt", - "$['MESSLOKATION'][0]['messLokationsId']": "414bdcdf7e6adbe0eb18867371575021e284ad13d496b6f43aae4fe04b535e9f" + "$['MESSLOKATION'][0]['messlokationsId']": "414bdcdf7e6adbe0eb18867371575021e284ad13d496b6f43aae4fe04b535e9f" } } \ No newline at end of file diff --git a/TestBO4E-dotnet-Encryption/encrypterTests/bo/Messlokation.json b/TestBO4E-dotnet-Encryption/encrypterTests/bo/Messlokation.json index f50a62db..1a52f20a 100644 --- a/TestBO4E-dotnet-Encryption/encrypterTests/bo/Messlokation.json +++ b/TestBO4E-dotnet-Encryption/encrypterTests/bo/Messlokation.json @@ -1,6 +1,6 @@ { "versionStruktur": 1, "boTyp": "Messlokation", - "messLokationsId": "DE1234567889", + "messlokationsId": "DE1234567889", "sparte": "STROM" } \ No newline at end of file diff --git a/TestBO4E-dotnet-Extensions/TestBenachrichtigungExtension.cs b/TestBO4E-dotnet-Extensions/TestBenachrichtigungExtension.cs index a83d4029..430f0ad6 100644 --- a/TestBO4E-dotnet-Extensions/TestBenachrichtigungExtension.cs +++ b/TestBO4E-dotnet-Extensions/TestBenachrichtigungExtension.cs @@ -1,9 +1,12 @@ using System; using System.Collections.Generic; + using BO4E.BO; using BO4E.COM; using BO4E.Extensions.BusinessObjects.Benachrichtigung; + using Microsoft.VisualStudio.TestTools.UnitTesting; + using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -17,12 +20,12 @@ public void TestHas() { Benachrichtigung b = new Benachrichtigung() { - benachrichtigungsId = "1234", - bearbeiter = "dei mudder", - infos = new List() + BenachrichtigungsId = "1234", + Bearbeiter = "dei mudder", + Infos = new List() { - new GenericStringStringInfo() { keyColumn = "ads", value = "xyz" }, - new GenericStringStringInfo() { keyColumn = "null", value = null }, + new GenericStringStringInfo() { KeyColumn = "ads", Value = "xyz" }, + new GenericStringStringInfo() { KeyColumn = "null", Value = null }, } }; @@ -43,11 +46,11 @@ public void TestMoveInfo2UP() { Benachrichtigung b = JsonConvert.DeserializeObject("{\"versionStruktur\":1,\"boTyp\":\"BENACHRICHTIGUNG\",\"benachrichtigungsId\":\"468985\",\"prioritaet\":2,\"bearbeitungsstatus\":0,\"kurztext\":\"Manuelles Überschreiben von Profilwerten\",\"erstellungsZeitpunkt\":\"2019-04-01T14:27:23Z\",\"kategorie\":\"ZE01\",\"bearbeiter\":\"\",\"notizen\":null,\"deadline\":null,\"aufgaben\":null,\"infos\":null,\"aufgaben\":[{\"ccat\":\"ZE01\",\"objtype\":\"ZISUPROFIL\",\"aufgabenId\":\"OVERWRITE\",\"ausgefuehrt\":\"true\"},{\"ccat\":\"ZE01\",\"objtype\":\"ZISUPROFIL\",\"aufgabenId\":\"DISPLAY\",\"ausgefuehrt\":\"true\"}],\"infos\":[{\"keyColumn\":\"MESSLOKATIONSID\",\"value\":\"DE000360478090000000\",\"boolean_true_column\":false},{\"keyColumn\":\"TIMESPAN_FROM\",\"value\":\"2019-02-25T23:00:00Z\",\"boolean_true_column\":false},{\"keyColumn\":\"TIMESPAN_TO\",\"value\":\"2019-03-19T22:44:59Z\",\"boolean_true_column\":false}],\"notizen\":[]}"); Assert.IsTrue(b.Has("MESSLOKATIONSID")); - Assert.IsTrue(b.userProperties == null || b.userProperties.Count == 0); + Assert.IsTrue(b.UserProperties == null || b.UserProperties.Count == 0); b.MoveInfosToUserProperties(); - Assert.IsNotNull(b.userProperties); - Assert.IsTrue(b.userProperties.ContainsKey("MESSLOKATIONSID")); - Assert.IsNull(b.infos); + Assert.IsNotNull(b.UserProperties); + Assert.IsTrue(b.UserProperties.ContainsKey("MESSLOKATIONSID")); + Assert.IsNull(b.Infos); } [TestMethod] @@ -62,10 +65,10 @@ public void TestHasWithMesslokationsId() public void TestDateTimePredicates() { Benachrichtigung b = JsonConvert.DeserializeObject("{\"versionStruktur\":1,\"boTyp\":\"BENACHRICHTIGUNG\",\"benachrichtigungsId\":\"469568\",\"prioritaet\":2,\"bearbeitungsstatus\":1,\"kurztext\":\"Manuelles \u00dcberschreiben von Profilwerten\",\"erstellungsZeitpunkt\":\"2019-04-02T13:35:03Z\",\"kategorie\":\"ZE01\",\"bearbeiter\":\"SCHLEBDA\",\"notizen\":[],\"deadline\":null,\"aufgaben\":[{\"aufgabenId\":\"OVERWRITE\",\"beschreibung\":null,\"deadline\":null,\"ausgefuehrt\":true,\"ausfuehrungsdatum\":null,\"ausfuehrender\":null,\"ccat\":\"ZE01\",\"objtype\":\"ZISUPROFIL\"},{\"aufgabenId\":\"DISPLAY\",\"beschreibung\":null,\"deadline\":null,\"ausgefuehrt\":true,\"ausfuehrungsdatum\":null,\"ausfuehrender\":null,\"ccat\":\"ZE01\",\"objtype\":\"ZISUPROFIL\"}],\"infos\":null,\"MESS\":\"9977768000005\",\"MESSLOKATIONSID\":\"DE0003604763800000000000010376811\",\"TIMESPAN_FROM\":\"2019-03-11T23:30:00Z\",\"TIMESPAN_TO\":\"2019-03-12T22:59:59Z\"}"); - Assert.IsTrue(b.userProperties.TryGetValue("TIMESPAN_FROM", out JToken jtLower)); - var lower = jtLower.Value(); - Assert.IsTrue(b.userProperties.TryGetValue("TIMESPAN_TO", out JToken jtUpper)); - var upper = jtUpper.Value(); + Assert.IsTrue(b.UserProperties.TryGetValue("TIMESPAN_FROM", out JToken jtLower)); + _ = jtLower.Value(); + Assert.IsTrue(b.UserProperties.TryGetValue("TIMESPAN_TO", out JToken jtUpper)); + _ = jtUpper.Value(); } } } \ No newline at end of file diff --git a/TestBO4E-dotnet-Extensions/TestCloningExtension.cs b/TestBO4E-dotnet-Extensions/TestCloningExtension.cs index 85439106..c0cd4c6d 100644 --- a/TestBO4E-dotnet-Extensions/TestCloningExtension.cs +++ b/TestBO4E-dotnet-Extensions/TestCloningExtension.cs @@ -16,7 +16,7 @@ public void TestCloning() { Messlokation bo = new Messlokation() { - messlokationsId = "DE345", + MesslokationsId = "DE345", }; Messlokation cloneBo = BusinessObjectExtensions.DeepClone((Messlokation)bo); @@ -30,38 +30,38 @@ public void TestCloningEnergiemenge() { Energiemenge em = new Energiemenge() { - lokationsId = "De12345", - lokationstyp = BO4E.ENUM.Lokationstyp.MaLo, - energieverbrauch = new List() + LokationsId = "De12345", + LokationsTyp = BO4E.ENUM.Lokationstyp.MaLo, + Energieverbrauch = new List() { new BO4E.COM.Verbrauch() { - einheit = BO4E.ENUM.Mengeneinheit.KWH, - wert = 123.456M, - obiskennzahl = "dei vadder", - wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.MESSUNG, - startdatum = new System.DateTime(2018,12,31,23,0,0,0, System.DateTimeKind.Utc), - enddatum = new System.DateTime(2019,12,31,23,0,0,0,System.DateTimeKind.Utc) + Einheit = BO4E.ENUM.Mengeneinheit.KWH, + Wert = 123.456M, + Obiskennzahl = "dei vadder", + Wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.MESSUNG, + Startdatum = new System.DateTime(2018,12,31,23,0,0,0, System.DateTimeKind.Utc), + Enddatum = new System.DateTime(2019,12,31,23,0,0,0,System.DateTimeKind.Utc) }, new BO4E.COM.Verbrauch() { - einheit = BO4E.ENUM.Mengeneinheit.KWH, - wert = 789.123M, - obiskennzahl = "dei mudder", - wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.MESSUNG, - startdatum = new System.DateTime(2019,12,31,23,0,0,0, System.DateTimeKind.Utc), - enddatum = new System.DateTime(2020,12,31,23,0,0,0,System.DateTimeKind.Utc) + Einheit = BO4E.ENUM.Mengeneinheit.KWH, + Wert = 789.123M, + Obiskennzahl = "dei mudder", + Wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.MESSUNG, + Startdatum = new System.DateTime(2019,12,31,23,0,0,0, System.DateTimeKind.Utc), + Enddatum = new System.DateTime(2020,12,31,23,0,0,0,System.DateTimeKind.Utc) } } }; var cloned = em.DeepClone(); - Assert.AreEqual(em.energieverbrauch.Count, cloned.energieverbrauch.Count); + Assert.AreEqual(em.Energieverbrauch.Count, cloned.Energieverbrauch.Count); var cloned2 = em.DeepClone(); - Assert.AreEqual(em.energieverbrauch.Count, cloned2.energieverbrauch.Count); + Assert.AreEqual(em.Energieverbrauch.Count, cloned2.Energieverbrauch.Count); var cloned3 = (em as BusinessObject).DeepClone(); - Assert.AreEqual(em.energieverbrauch.Count, (cloned3 as Energiemenge).energieverbrauch.Count); + Assert.AreEqual(em.Energieverbrauch.Count, (cloned3 as Energiemenge).Energieverbrauch.Count); } } } \ No newline at end of file diff --git a/TestBO4E-dotnet-Extensions/TestEnergiemengeExtension.cs b/TestBO4E-dotnet-Extensions/TestEnergiemengeExtension.cs index 97e0b9a7..34d61450 100644 --- a/TestBO4E-dotnet-Extensions/TestEnergiemengeExtension.cs +++ b/TestBO4E-dotnet-Extensions/TestEnergiemengeExtension.cs @@ -148,13 +148,13 @@ public void TestEnergiemengeObjects() { var pureEms = em.SplitInPureGroups(); var emptyEm = em.DeepClone(); - emptyEm.energieverbrauch = null; - Assert.AreEqual(em.energieverbrauch.Count, pureEms.Select(x => x.energieverbrauch.Count).Sum()); + emptyEm.Energieverbrauch = null; + Assert.AreEqual(em.Energieverbrauch.Count, pureEms.Select(x => x.Energieverbrauch.Count).Sum()); foreach (var pureEm in pureEms) { Assert.IsTrue(pureEm.IsPure()); var emptyPureEm = pureEm.DeepClone(); - emptyPureEm.energieverbrauch = null; + emptyPureEm.Energieverbrauch = null; Assert.AreEqual(emptyEm, emptyPureEm); } } @@ -189,7 +189,7 @@ public void TestDetangling() { Energiemenge em = JsonConvert.DeserializeObject("{\"versionStruktur\":1,\"boTyp\":\"ENERGIEMENGE\",\"lokationsId\":\"DE0003604780400000000000012345678\",\"lokationstyp\":\"MeLo\",\"energieverbrauch\":[{\"startdatum\":\"2019-03-01T00:00:00Z\",\"enddatum\":\"2019-06-24T00:00:00Z\",\"wertermittlungsverfahren\":\"MESSUNG\",\"obiskennzahl\":\"1-0:1.8.0\",\"wert\":1,\"einheit\":\"KWH\",\"zaehlernummer\":\"10654212\"},{\"startdatum\":\"2019-03-01T00:00:00Z\",\"enddatum\":\"2019-06-24T00:00:00Z\",\"wertermittlungsverfahren\":\"MESSUNG\",\"obiskennzahl\":\"1-0:2.8.0\",\"wert\":1,\"einheit\":\"KWH\",\"zaehlernummer\":\"10654212\"}],\"anlagennummer\":\"50693510\",\"messlokationsId\":\"DE0003604780400000000000012345678\",\"marktlokationsId\":\"\",\"isMelo\":true,\"zaehlernummer\":\"10654212\"}"); em.Detangle(); - Assert.AreEqual(2, em.energieverbrauch.Count); + Assert.AreEqual(2, em.Energieverbrauch.Count); // todo: add real test. this one is limited. } diff --git a/TestBO4E-dotnet-Extensions/TestEnergiemengeExtensionCompleteness.cs b/TestBO4E-dotnet-Extensions/TestEnergiemengeExtensionCompleteness.cs index 63165a17..3ae89963 100644 --- a/TestBO4E-dotnet-Extensions/TestEnergiemengeExtensionCompleteness.cs +++ b/TestBO4E-dotnet-Extensions/TestEnergiemengeExtensionCompleteness.cs @@ -40,19 +40,19 @@ public void TestCompletenessReportGenerationSomeCustomer() if (boFile.EndsWith("somecustomer1.json")) { cr = em.GetCompletenessReport(); - Assert.AreEqual((decimal)0.9601, Math.Round(cr.coverage.Value, 4)); - Assert.AreEqual("4-5-6-7", cr.obiskennzahl); + Assert.AreEqual((decimal)0.9601, Math.Round(cr.Coverage.Value, 4)); + Assert.AreEqual("4-5-6-7", cr.Obiskennzahl); Assert.AreEqual(Wertermittlungsverfahren.MESSUNG, cr.wertermittlungsverfahren); - Assert.AreEqual(Mengeneinheit.KWH, cr.einheit); - Assert.AreEqual("DEXXX", cr.lokationsId); + Assert.AreEqual(Mengeneinheit.KWH, cr.Einheit); + Assert.AreEqual("DEXXX", cr.LokationsId); //Assert.AreEqual(15, cr.values[0].wert); //Assert.AreEqual(TestEnergiemengeExtension.GERMAN_APRIL_2018.Start, cr.values[0].startdatum); string resultString = JsonConvert.SerializeObject(cr, new StringEnumConverter()); - Assert.IsNotNull(cr.gaps); - Assert.AreEqual(1, cr.gaps.Count); - Assert.AreEqual(new DateTime(2018, 4, 1, 1, 45, 0, DateTimeKind.Utc), cr.gaps.First().startdatum); - Assert.AreEqual(new DateTime(2018, 4, 2, 6, 30, 0, DateTimeKind.Utc), cr.gaps.First().enddatum); + Assert.IsNotNull(cr.Gaps); + Assert.AreEqual(1, cr.Gaps.Count); + Assert.AreEqual(new DateTime(2018, 4, 1, 1, 45, 0, DateTimeKind.Utc), cr.Gaps.First().Startdatum); + Assert.AreEqual(new DateTime(2018, 4, 2, 6, 30, 0, DateTimeKind.Utc), cr.Gaps.First().Enddatum); } else if (boFile.EndsWith("somecustomer2.json")) { @@ -62,13 +62,13 @@ public void TestCompletenessReportGenerationSomeCustomer() string resultString = JsonConvert.SerializeObject(cr, new StringEnumConverter()); CompletenessReport cr2 = em.GetCompletenessReport(new CompletenessReport.CompletenessReportConfiguration { - einheit = combi.Item3, - obis = combi.Item2, - wertermittlungsverfahren = combi.Item1, - referenceTimeFrame = new BO4E.COM.Zeitraum + Einheit = combi.Item3, + Obis = combi.Item2, + Wertermittlungsverfahren = combi.Item1, + ReferenceTimeFrame = new BO4E.COM.Zeitraum { - startdatum = TestEnergiemengeExtension.GERMAN_APRIL_2018.Start, - enddatum = TestEnergiemengeExtension.GERMAN_APRIL_2018.End + Startdatum = TestEnergiemengeExtension.GERMAN_APRIL_2018.Start, + Enddatum = TestEnergiemengeExtension.GERMAN_APRIL_2018.End } }); //Assert.AreEqual(cr, cr2, "calling report with configuration instead of loose parameters doesn't work."); @@ -105,9 +105,9 @@ public void TestCompletenessReportGenerationSmard() crlist.Add(cr); if (boFile.Contains("onshore.json")) { - Assert.IsNotNull(cr.userProperties); - Assert.AreEqual("yippi yippi yeah", cr.userProperties["meineUp0"].Value()); - Assert.AreEqual("krawall und remmidemmi", cr.userProperties["meineUp1"].Value()); + Assert.IsNotNull(cr.UserProperties); + Assert.AreEqual("yippi yippi yeah", cr.UserProperties["meineUp0"].Value()); + Assert.AreEqual("krawall und remmidemmi", cr.UserProperties["meineUp1"].Value()); } } } @@ -132,8 +132,8 @@ public void TestRounding() Start = new DateTime(2017, 12, 31, 23, 0, 0, 0, DateTimeKind.Utc), End = new DateTime(2018, 1, 31, 23, 0, 0, 0, DateTimeKind.Utc) }); - Assert.AreEqual(1.0M, cr.coverage.Value); - Assert.AreEqual(0, cr.gaps.Count()); + Assert.AreEqual(1.0M, cr.Coverage.Value); + Assert.AreEqual(0, cr.Gaps.Count()); var dailies = em.GetDailyCompletenessReports(new TimeRange() { @@ -142,9 +142,9 @@ public void TestRounding() }); foreach (var crDaily in dailies) { - Assert.AreEqual(1.0M, crDaily.Value.coverage.Value, $"error in slice {crDaily.Key}"); + Assert.AreEqual(1.0M, crDaily.Value.Coverage.Value, $"error in slice {crDaily.Key}"); } - Assert.AreEqual(1.0M, cr.coverage.Value); + Assert.AreEqual(1.0M, cr.Coverage.Value); } [TestMethod] @@ -152,35 +152,35 @@ public void TestFirstLastGap() { Energiemenge em = new Energiemenge() { - lokationsId = "DE123455", - lokationstyp = Lokationstyp.MeLo, - energieverbrauch = new List() + LokationsId = "DE123455", + LokationsTyp = Lokationstyp.MeLo, + Energieverbrauch = new List() { new Verbrauch() { - obiskennzahl="1234", - wert=123.456M, - wertermittlungsverfahren=Wertermittlungsverfahren.MESSUNG, - startdatum = new DateTime(2019,1,1,0,0,0,DateTimeKind.Utc), - enddatum = new DateTime(2019,1,4,0,0,0,DateTimeKind.Utc), + Obiskennzahl="1234", + Wert=123.456M, + Wertermittlungsverfahren=Wertermittlungsverfahren.MESSUNG, + Startdatum = new DateTime(2019,1,1,0,0,0,DateTimeKind.Utc), + Enddatum = new DateTime(2019,1,4,0,0,0,DateTimeKind.Utc), }, new Verbrauch() { - obiskennzahl="1234", - wert=123.456M, - wertermittlungsverfahren=Wertermittlungsverfahren.MESSUNG, - startdatum = new DateTime(2019,1,4,0,0,0,DateTimeKind.Utc), - enddatum = new DateTime(2019,1,7,0,0,0,DateTimeKind.Utc), + Obiskennzahl="1234", + Wert=123.456M, + Wertermittlungsverfahren=Wertermittlungsverfahren.MESSUNG, + Startdatum = new DateTime(2019,1,4,0,0,0,DateTimeKind.Utc), + Enddatum = new DateTime(2019,1,7,0,0,0,DateTimeKind.Utc), } } }; var cr = em.GetCompletenessReport(new TimeRange(new DateTime(2018, 12, 29, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 1, 10, 0, 0, 0, DateTimeKind.Utc))); - Assert.AreEqual(2, cr.gaps.Count()); - Assert.AreEqual(new DateTime(2018, 12, 29, 0, 0, 0, DateTimeKind.Utc), cr.gaps.First().startdatum); - Assert.AreEqual(new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), cr.gaps.First().enddatum); - Assert.AreEqual(new DateTime(2019, 1, 7, 0, 0, 0, DateTimeKind.Utc), cr.gaps.Last().startdatum); - Assert.AreEqual(new DateTime(2019, 1, 10, 0, 0, 0, DateTimeKind.Utc), cr.gaps.Last().enddatum); + Assert.AreEqual(2, cr.Gaps.Count()); + Assert.AreEqual(new DateTime(2018, 12, 29, 0, 0, 0, DateTimeKind.Utc), cr.Gaps.First().Startdatum); + Assert.AreEqual(new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), cr.Gaps.First().Enddatum); + Assert.AreEqual(new DateTime(2019, 1, 7, 0, 0, 0, DateTimeKind.Utc), cr.Gaps.Last().Startdatum); + Assert.AreEqual(new DateTime(2019, 1, 10, 0, 0, 0, DateTimeKind.Utc), cr.Gaps.Last().Enddatum); } [TestMethod] @@ -188,31 +188,31 @@ public void TestNullableCoverage() { Energiemenge em1 = new Energiemenge() { - lokationsId = "DE123456789DieseEmhatkeineVerbräuche", - lokationstyp = Lokationstyp.MeLo, - energieverbrauch = new List() //empty list + LokationsId = "DE123456789DieseEmhatkeineVerbräuche", + LokationsTyp = Lokationstyp.MeLo, + Energieverbrauch = new List() //empty list }; CompletenessReport cr1 = em1.GetCompletenessReport(); Assert.IsNotNull(cr1); - Assert.IsNull(cr1.coverage); + Assert.IsNull(cr1.Coverage); JsonConvert.SerializeObject(cr1); // must _not_ throw exception Energiemenge em2 = new Energiemenge() { - lokationsId = "54321012345DieseEmhatkeineVerbräuche", - lokationstyp = Lokationstyp.MeLo, - energieverbrauch = new List() //empty list + LokationsId = "54321012345DieseEmhatkeineVerbräuche", + LokationsTyp = Lokationstyp.MeLo, + Energieverbrauch = new List() //empty list }; CompletenessReport cr2 = em2.GetCompletenessReport(CHRISTMAS_2018, Wertermittlungsverfahren.MESSUNG, "1-2-3-4", Mengeneinheit.KUBIKMETER); Assert.IsNotNull(cr2); - Assert.IsNotNull(cr2.coverage); // not null because no values but configuration given - Assert.AreEqual(0.0M, cr2.coverage); + Assert.IsNotNull(cr2.Coverage); // not null because no values but configuration given + Assert.AreEqual(0.0M, cr2.Coverage); JsonConvert.SerializeObject(cr2); // must _not_ throw exception CompletenessReport cr3 = em2.GetCompletenessReport(CHRISTMAS_2018); Assert.IsNotNull(cr3); - Assert.IsNotNull(cr3.coverage); - Assert.AreEqual(0.0M, cr3.coverage); + Assert.IsNotNull(cr3.Coverage); + Assert.AreEqual(0.0M, cr3.Coverage); JsonConvert.SerializeObject(cr3); // must _not_ throw exception } @@ -284,7 +284,7 @@ public void TestParallization() MiniProfiler mpFixSapCds = MiniProfiler.StartNew("Fix SAP CDS"); em.FixSapCDSBug(); mpFixSapCds.Stop(); - Assert.IsTrue(mpFixSapCds.DurationMilliseconds < 50, mpFixSapCds.RenderPlainText()); + Assert.IsTrue(mpFixSapCds.DurationMilliseconds < 500, mpFixSapCds.RenderPlainText()); Console.Out.WriteLine(mpFixSapCds.RenderPlainText()); MiniProfiler mpFixSapCds2 = MiniProfiler.StartNew("Fix SAP CDS"); @@ -326,10 +326,10 @@ public void TestDailyParallization() dateTime = dateTime.AddMinutes(15); DateTime endDateTime = dateTime.AddMinutes(15); - listvb.Add(new Verbrauch() { startdatum = dateTime, enddatum = endDateTime, einheit = Mengeneinheit.JAHR, wert = 12 }); + listvb.Add(new Verbrauch() { Startdatum = dateTime, Enddatum = endDateTime, Einheit = Mengeneinheit.JAHR, Wert = 12 }); dateTime = endDateTime; } - em.energieverbrauch = listvb; + em.Energieverbrauch = listvb; MiniProfiler mpLinear = MiniProfiler.StartNew("Non-Parallel"); em.GetMonthlyCompletenessReports(new TimeRange(new DateTime(2015, 1, 1, 23, 00, 0, DateTimeKind.Utc), new DateTime(2019, 12, 31, 23, 0, 0, DateTimeKind.Utc)), useParallelExecution: false); @@ -388,24 +388,24 @@ public void TestDailyCompletenessDST() Assert.AreEqual(2 * 24 - 1, verbrauchSlices.Count); Energiemenge em = new Energiemenge() { - lokationsId = "MeinUnitTest123", - lokationstyp = Lokationstyp.MeLo, - energieverbrauch = verbrauchSlices.Select(vs => new BO4E.COM.Verbrauch() + LokationsId = "MeinUnitTest123", + LokationsTyp = Lokationstyp.MeLo, + Energieverbrauch = verbrauchSlices.Select(vs => new BO4E.COM.Verbrauch() { - startdatum = vs.Start, - enddatum = vs.End, - einheit = Mengeneinheit.KWH, - wert = (decimal)123.456, - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG + Startdatum = vs.Start, + Enddatum = vs.End, + Einheit = Mengeneinheit.KWH, + Wert = (decimal)123.456, + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG } ).ToList() }; var result = em.GetDailyCompletenessReports(new TimeRange(utcStart, utcEnd)); Assert.AreEqual(2, result.Count); - Assert.AreEqual(new DateTime(2018, 3, 24, 23, 0, 0, DateTimeKind.Utc), result.First().Value.referenceTimeFrame.startdatum); - Assert.AreEqual(new DateTime(2018, 3, 25, 22, 0, 0, DateTimeKind.Utc), result.First().Value.referenceTimeFrame.enddatum); - Assert.AreEqual(new DateTime(2018, 3, 25, 22, 0, 0, DateTimeKind.Utc), result.Last().Value.referenceTimeFrame.startdatum); - Assert.AreEqual(new DateTime(2018, 3, 26, 22, 0, 0, DateTimeKind.Utc), result.Last().Value.referenceTimeFrame.enddatum); + Assert.AreEqual(new DateTime(2018, 3, 24, 23, 0, 0, DateTimeKind.Utc), result.First().Value.ReferenceTimeFrame.Startdatum); + Assert.AreEqual(new DateTime(2018, 3, 25, 22, 0, 0, DateTimeKind.Utc), result.First().Value.ReferenceTimeFrame.Enddatum); + Assert.AreEqual(new DateTime(2018, 3, 25, 22, 0, 0, DateTimeKind.Utc), result.Last().Value.ReferenceTimeFrame.Startdatum); + Assert.AreEqual(new DateTime(2018, 3, 26, 22, 0, 0, DateTimeKind.Utc), result.Last().Value.ReferenceTimeFrame.Enddatum); } [TestMethod] diff --git a/TestBO4E-dotnet-Extensions/TestVerbrauchExtension.cs b/TestBO4E-dotnet-Extensions/TestVerbrauchExtension.cs index 3e0f5d87..f9fbe364 100644 --- a/TestBO4E-dotnet-Extensions/TestVerbrauchExtension.cs +++ b/TestBO4E-dotnet-Extensions/TestVerbrauchExtension.cs @@ -19,21 +19,21 @@ public void TestMergeNoOverlap() { Verbrauch v1 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KWH, - wert = 5, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KWH, + Wert = 5, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) }; Verbrauch v2 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KWH, - wert = 3, - startdatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 3, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KWH, + Wert = 3, + Startdatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 3, 31, 23, 0, 0, DateTimeKind.Utc) }; HashSet result = v1.Merge(v2); Assert.AreEqual(2, result.Count); @@ -46,27 +46,27 @@ public void TestMergeAdjacentExtensive() { Verbrauch v1 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KWH, - wert = 5, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KWH, + Wert = 5, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) }; Verbrauch v2 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KWH, - wert = 3, - startdatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KWH, + Wert = 3, + Startdatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) }; HashSet result = v1.Merge(v2); Assert.AreEqual(1, result.Count); - Assert.AreEqual(v1.startdatum, result.First().startdatum); - Assert.AreEqual(v2.enddatum, result.First().enddatum); - Assert.AreEqual(8, result.First().wert); + Assert.AreEqual(v1.Startdatum, result.First().Startdatum); + Assert.AreEqual(v2.Enddatum, result.First().Enddatum); + Assert.AreEqual(8, result.First().Wert); Assert.IsTrue(result.SetEquals(v2.Merge(v1))); } @@ -76,21 +76,21 @@ public void TestMergeAdjacentIntensive() { Verbrauch v1 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KW, - wert = 5, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KW, + Wert = 5, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) }; Verbrauch v2 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KW, - wert = 3, - startdatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KW, + Wert = 3, + Startdatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) }; HashSet result12 = v1.Merge(v2); Assert.AreEqual(2, result12.Count); @@ -99,21 +99,21 @@ public void TestMergeAdjacentIntensive() Verbrauch v3 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KW, - wert = 5, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KW, + Wert = 5, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) }; Verbrauch v4 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KW, - wert = 5, - startdatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KW, + Wert = 5, + Startdatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) }; HashSet result34 = v3.Merge(v4); //Assert.AreEqual(1, result34.Count); @@ -127,27 +127,27 @@ public void TestMergeOverlappingExtensive() { Verbrauch v1 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KWH, - wert = 5, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KWH, + Wert = 5, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) }; Verbrauch v2 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KWH, - wert = 3, - startdatum = new DateTime(2018, 1, 15, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KWH, + Wert = 3, + Startdatum = new DateTime(2018, 1, 15, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) }; HashSet result = v1.Merge(v2); Assert.AreEqual(1, result.Count); - Assert.AreEqual(v1.startdatum, result.First().startdatum); - Assert.AreEqual(v2.enddatum, result.First().enddatum); - Assert.AreEqual(8, result.First().wert); + Assert.AreEqual(v1.Startdatum, result.First().Startdatum); + Assert.AreEqual(v2.Enddatum, result.First().Enddatum); + Assert.AreEqual(8, result.First().Wert); Assert.IsTrue(result.SetEquals(v2.Merge(v1))); } @@ -158,33 +158,33 @@ public void TestMergeOverlappingIntensive() { Verbrauch v1 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KW, - wert = 5, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KW, + Wert = 5, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) }; Verbrauch v2 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KW, - wert = 3, - startdatum = new DateTime(2018, 1, 15, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KW, + Wert = 3, + Startdatum = new DateTime(2018, 1, 15, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) }; var rawResult = v1.Merge(v2); List result = new List(rawResult); Assert.AreEqual(3, result.Count); result.Sort(new VerbrauchDateTimeComparer()); - Assert.AreEqual(v1.startdatum, result.First().startdatum); - Assert.AreEqual(5, result.First().wert); - Assert.AreEqual(v2.startdatum, result[1].startdatum); - Assert.AreEqual(v1.enddatum, result[1].enddatum); - Assert.AreEqual(8, result[1].wert); - Assert.AreEqual(v2.enddatum, result.Last().enddatum); - Assert.AreEqual(3, result.Last().wert); + Assert.AreEqual(v1.Startdatum, result.First().Startdatum); + Assert.AreEqual(5, result.First().Wert); + Assert.AreEqual(v2.Startdatum, result[1].Startdatum); + Assert.AreEqual(v1.Enddatum, result[1].Enddatum); + Assert.AreEqual(8, result[1].Wert); + Assert.AreEqual(v2.Enddatum, result.Last().Enddatum); + Assert.AreEqual(3, result.Last().Wert); Assert.IsTrue(rawResult.SetEquals(v2.Merge(v1))); } @@ -194,28 +194,28 @@ public void TestMergeRedundantIntensiveSameTime() { Verbrauch v1 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KW, - wert = 5, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KW, + Wert = 5, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) }; Verbrauch v2 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KW, - wert = 5, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KW, + Wert = 5, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) }; var rawResult = v1.MergeRedundant(v2, true); List result = new List(rawResult); Assert.AreEqual(1, result.Count); Assert.AreEqual(v1, v2); Assert.AreEqual(v1, result.First()); - Assert.AreEqual(5, result.First().wert); + Assert.AreEqual(5, result.First().Wert); } [TestMethod] @@ -223,26 +223,26 @@ public void TestMergeRedundantExtensiveSameTime() { Verbrauch v1 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KWH, - wert = 5, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KWH, + Wert = 5, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) }; Verbrauch v2 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KWH, - wert = 5, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KWH, + Wert = 5, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) }; var rawResult = v1.MergeRedundant(v2, true); List result = new List(rawResult); Assert.AreEqual(1, result.Count); - Assert.AreEqual(5, result.First().wert); + Assert.AreEqual(5, result.First().Wert); } @@ -251,21 +251,21 @@ public void TestMergeRedundantExtensiveLeftJustifiedOverlap() { Verbrauch v1 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KWH, - wert = 5, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KWH, + Wert = 5, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) }; Verbrauch v2 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KWH, - wert = 3, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KWH, + Wert = 3, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) }; var rawResult = v1.MergeRedundant(v2, true); @@ -273,13 +273,13 @@ public void TestMergeRedundantExtensiveLeftJustifiedOverlap() result.Sort(new VerbrauchDateTimeComparer()); Assert.AreEqual(1, result.Count); - Assert.AreEqual(2, result.First().wert); - Assert.AreEqual(new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), result.First().startdatum); + Assert.AreEqual(2, result.First().Wert); + Assert.AreEqual(new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), result.First().Startdatum); //Assert.AreEqual(new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc), result.First().enddatum); //Assert.AreEqual(5, result.Last().wert); //Assert.AreEqual(new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc), result.Last().startdatum); - Assert.AreEqual(new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc), result.Last().enddatum); + Assert.AreEqual(new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc), result.Last().Enddatum); } @@ -293,39 +293,39 @@ public void TestMergeRedundantRightJustifiedOverlap() result.Sort(new VerbrauchDateTimeComparer()); Assert.AreEqual(1, result.Count); - Assert.AreEqual(2450.0M, result.First().wert); - Assert.AreEqual(new DateTime(2018, 9, 1, 0, 0, 0, DateTimeKind.Utc), result.First().startdatum); - Assert.AreEqual(new DateTime(2019, 12, 25, 08, 20, 0, DateTimeKind.Utc), result.First().enddatum); + Assert.AreEqual(2450.0M, result.First().Wert); + Assert.AreEqual(new DateTime(2018, 9, 1, 0, 0, 0, DateTimeKind.Utc), result.First().Startdatum); + Assert.AreEqual(new DateTime(2019, 12, 25, 08, 20, 0, DateTimeKind.Utc), result.First().Enddatum); } private static readonly Verbrauch dtV1 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KWH, - wert = 31 + 2 * 28, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KWH, + Wert = 31 + 2 * 28, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc) }; private static readonly Verbrauch dtV2 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KWH, - wert = 31, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KWH, + Wert = 31, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc) }; private static readonly Verbrauch dtV3 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.KWH, - wert = 31 + 2 * 28 + 3 * 31, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 3, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.KWH, + Wert = 31 + 2 * 28 + 3 * 31, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 3, 31, 23, 0, 0, DateTimeKind.Utc) }; [TestMethod] @@ -334,12 +334,12 @@ public void TestDetangleTwofold() var result = Detangle(new List { dtV1, dtV2 }); result.Sort(new VerbrauchDateTimeComparer()); Assert.AreEqual(2, result.Count); - Assert.AreEqual(new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), result.First().startdatum); - Assert.AreEqual(new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc), result.First().enddatum); - Assert.AreEqual(31, result.First().wert); - Assert.AreEqual(new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc), result.Last().startdatum); - Assert.AreEqual(new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc), result.Last().enddatum); - Assert.AreEqual(2 * 28, result.Last().wert); + Assert.AreEqual(new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), result.First().Startdatum); + Assert.AreEqual(new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc), result.First().Enddatum); + Assert.AreEqual(31, result.First().Wert); + Assert.AreEqual(new DateTime(2018, 1, 31, 23, 0, 0, DateTimeKind.Utc), result.Last().Startdatum); + Assert.AreEqual(new DateTime(2018, 2, 28, 23, 0, 0, DateTimeKind.Utc), result.Last().Enddatum); + Assert.AreEqual(2 * 28, result.Last().Wert); } [TestMethod] @@ -348,48 +348,48 @@ public void TestDetangleThreefold() var result = Detangle(new List { dtV1, dtV2, dtV3 }); result.Sort(new VerbrauchDateTimeComparer()); Assert.AreEqual(3, result.Count); - Assert.AreEqual(new DateTime(2017, 12, 31, 23, 0, 0, 0, DateTimeKind.Utc), result[0].startdatum); - Assert.AreEqual(new DateTime(2018, 1, 31, 23, 0, 0, 0, DateTimeKind.Utc), result[0].enddatum); - Assert.AreEqual(31, result[0].wert); - Assert.AreEqual(new DateTime(2018, 1, 31, 23, 0, 0, 0, DateTimeKind.Utc), result[1].startdatum); - Assert.AreEqual(new DateTime(2018, 2, 28, 23, 0, 0, 0, DateTimeKind.Utc), result[1].enddatum); - Assert.AreEqual(2 * 28, result[1].wert); - Assert.AreEqual(new DateTime(2018, 2, 28, 23, 0, 0, 0, DateTimeKind.Utc), result[2].startdatum); - Assert.AreEqual(new DateTime(2018, 3, 31, 23, 0, 0, 0, DateTimeKind.Utc), result[2].enddatum); - Assert.AreEqual(3 * 31, result[2].wert); + Assert.AreEqual(new DateTime(2017, 12, 31, 23, 0, 0, 0, DateTimeKind.Utc), result[0].Startdatum); + Assert.AreEqual(new DateTime(2018, 1, 31, 23, 0, 0, 0, DateTimeKind.Utc), result[0].Enddatum); + Assert.AreEqual(31, result[0].Wert); + Assert.AreEqual(new DateTime(2018, 1, 31, 23, 0, 0, 0, DateTimeKind.Utc), result[1].Startdatum); + Assert.AreEqual(new DateTime(2018, 2, 28, 23, 0, 0, 0, DateTimeKind.Utc), result[1].Enddatum); + Assert.AreEqual(2 * 28, result[1].Wert); + Assert.AreEqual(new DateTime(2018, 2, 28, 23, 0, 0, 0, DateTimeKind.Utc), result[2].Startdatum); + Assert.AreEqual(new DateTime(2018, 3, 31, 23, 0, 0, 0, DateTimeKind.Utc), result[2].Enddatum); + Assert.AreEqual(3 * 31, result[2].Wert); } [TestMethod] public void TestHfSapDataDetangle() { List testList = JsonConvert.DeserializeObject>("[{\"startdatum\":\"2000-01-01T00:00:00Z\",\"enddatum\":\"2018-09-01T00:00:00Z\",\"wertermittlungsverfahren\":1,\"obiskennzahl\":\"1-1:1.8.0\",\"wert\":50,\"einheit\":2,\"zaehlernummer\":\"10000548\"},{\"startdatum\":\"2000-01-01T00:00:00Z\",\"enddatum\":\"2018-12-25T16:22:00Z\",\"wertermittlungsverfahren\":0,\"obiskennzahl\":\"1-1:1.8.0\",\"wert\":961,\"einheit\":2,\"zaehlernummer\":\"10000548\"},{\"startdatum\":\"2000-01-01T00:00:00Z\",\"enddatum\":\"2019-12-25T08:20:00Z\",\"wertermittlungsverfahren\":1,\"obiskennzahl\":\"1-1:1.8.0\",\"wert\":2500,\"einheit\":2,\"zaehlernummer\":\"10000548\"},{\"startdatum\":\"2018-09-01T00:00:00Z\",\"enddatum\":\"2018-12-25T16:22:00Z\",\"wertermittlungsverfahren\":0,\"obiskennzahl\":\"1-1:1.8.0\",\"wert\":911,\"einheit\":2,\"zaehlernummer\":\"10000548\"},{\"startdatum\":\"2018-09-01T00:00:00Z\",\"enddatum\":\"2019-12-25T08:20:00Z\",\"wertermittlungsverfahren\":1,\"obiskennzahl\":\"1-1:1.8.0\",\"wert\":2450,\"einheit\":2,\"zaehlernummer\":\"10000548\"},{\"startdatum\":\"2018-12-25T16:22:00Z\",\"enddatum\":\"2019-12-25T08:20:00Z\",\"wertermittlungsverfahren\":0,\"obiskennzahl\":\"1-1:1.8.0\",\"wert\":1539,\"einheit\":2,\"zaehlernummer\":\"10000548\"}]"); - Assert.AreEqual(3, testList.Where(v => v.wertermittlungsverfahren == Wertermittlungsverfahren.MESSUNG).Count()); - Assert.AreEqual(3, testList.Where(v => v.wertermittlungsverfahren == Wertermittlungsverfahren.PROGNOSE).Count()); + Assert.AreEqual(3, testList.Where(v => v.Wertermittlungsverfahren == Wertermittlungsverfahren.MESSUNG).Count()); + Assert.AreEqual(3, testList.Where(v => v.Wertermittlungsverfahren == Wertermittlungsverfahren.PROGNOSE).Count()); var result = Detangle(testList); result.Sort(new VerbrauchDateTimeComparer()); //Assert.AreEqual(5, result.Count); - var subResultMessung = result.Where(v => v.wertermittlungsverfahren == Wertermittlungsverfahren.MESSUNG).ToList(); + var subResultMessung = result.Where(v => v.Wertermittlungsverfahren == Wertermittlungsverfahren.MESSUNG).ToList(); Assert.AreEqual(2, subResultMessung.Count); - Assert.AreEqual(new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc), subResultMessung[0].startdatum); - Assert.AreEqual(new DateTime(2018, 9, 1, 0, 0, 0, DateTimeKind.Utc), subResultMessung[0].enddatum); - Assert.AreEqual(50, subResultMessung[0].wert); - Assert.AreEqual(new DateTime(2018, 9, 1, 0, 0, 0, DateTimeKind.Utc), subResultMessung[1].startdatum); - Assert.AreEqual(new DateTime(2019, 12, 25, 8, 20, 0, DateTimeKind.Utc), subResultMessung[1].enddatum); - Assert.AreEqual(2450, subResultMessung[1].wert); + Assert.AreEqual(new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc), subResultMessung[0].Startdatum); + Assert.AreEqual(new DateTime(2018, 9, 1, 0, 0, 0, DateTimeKind.Utc), subResultMessung[0].Enddatum); + Assert.AreEqual(50, subResultMessung[0].Wert); + Assert.AreEqual(new DateTime(2018, 9, 1, 0, 0, 0, DateTimeKind.Utc), subResultMessung[1].Startdatum); + Assert.AreEqual(new DateTime(2019, 12, 25, 8, 20, 0, DateTimeKind.Utc), subResultMessung[1].Enddatum); + Assert.AreEqual(2450, subResultMessung[1].Wert); - var subResultPrognose = result.Where(v => v.wertermittlungsverfahren == Wertermittlungsverfahren.PROGNOSE).ToList(); + var subResultPrognose = result.Where(v => v.Wertermittlungsverfahren == Wertermittlungsverfahren.PROGNOSE).ToList(); Assert.AreEqual(3, subResultPrognose.Count); - Assert.AreEqual(new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc), subResultPrognose[0].startdatum); - Assert.AreEqual(new DateTime(2018, 9, 1, 0, 0, 0, DateTimeKind.Utc), subResultPrognose[0].enddatum); - Assert.AreEqual(50, subResultPrognose[0].wert); - Assert.AreEqual(new DateTime(2018, 9, 1, 0, 0, 0, DateTimeKind.Utc), subResultPrognose[1].startdatum); - Assert.AreEqual(new DateTime(2018, 12, 25, 16, 22, 0, DateTimeKind.Utc), subResultPrognose[1].enddatum); - Assert.AreEqual(911, subResultPrognose[1].wert); - Assert.AreEqual(new DateTime(2018, 12, 25, 16, 22, 0, DateTimeKind.Utc), subResultPrognose[2].startdatum); - Assert.AreEqual(new DateTime(2019, 12, 25, 8, 20, 0, DateTimeKind.Utc), subResultPrognose[2].enddatum); - Assert.AreEqual(1539, subResultPrognose[2].wert); + Assert.AreEqual(new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc), subResultPrognose[0].Startdatum); + Assert.AreEqual(new DateTime(2018, 9, 1, 0, 0, 0, DateTimeKind.Utc), subResultPrognose[0].Enddatum); + Assert.AreEqual(50, subResultPrognose[0].Wert); + Assert.AreEqual(new DateTime(2018, 9, 1, 0, 0, 0, DateTimeKind.Utc), subResultPrognose[1].Startdatum); + Assert.AreEqual(new DateTime(2018, 12, 25, 16, 22, 0, DateTimeKind.Utc), subResultPrognose[1].Enddatum); + Assert.AreEqual(911, subResultPrognose[1].Wert); + Assert.AreEqual(new DateTime(2018, 12, 25, 16, 22, 0, DateTimeKind.Utc), subResultPrognose[2].Startdatum); + Assert.AreEqual(new DateTime(2019, 12, 25, 8, 20, 0, DateTimeKind.Utc), subResultPrognose[2].Enddatum); + Assert.AreEqual(1539, subResultPrognose[2].Wert); } [TestMethod] @@ -397,16 +397,16 @@ public void TestUnitConversion() { Verbrauch v1 = new Verbrauch() { - obiskennzahl = "123", - wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, - einheit = Mengeneinheit.MW, - wert = 17, - startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2018, 3, 31, 23, 0, 0, DateTimeKind.Utc) + Obiskennzahl = "123", + Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG, + Einheit = Mengeneinheit.MW, + Wert = 17, + Startdatum = new DateTime(2017, 12, 31, 23, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2018, 3, 31, 23, 0, 0, DateTimeKind.Utc) }; v1.ConvertToUnit(Mengeneinheit.KW); - Assert.AreEqual(Mengeneinheit.KW, v1.einheit); - Assert.AreEqual(17000.0M, v1.wert); + Assert.AreEqual(Mengeneinheit.KW, v1.Einheit); + Assert.AreEqual(17000.0M, v1.Wert); Assert.ThrowsException(() => v1.ConvertToUnit(Mengeneinheit.KWH)); } diff --git a/TestBO4E-dotnet-Reporting/TestCompletenessReportSorting.cs b/TestBO4E-dotnet-Reporting/TestCompletenessReportSorting.cs index d72f1777..c74ae0bd 100644 --- a/TestBO4E-dotnet-Reporting/TestCompletenessReportSorting.cs +++ b/TestBO4E-dotnet-Reporting/TestCompletenessReportSorting.cs @@ -12,50 +12,50 @@ public void TestStartdatumSorting() { BO4E.Reporting.CompletenessReport cr1 = new BO4E.Reporting.CompletenessReport() { - referenceTimeFrame = new BO4E.COM.Zeitraum() + ReferenceTimeFrame = new BO4E.COM.Zeitraum() { - startdatum = new System.DateTime(2001, 1, 1, 0, 0, 0, System.DateTimeKind.Utc) + Startdatum = new System.DateTime(2001, 1, 1, 0, 0, 0, System.DateTimeKind.Utc) } }; BO4E.Reporting.CompletenessReport cr2 = new BO4E.Reporting.CompletenessReport() { - referenceTimeFrame = new BO4E.COM.Zeitraum() + ReferenceTimeFrame = new BO4E.COM.Zeitraum() { - startdatum = new System.DateTime(2002, 1, 1, 0, 0, 0, System.DateTimeKind.Utc) + Startdatum = new System.DateTime(2002, 1, 1, 0, 0, 0, System.DateTimeKind.Utc) } }; BO4E.Reporting.CompletenessReport cr3 = new BO4E.Reporting.CompletenessReport() { - referenceTimeFrame = new BO4E.COM.Zeitraum() + ReferenceTimeFrame = new BO4E.COM.Zeitraum() { - startdatum = new System.DateTime(2003, 1, 1, 0, 0, 0, System.DateTimeKind.Utc) + Startdatum = new System.DateTime(2003, 1, 1, 0, 0, 0, System.DateTimeKind.Utc) } }; List crList = new List() { cr2, cr3, cr1 }; // before sorting - Assert.IsTrue(crList.First().referenceTimeFrame.startdatum.Value.Year == 2002); - Assert.IsTrue(crList[1].referenceTimeFrame.startdatum.Value.Year == 2003); - Assert.IsTrue(crList.Last().referenceTimeFrame.startdatum.Value.Year == 2001); + Assert.IsTrue(crList.First().ReferenceTimeFrame.Startdatum.Value.Year == 2002); + Assert.IsTrue(crList[1].ReferenceTimeFrame.Startdatum.Value.Year == 2003); + Assert.IsTrue(crList.Last().ReferenceTimeFrame.Startdatum.Value.Year == 2001); crList.Sort(); //after sorting - Assert.IsTrue(crList.First().referenceTimeFrame.startdatum.Value.Year == 2001); - Assert.IsTrue(crList[1].referenceTimeFrame.startdatum.Value.Year == 2002); - Assert.IsTrue(crList.Last().referenceTimeFrame.startdatum.Value.Year == 2003); + Assert.IsTrue(crList.First().ReferenceTimeFrame.Startdatum.Value.Year == 2001); + Assert.IsTrue(crList[1].ReferenceTimeFrame.Startdatum.Value.Year == 2002); + Assert.IsTrue(crList.Last().ReferenceTimeFrame.Startdatum.Value.Year == 2003); BO4E.Reporting.CompletenessReport crNull = new BO4E.Reporting.CompletenessReport(); crList.Add(crNull); BO4E.Reporting.CompletenessReport cr0 = new BO4E.Reporting.CompletenessReport() { - referenceTimeFrame = new BO4E.COM.Zeitraum() + ReferenceTimeFrame = new BO4E.COM.Zeitraum() { - startdatum = new System.DateTime(1999, 1, 1, 0, 0, 0, System.DateTimeKind.Utc) + Startdatum = new System.DateTime(1999, 1, 1, 0, 0, 0, System.DateTimeKind.Utc) } }; crList.Add(cr0); crList.Sort(); - Assert.IsNull(crList.First().referenceTimeFrame); - Assert.IsTrue(crList[1].referenceTimeFrame.startdatum.Value.Year == 1999); + Assert.IsNull(crList.First().ReferenceTimeFrame); + Assert.IsTrue(crList[1].ReferenceTimeFrame.Startdatum.Value.Year == 1999); } } } diff --git a/TestBO4E-dotnet-Reporting/TestReportToCsv.cs b/TestBO4E-dotnet-Reporting/TestReportToCsv.cs index 22a3c79d..b1552a28 100644 --- a/TestBO4E-dotnet-Reporting/TestReportToCsv.cs +++ b/TestBO4E-dotnet-Reporting/TestReportToCsv.cs @@ -1,10 +1,12 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.Linq; using System.Threading; + using BO4E.Reporting; + using Microsoft.VisualStudio.TestTools.UnitTesting; + using Newtonsoft.Json; namespace TestBO4E.Reporting @@ -17,13 +19,13 @@ public void TestCompletenessReportToCsv() { CompletenessReport cr = new CompletenessReport() { - lokationsId = "DE12345", - coverage = 0.87M, // 87% + LokationsId = "DE12345", + Coverage = 0.87M, // 87% wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.PROGNOSE, - referenceTimeFrame = new BO4E.COM.Zeitraum() + ReferenceTimeFrame = new BO4E.COM.Zeitraum() { - startdatum = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2019, 3, 1, 0, 0, 0, DateTimeKind.Utc) + Startdatum = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2019, 3, 1, 0, 0, 0, DateTimeKind.Utc) }, }; string result = cr.ToCsv(';', true, Environment.NewLine); @@ -33,10 +35,10 @@ public void TestCompletenessReportToCsv() // reihenfolge List> reihenfolge = new List> { - new Dictionary() { ["lokationsId"] = "messlokationsId" }, - new Dictionary() { ["coverage"] = "Newcoverage" }, - new Dictionary() { ["Zeitraum.startdatum"] = "time.startdatum" }, - new Dictionary() { ["Zeitraum.enddatum"] = "time.enddatum" } + new Dictionary() { ["LokationsId"] = "messlokationsId" }, + new Dictionary() { ["Coverage"] = "Newcoverage" }, + new Dictionary() { ["Zeitraum.Startdatum"] = "time.startdatum" }, + new Dictionary() { ["Zeitraum.Enddatum"] = "time.enddatum" } }; //string JSONdata = "{'completenessZfa':[{'lokationsId':'lokationsId'},{'coverage':'coverage'},{'Zeitraum.einheit':'einheit'},{'Zeitraum.dauer':'dauer'},{'Zeitraum.startdatum':'startdatum'},{'Zeitraum.enddatum':'enddatum'},{'obiskennzahl':'obiskennzahl'},{'einheit':'einheit'},{'wertermittlungsverfahren':'wertermittlungsverfahren'},{'startdatum':'Verbrauch.startdatum'},{'enddatum':'Verbrauch.enddatum'},{'wert':'Verbrauch.wert'},{'headerLine':'1'}]}"; @@ -46,11 +48,6 @@ public void TestCompletenessReportToCsv() var Newresult = cr.ToCsv(';', true, Environment.NewLine, reihenfolge); lines = new List(Newresult.Split(Environment.NewLine)); Assert.AreEqual(2, lines.Count); - var headerline = lines.First(); - //for (int i = 0; i < reihenfolge.Count; i++) - //{ - // Assert.AreEqual(reihenfolge[i].Values.First(), headerline.Split(";")[i]); - //} string decimalSeparator = Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator; Assert.AreEqual("DE12345;0" + decimalSeparator + "87;2019-01-01T00:00:00Z;2019-03-01T00:00:00Z;", lines[1]); var commaResult = cr.ToCsv(',', lineTerminator: Environment.NewLine, reihenfolge: reihenfolge); @@ -58,34 +55,34 @@ public void TestCompletenessReportToCsv() var dpunktResult = cr.ToCsv(':', lineTerminator: Environment.NewLine, reihenfolge: reihenfolge); Assert.AreEqual("DE12345:0" + decimalSeparator + "87:\"2019-01-01T00:00:00Z\":\"2019-03-01T00:00:00Z\":", dpunktResult.Split(Environment.NewLine)[1]); - cr.values = new List + cr.Values = new List { new CompletenessReport.BasicVerbrauch() { - wert = 17, - startdatum = new DateTime(2019,1,1,0,0,0, DateTimeKind.Utc), - enddatum = new DateTime(2019,1,2,0,0,0, DateTimeKind.Utc) + Wert = 17, + Startdatum = new DateTime(2019,1,1,0,0,0, DateTimeKind.Utc), + Enddatum = new DateTime(2019,1,2,0,0,0, DateTimeKind.Utc) }, new CompletenessReport.BasicVerbrauch() { - wert = 21, - startdatum = new DateTime(2019,1,7,0,0,0, DateTimeKind.Utc), - enddatum = new DateTime(2019,1,8,0,0,0, DateTimeKind.Utc) + Wert = 21, + Startdatum = new DateTime(2019,1,7,0,0,0, DateTimeKind.Utc), + Enddatum = new DateTime(2019,1,8,0,0,0, DateTimeKind.Utc) }, new CompletenessReport.BasicVerbrauch() { - wert = 35, - startdatum = new DateTime(2019,1,12,0,0,0, DateTimeKind.Utc), - enddatum = new DateTime(2019,1,13,0,0,0, DateTimeKind.Utc) + Wert = 35, + Startdatum = new DateTime(2019,1,12,0,0,0, DateTimeKind.Utc), + Enddatum = new DateTime(2019,1,13,0,0,0, DateTimeKind.Utc) } }; - reihenfolge.Add(new Dictionary() { ["wert"] = "V.wert" }); - reihenfolge.Add(new Dictionary() { ["startdatum"] = "V.startdatum" }); - reihenfolge.Add(new Dictionary() { ["enddatum"] = "V.enddatum" }); + reihenfolge.Add(new Dictionary() { ["Wert"] = "V.wert" }); + reihenfolge.Add(new Dictionary() { ["Startdatum"] = "V.startdatum" }); + reihenfolge.Add(new Dictionary() { ["Enddatum"] = "V.enddatum" }); var multiplicityResult = cr.ToCsv(lineTerminator: Environment.NewLine, reihenfolge: reihenfolge); - Assert.AreEqual(2 + cr.values.Count, new List(multiplicityResult.Split(Environment.NewLine)).Count); + Assert.AreEqual(2 + cr.Values.Count, new List(multiplicityResult.Split(Environment.NewLine)).Count); } [TestMethod] public void TestDeserialisationCompletenessReportColumnsToCsv() @@ -123,7 +120,7 @@ public void TestPrivateFieldsAndUserProperties() counter++; } Assert.IsTrue(lastCsvText.Length > 0); - Assert.IsFalse(lastCsvText.Contains(BO4E.BO.BusinessObject.userPropertiesName)); + Assert.IsFalse(lastCsvText.Contains(BO4E.BO.BusinessObject.USER_PROPERTIES_NAME)); Assert.IsFalse(lastCsvText.Contains("_errorMessage")); } @@ -132,59 +129,59 @@ public void TestCompletenessReportMitGapToCsv() { CompletenessReport cr = new CompletenessReport() { - lokationsId = "DE12345", - coverage = 0.87M, // 87% + LokationsId = "DE12345", + Coverage = 0.87M, // 87% wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.PROGNOSE, - referenceTimeFrame = new BO4E.COM.Zeitraum() + ReferenceTimeFrame = new BO4E.COM.Zeitraum() { - startdatum = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2019, 3, 1, 0, 0, 0, DateTimeKind.Utc) + Startdatum = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2019, 3, 1, 0, 0, 0, DateTimeKind.Utc) }, }; - cr.values = new List + cr.Values = new List { new CompletenessReport.BasicVerbrauch() { - wert = 17, - startdatum = new DateTime(2019,1,1,0,0,0, DateTimeKind.Utc), - enddatum = new DateTime(2019,1,2,0,0,0, DateTimeKind.Utc) + Wert = 17, + Startdatum = new DateTime(2019,1,1,0,0,0, DateTimeKind.Utc), + Enddatum = new DateTime(2019,1,2,0,0,0, DateTimeKind.Utc) }, new CompletenessReport.BasicVerbrauch() { - wert = 21, - startdatum = new DateTime(2019,1,7,0,0,0, DateTimeKind.Utc), - enddatum = new DateTime(2019,1,8,0,0,0, DateTimeKind.Utc) + Wert = 21, + Startdatum = new DateTime(2019,1,7,0,0,0, DateTimeKind.Utc), + Enddatum = new DateTime(2019,1,8,0,0,0, DateTimeKind.Utc) }, new CompletenessReport.BasicVerbrauch() { - wert = 35, - startdatum = new DateTime(2019,1,12,0,0,0, DateTimeKind.Utc), - enddatum = new DateTime(2019,1,13,0,0,0, DateTimeKind.Utc) + Wert = 35, + Startdatum = new DateTime(2019,1,12,0,0,0, DateTimeKind.Utc), + Enddatum = new DateTime(2019,1,13,0,0,0, DateTimeKind.Utc) } }; - cr.gaps = new List + cr.Gaps = new List { new CompletenessReport.BasicVerbrauch() { - wert = 0, - startdatum = new DateTime(2017,1,1,0,0,0, DateTimeKind.Utc), - enddatum = new DateTime(2017,1,2,0,0,0, DateTimeKind.Utc) + Wert = 0, + Startdatum = new DateTime(2017,1,1,0,0,0, DateTimeKind.Utc), + Enddatum = new DateTime(2017,1,2,0,0,0, DateTimeKind.Utc) }, new CompletenessReport.BasicVerbrauch() { - wert = 0, - startdatum = new DateTime(2017,1,7,0,0,0, DateTimeKind.Utc), - enddatum = new DateTime(2017,1,8,0,0,0, DateTimeKind.Utc) + Wert = 0, + Startdatum = new DateTime(2017,1,7,0,0,0, DateTimeKind.Utc), + Enddatum = new DateTime(2017,1,8,0,0,0, DateTimeKind.Utc) }, new CompletenessReport.BasicVerbrauch() { - wert = 0, - startdatum = new DateTime(2017,1,12,0,0,0, DateTimeKind.Utc), - enddatum = new DateTime(2017,1,13,0,0,0, DateTimeKind.Utc) + Wert = 0, + Startdatum = new DateTime(2017,1,12,0,0,0, DateTimeKind.Utc), + Enddatum = new DateTime(2017,1,13,0,0,0, DateTimeKind.Utc) } }; var multiplicityResult = cr.ToCsv(lineTerminator: Environment.NewLine); - Assert.AreEqual(2 + cr.values.Count + cr.gaps.Count, new List(multiplicityResult.Split(Environment.NewLine)).Count); + Assert.AreEqual(2 + cr.Values.Count + cr.Gaps.Count, new List(multiplicityResult.Split(Environment.NewLine)).Count); } [TestMethod] @@ -192,26 +189,26 @@ public void TestCompletenessReportToCsvExceptions() { CompletenessReport cr = new CompletenessReport() { - lokationsId = "DE12345", - coverage = 0.87M, // 87% + LokationsId = "DE12345", + Coverage = 0.87M, // 87% wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.PROGNOSE, - referenceTimeFrame = new BO4E.COM.Zeitraum() + ReferenceTimeFrame = new BO4E.COM.Zeitraum() { - startdatum = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), - enddatum = new DateTime(2019, 3, 1, 0, 0, 0, DateTimeKind.Utc) + Startdatum = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), + Enddatum = new DateTime(2019, 3, 1, 0, 0, 0, DateTimeKind.Utc) }, }; // reihenfolge List> reihenfolge = new List> { - new Dictionary() { ["lokationsId"] = "messlokationsId" }, - new Dictionary() { ["coverage"] = "Newcoverage" }, - new Dictionary() { ["Zeitraum.startdatum"] = "time.startdatum" }, - new Dictionary() { ["Zeitraum.enddatum"] = "time.enddatum" }, - new Dictionary() { ["wert"] = null }, - new Dictionary() { ["startdatum"] = "V.startdatum" }, - new Dictionary() { ["enddatum"] = "V.enddatum" }, + new Dictionary() { ["LokationsId"] = "messlokationsId" }, + new Dictionary() { ["Coverage"] = "Newcoverage" }, + new Dictionary() { ["Zeitraum.Startdatum"] = "time.startdatum" }, + new Dictionary() { ["Zeitraum.Enddatum"] = "time.enddatum" }, + new Dictionary() { ["Wert"] = null }, + new Dictionary() { ["Startdatum"] = "V.startdatum" }, + new Dictionary() { ["Enddatum"] = "V.enddatum" }, null }; string newResult = string.Empty; diff --git a/json-schema-files/BO4E.BO.PreisblattMessung.json b/json-schema-files/BO4E.BO.PreisblattMessung.json index 02790f54..20fdfb70 100644 --- a/json-schema-files/BO4E.BO.PreisblattMessung.json +++ b/json-schema-files/BO4E.BO.PreisblattMessung.json @@ -367,7 +367,7 @@ "DR" ] }, - "individuelleAnrede": { + "inviduelleAnrede": { "type": [ "string", "null" @@ -534,7 +534,7 @@ "SYSTEM_MU" ] }, - "parameter": { + "Parameter": { "type": [ "object", "null" @@ -658,7 +658,7 @@ "SYSTEM_MU" ] }, - "parameter": { + "Parameter": { "type": [ "object", "null" diff --git a/json-schema-files/BO4E.BO.PreisblattNetznutzung.json b/json-schema-files/BO4E.BO.PreisblattNetznutzung.json index 99e07ec0..debd5a4a 100644 --- a/json-schema-files/BO4E.BO.PreisblattNetznutzung.json +++ b/json-schema-files/BO4E.BO.PreisblattNetznutzung.json @@ -367,7 +367,7 @@ "DR" ] }, - "individuelleAnrede": { + "inviduelleAnrede": { "type": [ "string", "null" diff --git a/json-schema-files/BO4E.BO.Rechnung.json b/json-schema-files/BO4E.BO.Rechnung.json index 974b324e..146e8603 100644 --- a/json-schema-files/BO4E.BO.Rechnung.json +++ b/json-schema-files/BO4E.BO.Rechnung.json @@ -1463,7 +1463,7 @@ "type": "string", "format": "date-time" }, - "rechnungsstyp": { + "rechnungstyp": { "type": "string", "enum": [ "ABSCHLAGSRECHNUNG", @@ -1530,7 +1530,7 @@ "rechnungsnummer", "rechnungsdatum", "faelligkeitsdatum", - "rechnungsstyp", + "rechnungstyp", "rechnungsperiode", "rechnungsersteller", "rechnungsempfaenger", diff --git a/protobuf-files/BO4E.BO.Angebot.proto b/protobuf-files/BO4E.BO.Angebot.proto index 36770c95..3db8fb92 100644 --- a/protobuf-files/BO4E.BO.Angebot.proto +++ b/protobuf-files/BO4E.BO.Angebot.proto @@ -13,32 +13,32 @@ enum AbgabeArt { TSS = 8; } message Adresse { - optional string postleitzahl = 3; - optional string ort = 4; - optional string strasse = 5; - optional string hausnummer = 6; - optional string postfach = 7; - optional string adresszusatz = 8; - optional string coErgaenzung = 9; - optional Landescode landescode = 10; + optional string Postleitzahl = 3; + optional string Ort = 4; + optional string Strasse = 5; + optional string Hausnummer = 6; + optional string Postfach = 7; + optional string Adresszusatz = 8; + optional string CoErgaenzung = 9; + optional Landescode Landescode = 10; } message Angebot { - optional string angebotsnummer = 4; - optional string anfragereferenz = 5; - optional string angebotsdatum = 6; - optional Sparte sparte = 7 [default = STROM]; - optional .bcl.DateTime bindefrist = 8; - optional Geschaeftspartner angebotgeber = 9; - optional Geschaeftspartner angebotnehmer = 10; - optional Ansprechpartner unterzeichnerAngebotsnehmer = 11; - optional Ansprechpartner unterzeichnerAngebotsgeber = 12; - repeated Angebotsvariante varianten = 13; + optional string Angebotsnummer = 4; + optional string Anfragereferenz = 5; + optional string Angebotsdatum = 6; + optional Sparte Sparte = 7 [default = STROM]; + optional .bcl.DateTime Bindefrist = 8; + optional Geschaeftspartner Angebotgeber = 9; + optional Geschaeftspartner Angebotnehmer = 10; + optional Ansprechpartner UnterzeichnerAngebotsnehmer = 11; + optional Ansprechpartner UnterzeichnerAngebotsgeber = 12; + repeated Angebotsvariante Varianten = 13; } message Angebotsposition { - optional string positionsbezeichung = 3; - optional Menge positionsmenge = 4; - optional Preis positionspreis = 5; - optional Betrag positionsbetrag = 6; + optional string Positionsbezeichung = 3; + optional Menge Positionsmenge = 4; + optional Preis Positionspreis = 5; + optional Betrag Positionsbetrag = 6; } enum Angebotsstatus { KONZEPTION = 0; @@ -52,20 +52,20 @@ enum Angebotsstatus { ERLEDIGT = 8; } message Angebotsteil { - optional string anfrageSubreferenz = 3; - repeated Marktlokation lieferstellenangebotsteil = 4; - optional Menge gesamtmengeangebotsteil = 5; - optional Betrag gesamtkostenangebotsteil = 6; - repeated Angebotsposition positionen = 7; + optional string AnfrageSubreferenz = 3; + repeated Marktlokation Lieferstellenangebotsteil = 4; + optional Menge Gesamtmengeangebotsteil = 5; + optional Betrag Gesamtkostenangebotsteil = 6; + repeated Angebotsposition Positionen = 7; } message Angebotsvariante { - optional Angebotsstatus angebotsstatus = 4 [default = KONZEPTION]; - optional string beschreibung = 5; - optional .bcl.DateTime erstelldatum = 6; - optional .bcl.DateTime bindefrist = 7; - optional Menge gesamtmenge = 8; - optional Betrag gesamtkosten = 9; - repeated Angebotsteil teile = 10; + optional Angebotsstatus Angebotsstatus = 4 [default = KONZEPTION]; + optional string Beschreibung = 5; + optional .bcl.DateTime Erstelldatum = 6; + optional .bcl.DateTime Bindefrist = 7; + optional Menge Gesamtmenge = 8; + optional Betrag Gesamtkosten = 9; + repeated Angebotsteil Teile = 10; } enum Anrede { HERR = 0; @@ -76,17 +76,17 @@ enum Anrede { DR = 5; } message Ansprechpartner { - optional Anrede anrede = 4; - optional string individuelleAnrede = 5; - optional Titel titel = 6; - optional string vorname = 7; - optional string nachname = 8; - optional string eMailAdresse = 9; - optional string kommentar = 10; - optional Geschaeftspartner geschaeftspartner = 11; - optional Adresse adresse = 12; - repeated Rufnummer rufnummer = 13; - repeated Zustaendigkeit zustaendigkeit = 14; + optional Anrede Anrede = 4; + optional string IndividuelleAnrede = 5; + optional Titel Titel = 6; + optional string Vorname = 7; + optional string Nachname = 8; + optional string EMailAdresse = 9; + optional string Kommentar = 10; + optional Geschaeftspartner Geschaeftspartner = 11; + optional Adresse Adresse = 12; + repeated Rufnummer Rufnummer = 13; + repeated Zustaendigkeit Zustaendigkeit = 14; } enum ArithmetischeOperation { ADDITION = 0; @@ -95,8 +95,8 @@ enum ArithmetischeOperation { DIVISION = 3; } message Betrag { - optional .bcl.Decimal wert = 3 [default = 0]; - optional Waehrungscode waehrung = 4 [default = AFN]; + optional .bcl.Decimal Wert = 3 [default = 0]; + optional Waehrungscode Waehrung = 4 [default = AFN]; } enum Bilanzierungsmethode { RLM = 0; @@ -107,8 +107,8 @@ enum Bilanzierungsmethode { IMS = 5; } message Dienstleistung { - optional Dienstleistungstyp dienstleistungstyp = 3 [default = DATENBEREITSTELLUNG_TAEGLICH]; - optional string bezeichnung = 4; + optional Dienstleistungstyp Dienstleistungstyp = 3 [default = DATENBEREITSTELLUNG_TAEGLICH]; + optional string Bezeichnung = 4; } enum Dienstleistungstyp { DATENBEREITSTELLUNG_TAEGLICH = 0; @@ -178,13 +178,13 @@ enum Gebiettyp { VERSORGUNGSGEBIET = 8; } message Geokoordinaten { - optional .bcl.Decimal breitengrad = 3 [default = 0]; - optional .bcl.Decimal laengengrad = 4 [default = 0]; + optional .bcl.Decimal Breitengrad = 3 [default = 0]; + optional .bcl.Decimal Laengengrad = 4 [default = 0]; } message Geraeteeigenschaften { - optional Geraetetyp geraetetyp = 3 [default = WECHSELSTROMZAEHLER]; - optional Geraetemerkmal geraetemerkmal = 4; - map parameter = 1005; + optional Geraetetyp Geraetetyp = 3 [default = WECHSELSTROMZAEHLER]; + optional Geraetemerkmal Geraetemerkmal = 4; + map Parameter = 1005; } enum Geraetemerkmal { EINTARIF = 0; @@ -273,20 +273,20 @@ enum Geraetetyp { } message Geschaeftspartner { optional Anrede anrede = 4; - optional string name1 = 6; - optional string name2 = 7; - optional string name3 = 8; - optional bool gewerbekennzeichnung = 9 [default = false]; - optional string hrnummer = 10; - optional string amtsgericht = 11; - repeated Kontaktart kontaktweg = 12; - optional string umsatzsteuerId = 13; - optional string glaeubigerId = 14; - optional string eMailAdresse = 15; - optional string website = 16; - repeated Geschaeftspartnerrolle geschaeftspartnerrolle = 17; - optional Adresse partneradresse = 18; - optional string title = 1001; + optional string Name1 = 6; + optional string Name2 = 7; + optional string Name3 = 8; + optional bool Gewerbekennzeichnung = 9 [default = false]; + optional string Hrnummer = 10; + optional string Amtsgericht = 11; + repeated Kontaktart Kontaktweg = 12; + optional string UmsatzsteuerId = 13; + optional string GlaeubigerId = 14; + optional string EMailAdresse = 15; + optional string Website = 16; + repeated Geschaeftspartnerrolle Geschaeftspartnerrolle = 17; + optional Adresse Partneradresse = 18; + optional string Title = 1001; } enum Geschaeftspartnerrolle { LIEFERANT = 0; @@ -296,15 +296,15 @@ enum Geschaeftspartnerrolle { MARKTPARTNER = 4; } message Hardware { - optional Geraetetyp geraetetyp = 3 [default = WECHSELSTROMZAEHLER]; - optional string bezeichnung = 4; - optional Geraeteeigenschaften geraeteeigenschaften = 1005; - optional string geraetenummer = 1006; - optional string geraetereferenz = 1007; + optional Geraetetyp Geraetetyp = 3 [default = WECHSELSTROMZAEHLER]; + optional string Bezeichnung = 4; + optional Geraeteeigenschaften Geraeteeigenschaften = 1005; + optional string Geraetenummer = 1006; + optional string Geraetereferenz = 1007; } message Katasteradresse { - optional string gemarkung_flur = 3; - optional string flurstueck = 4; + optional string Gemarkung_flur = 3; + optional string Flurstueck = 4; } enum Kontaktart { ANSCHREIBEN = 0; @@ -314,9 +314,9 @@ enum Kontaktart { SMS = 4; } message Konzessionsabgabe { - optional AbgabeArt satz = 3 [default = KAS]; - optional .bcl.Decimal kosten = 4 [default = 0]; - optional string kategorie = 5; + optional AbgabeArt Satz = 3 [default = KAS]; + optional .bcl.Decimal Kosten = 4 [default = 0]; + optional string Kategorie = 5; } enum Landescode { AC = 0; @@ -588,31 +588,31 @@ enum Landescode { ZW = 266; } message Marktlokation { - optional string marktlokationsId = 4 [default = "|null|"]; - optional Sparte sparte = 5 [default = STROM]; - optional Energierichtung energierichtung = 6 [default = AUSSP]; - optional Bilanzierungsmethode bilanzierungsmethode = 7 [default = RLM]; - optional Verbrauchsart verbrauchsart = 8; - optional bool unterbrechbar = 9; - optional Netzebene netzebene = 10 [default = NSP]; - optional string netzbetreibercodenr = 11; - optional Gebiettyp gebiettyp = 12; - optional string netzgebietnr = 13; - optional string bilanzierungsgebiet = 14; - optional string grundversorgercodenr = 15; - optional Gasqualitaet gasqualitaet = 16; - optional Geschaeftspartner endkunde = 17; - optional Adresse lokationsadresse = 18; - optional Geokoordinaten geoadresse = 19; - optional Katasteradresse katasterinformation = 20; - repeated Messlokationszuordnung zugehoerigeMesslokationen = 28; - repeated Marktrolle marktrollen = 1021; - optional string regelzone = 1022; - optional string marktgebiet = 1023; - optional Zeitreihentyp zeitreihentyp = 1024; - repeated Zaehlwerk zaehlwerke = 1025; - repeated Verbrauch verbauchsmenge = 1026; - repeated Messlokation messlokationen = 1027; + optional string MarktlokationsId = 4 [default = "|null|"]; + optional Sparte Sparte = 5 [default = STROM]; + optional Energierichtung Energierichtung = 6 [default = AUSSP]; + optional Bilanzierungsmethode Bilanzierungsmethode = 7 [default = RLM]; + optional Verbrauchsart Verbrauchsart = 8; + optional bool Unterbrechbar = 9; + optional Netzebene Netzebene = 10 [default = NSP]; + optional string NetzbetreiberCodeNr = 11; + optional Gebiettyp GebietType = 12; + optional string NetzgebietNr = 13; + optional string Bilanzierungsgebiet = 14; + optional string GrundversorgerCodeNr = 15; + optional Gasqualitaet Gasqualitaet = 16; + optional Geschaeftspartner Endkunde = 17; + optional Adresse Lokationsadresse = 18; + optional Geokoordinaten Geoadresse = 19; + optional Katasteradresse Katasterinformation = 20; + repeated Messlokationszuordnung ZugehoerigeMesslokationen = 28; + repeated Marktrolle Marktrollen = 1021; + optional string Regelzone = 1022; + optional string Marktgebiet = 1023; + optional Zeitreihentyp Zeitreihentyp = 1024; + repeated Zaehlwerk Zaehlwerke = 1025; + repeated Verbrauch Verbrauchsmenge = 1026; + repeated Messlokation Messlokationen = 1027; } enum Marktrolle { NB = 0; @@ -631,13 +631,13 @@ enum Marktrolle { INTERESSENT = 13; } message Marktrolle { - optional string rollencodenummer = 3; - optional string code = 4; + optional string Rollencodenummer = 3; + optional string Code = 4; optional Marktrolle marktrolle = 5 [default = NB]; } message Menge { - optional .bcl.Decimal wert = 3 [default = 0]; - optional Mengeneinheit einheit = 4 [default = 0]; + optional .bcl.Decimal Wert = 3 [default = 0]; + optional Mengeneinheit Einheit = 4 [default = 0]; } enum Mengeneinheit { WH = 2; @@ -657,30 +657,30 @@ enum Mengeneinheit { MWH = 2000000; } message Messlokation { - optional string messlokationsId = 4 [default = "|null|"]; - optional Sparte sparte = 5 [default = STROM]; - optional Netzebene netzebeneMessung = 6; - optional string messgebietNr = 7; - optional string grundzustaendigerMSBCodeNr = 8; - optional string grundzustaendigerMSBIMCodeNr = 9; - optional string grundzustaendigerMDLCodeNr = 10; - optional Adresse messadresse = 11; - optional Geokoordinaten geoadresse = 12; - optional Katasteradresse katasterinformation = 13; - repeated Hardware geraete = 14; - repeated Dienstleistung messdienstleistung = 15; - repeated Zaehler messlokationszaehler = 16; - optional Bilanzierungsmethode bilanzierungsmethode = 17; - optional bool abrechnungmessstellenbetriebnna = 1018; - repeated Marktrolle marktrollen = 1019; - optional Gasqualitaet gasqualitaet = 1020; - optional .bcl.Decimal verlustfaktor = 1021; + optional string MesslokationsId = 4 [default = "|null|"]; + optional Sparte Sparte = 5 [default = STROM]; + optional Netzebene NetzebeneMessung = 6; + optional string MessgebietNr = 7; + optional string GrundzustaendigerMSBCodeNr = 8; + optional string GrundzustaendigerMSBIMCodeNr = 9; + optional string GrundzustaendigerMDLCodeNr = 10; + optional Adresse Messadresse = 11; + optional Geokoordinaten Geoadresse = 12; + optional Katasteradresse Katasterinformation = 13; + repeated Hardware Geraete = 14; + repeated Dienstleistung Messdienstleistung = 15; + repeated Zaehler Messlokationszaehler = 16; + optional Bilanzierungsmethode Bilanzierungsmethode = 17; + optional bool Abrechnungmessstellenbetriebnna = 1018; + repeated Marktrolle Marktrollen = 1019; + optional Gasqualitaet Gasqualitaet = 1020; + optional .bcl.Decimal Verlustfaktor = 1021; } message Messlokationszuordnung { - optional string messlokationsId = 3; - optional ArithmetischeOperation arithmetik = 4; - optional .bcl.DateTime gueltigSeit = 5; - optional .bcl.DateTime gueltigBis = 6; + optional string MesslokationsId = 3; + optional ArithmetischeOperation Arithmetik = 4; + optional .bcl.DateTime GueltigSeit = 5; + optional .bcl.DateTime GueltigBis = 6; } enum Messwerterfassung { FERNAUSLESBAR = 0; @@ -699,17 +699,17 @@ enum Netzebene { ND = 9; } message Preis { - optional .bcl.Decimal wert = 3 [default = 0]; - optional Waehrungseinheit einheit = 4 [default = EUR]; - optional Mengeneinheit bezugswert = 5 [default = 0]; - optional Preisstatus status = 6; + optional .bcl.Decimal Wert = 3 [default = 0]; + optional Waehrungseinheit Einheit = 4 [default = EUR]; + optional Mengeneinheit Bezugswert = 5 [default = 0]; + optional Preisstatus Status = 6; } enum Preisstatus { VORLAEUFIG = 0; ENDGUELTIG = 1; } message Rufnummer { - optional Rufnummernart nummerntyp = 3 [default = RUF_ZENTRALE]; + optional Rufnummernart Nummerntyp = 3 [default = RUF_ZENTRALE]; optional string rufnummer = 4; } enum Rufnummernart { @@ -752,13 +752,13 @@ enum Unterbrechbarkeit { NUV = 1; } message Verbrauch { - optional .bcl.DateTime startdatum = 3; - optional .bcl.DateTime enddatum = 4; - optional Wertermittlungsverfahren wertermittlungsverfahren = 5 [default = PROGNOSE]; - optional string obiskennzahl = 6; - optional .bcl.Decimal wert = 7 [default = 0]; - optional Mengeneinheit einheit = 8 [default = 0]; - optional Verbrauchsmengetyp type = 9; + optional .bcl.DateTime Startdatum = 3; + optional .bcl.DateTime Enddatum = 4; + optional Wertermittlungsverfahren Wertermittlungsverfahren = 5 [default = PROGNOSE]; + optional string Obiskennzahl = 6; + optional .bcl.Decimal Wert = 7 [default = 0]; + optional Mengeneinheit Einheit = 8 [default = 0]; + optional Verbrauchsmengetyp Type = 9; } enum Verbrauchsart { KL = 0; @@ -975,19 +975,19 @@ enum Wertermittlungsverfahren { MESSUNG = 1; } message Zaehler { - optional string zaehlernummer = 4; - optional Sparte sparte = 5 [default = STROM]; - optional Zaehlerauspraegung zaehlerauspraegung = 6 [default = EINRICHTUNGSZAEHLER]; - optional Zaehlertyp zaehlertyp = 7 [default = DREHSTROMZAEHLER]; - optional Tarifart tarifart = 8 [default = EINTARIF]; + optional string Zaehlernummer = 4; + optional Sparte Sparte = 5 [default = STROM]; + optional Zaehlerauspraegung Zaehlerauspraegung = 6 [default = EINRICHTUNGSZAEHLER]; + optional Zaehlertyp Zaehlertyp = 7 [default = DREHSTROMZAEHLER]; + optional Tarifart Tarifart = 8 [default = EINTARIF]; optional .bcl.Decimal zaehlerkonstante = 9 [default = 0]; - optional .bcl.DateTime eichungBis = 10; - optional .bcl.DateTime letzteEichung = 11; - repeated Zaehlwerk zaehlwerke = 12; - optional Geschaeftspartner zaehlerhersteller = 13; - optional string gateway = 1014; - optional Fernschaltung fernschaltung = 1015; - optional Messwerterfassung messwerterfassung = 1016; + optional .bcl.DateTime EichungBis = 10; + optional .bcl.DateTime LetzteEichung = 11; + repeated Zaehlwerk Zaehlwerke = 12; + optional Geschaeftspartner Zaehlerhersteller = 13; + optional string Gateway = 1014; + optional Fernschaltung Fernschaltung = 1015; + optional Messwerterfassung Messwerterfassung = 1016; } enum Zaehlerauspraegung { EINRICHTUNGSZAEHLER = 0; @@ -1005,22 +1005,22 @@ enum Zaehlertyp { WECHSELSTROMZAEHLER = 8; } message Zaehlwerk { - optional string zaehlwerkId = 3; - optional string bezeichnung = 4; - optional Energierichtung richtung = 5 [default = AUSSP]; - optional string obisKennzahl = 6; - optional .bcl.Decimal wandlerfaktor = 7 [default = 0]; - optional Mengeneinheit einheit = 8 [default = 0]; - optional string kennzahl = 1009; - optional Schwachlastfaehig schwachlastfaehig = 1010; - repeated Verwendungszweck verwendungszwecke = 1011; - optional Verbrauchsart verbrauchsart = 1012; - optional Unterbrechbarkeit unterbrechbarkeit = 1013; - optional Waermenutzung waermenutzung = 1014; - optional Konzessionsabgabe konzessionsabgabe = 1015; - optional bool steuerbefreit = 1016; - optional int32 vorkommastelle = 1017; - optional int32 nachkommastelle = 1018; + optional string ZaehlwerkId = 3; + optional string Bezeichnung = 4; + optional Energierichtung Richtung = 5 [default = AUSSP]; + optional string ObisKennzahl = 6; + optional .bcl.Decimal Wandlerfaktor = 7 [default = 0]; + optional Mengeneinheit Einheit = 8 [default = 0]; + optional string Kennzahl = 1009; + optional Schwachlastfaehig Schwachlastfaehig = 1010; + repeated Verwendungszweck Verwendungszwecke = 1011; + optional Verbrauchsart Verbrauchsart = 1012; + optional Unterbrechbarkeit Unterbrechbarkeit = 1013; + optional Waermenutzung Waermenutzung = 1014; + optional Konzessionsabgabe Konzessionsabgabe = 1015; + optional bool Steuerbefreit = 1016; + optional int32 Vorkommastelle = 1017; + optional int32 Nachkommastelle = 1018; } enum Zeitreihentyp { EGS = 0; @@ -1032,7 +1032,7 @@ enum Zeitreihentyp { TLS = 6; } message Zustaendigkeit { - optional string jobtitel = 3; - optional string abteilung = 4; - optional string themengebiet = 5; + optional string Jobtitel = 3; + optional string Abteilung = 4; + optional string Themengebiet = 5; } diff --git a/protobuf-files/BO4E.BO.Ansprechpartner.proto b/protobuf-files/BO4E.BO.Ansprechpartner.proto index 78878db6..d823ce3c 100644 --- a/protobuf-files/BO4E.BO.Ansprechpartner.proto +++ b/protobuf-files/BO4E.BO.Ansprechpartner.proto @@ -1,14 +1,14 @@ syntax = "proto2"; message Adresse { - optional string postleitzahl = 3; - optional string ort = 4; - optional string strasse = 5; - optional string hausnummer = 6; - optional string postfach = 7; - optional string adresszusatz = 8; - optional string coErgaenzung = 9; - optional Landescode landescode = 10; + optional string Postleitzahl = 3; + optional string Ort = 4; + optional string Strasse = 5; + optional string Hausnummer = 6; + optional string Postfach = 7; + optional string Adresszusatz = 8; + optional string CoErgaenzung = 9; + optional Landescode Landescode = 10; } enum Anrede { HERR = 0; @@ -19,34 +19,34 @@ enum Anrede { DR = 5; } message Ansprechpartner { - optional Anrede anrede = 4; - optional string individuelleAnrede = 5; - optional Titel titel = 6; - optional string vorname = 7; - optional string nachname = 8; - optional string eMailAdresse = 9; - optional string kommentar = 10; - optional Geschaeftspartner geschaeftspartner = 11; - optional Adresse adresse = 12; - repeated Rufnummer rufnummer = 13; - repeated Zustaendigkeit zustaendigkeit = 14; + optional Anrede Anrede = 4; + optional string IndividuelleAnrede = 5; + optional Titel Titel = 6; + optional string Vorname = 7; + optional string Nachname = 8; + optional string EMailAdresse = 9; + optional string Kommentar = 10; + optional Geschaeftspartner Geschaeftspartner = 11; + optional Adresse Adresse = 12; + repeated Rufnummer Rufnummer = 13; + repeated Zustaendigkeit Zustaendigkeit = 14; } message Geschaeftspartner { optional Anrede anrede = 4; - optional string name1 = 6; - optional string name2 = 7; - optional string name3 = 8; - optional bool gewerbekennzeichnung = 9 [default = false]; - optional string hrnummer = 10; - optional string amtsgericht = 11; - repeated Kontaktart kontaktweg = 12; - optional string umsatzsteuerId = 13; - optional string glaeubigerId = 14; - optional string eMailAdresse = 15; - optional string website = 16; - repeated Geschaeftspartnerrolle geschaeftspartnerrolle = 17; - optional Adresse partneradresse = 18; - optional string title = 1001; + optional string Name1 = 6; + optional string Name2 = 7; + optional string Name3 = 8; + optional bool Gewerbekennzeichnung = 9 [default = false]; + optional string Hrnummer = 10; + optional string Amtsgericht = 11; + repeated Kontaktart Kontaktweg = 12; + optional string UmsatzsteuerId = 13; + optional string GlaeubigerId = 14; + optional string EMailAdresse = 15; + optional string Website = 16; + repeated Geschaeftspartnerrolle Geschaeftspartnerrolle = 17; + optional Adresse Partneradresse = 18; + optional string Title = 1001; } enum Geschaeftspartnerrolle { LIEFERANT = 0; @@ -332,7 +332,7 @@ enum Landescode { ZW = 266; } message Rufnummer { - optional Rufnummernart nummerntyp = 3 [default = RUF_ZENTRALE]; + optional Rufnummernart Nummerntyp = 3 [default = RUF_ZENTRALE]; optional string rufnummer = 4; } enum Rufnummernart { @@ -352,7 +352,7 @@ enum Titel { PROF_DR = 2; } message Zustaendigkeit { - optional string jobtitel = 3; - optional string abteilung = 4; - optional string themengebiet = 5; + optional string Jobtitel = 3; + optional string Abteilung = 4; + optional string Themengebiet = 5; } diff --git a/protobuf-files/BO4E.BO.Benachrichtigung.proto b/protobuf-files/BO4E.BO.Benachrichtigung.proto index b42d80b3..e4c39bec 100644 --- a/protobuf-files/BO4E.BO.Benachrichtigung.proto +++ b/protobuf-files/BO4E.BO.Benachrichtigung.proto @@ -2,12 +2,12 @@ import "protobuf-net/bcl.proto"; // schema for protobuf-net's handling of core .NET types message Aufgabe { - optional string aufgabenId = 3; - optional string beschreibung = 4; - optional .bcl.DateTime deadline = 5; - optional bool ausgefuehrt = 6 [default = false]; - optional .bcl.DateTime ausfuehrungszeitpunkt = 7; - optional string ausfuehrender = 8; + optional string AufgabenId = 3; + optional string Beschreibung = 4; + optional .bcl.DateTime Deadline = 5; + optional bool Ausgefuehrt = 6 [default = false]; + optional .bcl.DateTime Ausfuehrungszeitpunkt = 7; + optional string Ausfuehrender = 8; } enum Bearbeitungsstatus { OFFEN = 0; @@ -18,26 +18,26 @@ enum Bearbeitungsstatus { IGNORIERT = 5; } message Benachrichtigung { - optional string benachrichtigungsId = 4; - optional Prioritaet prioritaet = 5 [default = NORMAL]; - optional Bearbeitungsstatus bearbeitungsstatus = 6 [default = OFFEN]; - optional string kurztext = 7; - optional .bcl.DateTime erstellungsZeitpunkt = 8; - optional string kategorie = 9; - optional string bearbeiter = 10; - repeated Notiz notizen = 11; - optional .bcl.DateTime deadline = 12; - repeated Aufgabe aufgaben = 13; - repeated GenericStringStringInfo infos = 14; + optional string BenachrichtigungsId = 4; + optional Prioritaet Prioritaet = 5 [default = NORMAL]; + optional Bearbeitungsstatus Bearbeitungsstatus = 6 [default = OFFEN]; + optional string Kurztext = 7; + optional .bcl.DateTime ErstellungsZeitpunkt = 8; + optional string Kategorie = 9; + optional string Bearbeiter = 10; + repeated Notiz Notizen = 11; + optional .bcl.DateTime Deadline = 12; + repeated Aufgabe Aufgaben = 13; + repeated GenericStringStringInfo Infos = 14; } message GenericStringStringInfo { - optional string keyColumn = 3; - optional string value = 4; + optional string KeyColumn = 3; + optional string Value = 4; } message Notiz { - optional string autor = 3; - optional .bcl.DateTime zeitpunkt = 4; - optional string inhalt = 5; + optional string Autor = 3; + optional .bcl.DateTime Zeitpunkt = 4; + optional string Inhalt = 5; } enum Prioritaet { SEHR_NIEDRIG = 0; diff --git a/protobuf-files/BO4E.BO.Energiemenge.proto b/protobuf-files/BO4E.BO.Energiemenge.proto index 1b32a28b..946e083f 100644 --- a/protobuf-files/BO4E.BO.Energiemenge.proto +++ b/protobuf-files/BO4E.BO.Energiemenge.proto @@ -2,9 +2,9 @@ import "protobuf-net/bcl.proto"; // schema for protobuf-net's handling of core .NET types message Energiemenge { - optional string lokationsId = 4 [default = "|null|"]; - optional Lokationstyp lokationstyp = 5 [default = MaLo]; - repeated Verbrauch energieverbrauch = 6; + optional string LokationsId = 4 [default = "|null|"]; + optional Lokationstyp LokationsTyp = 5 [default = MaLo]; + repeated Verbrauch Energieverbrauch = 6; } enum Lokationstyp { MaLo = 0; @@ -28,13 +28,13 @@ enum Mengeneinheit { MWH = 2000000; } message Verbrauch { - optional .bcl.DateTime startdatum = 3; - optional .bcl.DateTime enddatum = 4; - optional Wertermittlungsverfahren wertermittlungsverfahren = 5 [default = PROGNOSE]; - optional string obiskennzahl = 6; - optional .bcl.Decimal wert = 7 [default = 0]; - optional Mengeneinheit einheit = 8 [default = 0]; - optional Verbrauchsmengetyp type = 9; + optional .bcl.DateTime Startdatum = 3; + optional .bcl.DateTime Enddatum = 4; + optional Wertermittlungsverfahren Wertermittlungsverfahren = 5 [default = PROGNOSE]; + optional string Obiskennzahl = 6; + optional .bcl.Decimal Wert = 7 [default = 0]; + optional Mengeneinheit Einheit = 8 [default = 0]; + optional Verbrauchsmengetyp Type = 9; } enum Verbrauchsmengetyp { ARBEITLEISTUNGTAGESPARAMETERABHMALO = 0; diff --git a/protobuf-files/BO4E.BO.Geschaeftspartner.proto b/protobuf-files/BO4E.BO.Geschaeftspartner.proto index 87b35183..b91da1ce 100644 --- a/protobuf-files/BO4E.BO.Geschaeftspartner.proto +++ b/protobuf-files/BO4E.BO.Geschaeftspartner.proto @@ -1,14 +1,14 @@ syntax = "proto2"; message Adresse { - optional string postleitzahl = 3; - optional string ort = 4; - optional string strasse = 5; - optional string hausnummer = 6; - optional string postfach = 7; - optional string adresszusatz = 8; - optional string coErgaenzung = 9; - optional Landescode landescode = 10; + optional string Postleitzahl = 3; + optional string Ort = 4; + optional string Strasse = 5; + optional string Hausnummer = 6; + optional string Postfach = 7; + optional string Adresszusatz = 8; + optional string CoErgaenzung = 9; + optional Landescode Landescode = 10; } enum Anrede { HERR = 0; @@ -20,20 +20,20 @@ enum Anrede { } message Geschaeftspartner { optional Anrede anrede = 4; - optional string name1 = 6; - optional string name2 = 7; - optional string name3 = 8; - optional bool gewerbekennzeichnung = 9 [default = false]; - optional string hrnummer = 10; - optional string amtsgericht = 11; - repeated Kontaktart kontaktweg = 12; - optional string umsatzsteuerId = 13; - optional string glaeubigerId = 14; - optional string eMailAdresse = 15; - optional string website = 16; - repeated Geschaeftspartnerrolle geschaeftspartnerrolle = 17; - optional Adresse partneradresse = 18; - optional string title = 1001; + optional string Name1 = 6; + optional string Name2 = 7; + optional string Name3 = 8; + optional bool Gewerbekennzeichnung = 9 [default = false]; + optional string Hrnummer = 10; + optional string Amtsgericht = 11; + repeated Kontaktart Kontaktweg = 12; + optional string UmsatzsteuerId = 13; + optional string GlaeubigerId = 14; + optional string EMailAdresse = 15; + optional string Website = 16; + repeated Geschaeftspartnerrolle Geschaeftspartnerrolle = 17; + optional Adresse Partneradresse = 18; + optional string Title = 1001; } enum Geschaeftspartnerrolle { LIEFERANT = 0; diff --git a/protobuf-files/BO4E.BO.Kosten.proto b/protobuf-files/BO4E.BO.Kosten.proto index 69a06019..83065cb4 100644 --- a/protobuf-files/BO4E.BO.Kosten.proto +++ b/protobuf-files/BO4E.BO.Kosten.proto @@ -2,38 +2,38 @@ import "protobuf-net/bcl.proto"; // schema for protobuf-net's handling of core .NET types message Betrag { - optional .bcl.Decimal wert = 3 [default = 0]; - optional Waehrungscode waehrung = 4 [default = AFN]; + optional .bcl.Decimal Wert = 3 [default = 0]; + optional Waehrungscode Waehrung = 4 [default = AFN]; } message Kosten { - optional Kostenklasse kostenklasse = 4 [default = 0]; - optional Zeitraum gueltigkeit = 5; - repeated Betrag summeKosten = 6; - repeated Kostenblock kostenbloecke = 7; - repeated Kostenposition kostenpositionen = 8; + optional Kostenklasse Kostenklasse = 4 [default = 0]; + optional Zeitraum Gueltigkeit = 5; + repeated Betrag SummeKosten = 6; + repeated Kostenblock Kostenbloecke = 7; + repeated Kostenposition Kostenpositionen = 8; } message Kostenblock { - optional string kostenblockbezeichnung = 3; - optional Betrag summeKostenblock = 4; - repeated Kostenposition kostenpositionen = 5; + optional string Kostenblockbezeichnung = 3; + optional Betrag SummeKostenblock = 4; + repeated Kostenposition Kostenpositionen = 5; } enum Kostenklasse { // this enumeration will be passed as a raw value } message Kostenposition { - optional string positionstitel = 3; - optional .bcl.DateTime von = 4; - optional .bcl.DateTime bis = 5; - optional string artikelbezeichnung = 6; - optional string artikeldetail = 7; - optional Menge menge = 8; - optional Menge zeitmenge = 9; - optional Preis einzelpreis = 10; - optional Betrag betragKostenposition = 11; + optional string Positionstitel = 3; + optional .bcl.DateTime Von = 4; + optional .bcl.DateTime Bis = 5; + optional string Artikelbezeichnung = 6; + optional string Artikeldetail = 7; + optional Menge Menge = 8; + optional Menge Zeitmenge = 9; + optional Preis Einzelpreis = 10; + optional Betrag BetragKostenposition = 11; } message Menge { - optional .bcl.Decimal wert = 3 [default = 0]; - optional Mengeneinheit einheit = 4 [default = 0]; + optional .bcl.Decimal Wert = 3 [default = 0]; + optional Mengeneinheit Einheit = 4 [default = 0]; } enum Mengeneinheit { WH = 2; @@ -53,10 +53,10 @@ enum Mengeneinheit { MWH = 2000000; } message Preis { - optional .bcl.Decimal wert = 3 [default = 0]; - optional Waehrungseinheit einheit = 4 [default = EUR]; - optional Mengeneinheit bezugswert = 5 [default = 0]; - optional Preisstatus status = 6; + optional .bcl.Decimal Wert = 3 [default = 0]; + optional Waehrungseinheit Einheit = 4 [default = EUR]; + optional Mengeneinheit Bezugswert = 5 [default = 0]; + optional Preisstatus Status = 6; } enum Preisstatus { VORLAEUFIG = 0; @@ -262,8 +262,8 @@ enum Zeiteinheit { JAHR = 9; } message Zeitraum { - optional Zeiteinheit einheit = 3; - optional .bcl.Decimal dauer = 4; - optional .bcl.DateTime startdatum = 5; - optional .bcl.DateTime enddatum = 6; + optional Zeiteinheit Einheit = 3; + optional .bcl.Decimal Dauer = 4; + optional .bcl.DateTime Startdatum = 5; + optional .bcl.DateTime Enddatum = 6; } diff --git a/protobuf-files/BO4E.BO.Marktlokation.proto b/protobuf-files/BO4E.BO.Marktlokation.proto index 60840d57..99921841 100644 --- a/protobuf-files/BO4E.BO.Marktlokation.proto +++ b/protobuf-files/BO4E.BO.Marktlokation.proto @@ -13,14 +13,14 @@ enum AbgabeArt { TSS = 8; } message Adresse { - optional string postleitzahl = 3; - optional string ort = 4; - optional string strasse = 5; - optional string hausnummer = 6; - optional string postfach = 7; - optional string adresszusatz = 8; - optional string coErgaenzung = 9; - optional Landescode landescode = 10; + optional string Postleitzahl = 3; + optional string Ort = 4; + optional string Strasse = 5; + optional string Hausnummer = 6; + optional string Postfach = 7; + optional string Adresszusatz = 8; + optional string CoErgaenzung = 9; + optional Landescode Landescode = 10; } enum Anrede { HERR = 0; @@ -45,8 +45,8 @@ enum Bilanzierungsmethode { IMS = 5; } message Dienstleistung { - optional Dienstleistungstyp dienstleistungstyp = 3 [default = DATENBEREITSTELLUNG_TAEGLICH]; - optional string bezeichnung = 4; + optional Dienstleistungstyp Dienstleistungstyp = 3 [default = DATENBEREITSTELLUNG_TAEGLICH]; + optional string Bezeichnung = 4; } enum Dienstleistungstyp { DATENBEREITSTELLUNG_TAEGLICH = 0; @@ -116,13 +116,13 @@ enum Gebiettyp { VERSORGUNGSGEBIET = 8; } message Geokoordinaten { - optional .bcl.Decimal breitengrad = 3 [default = 0]; - optional .bcl.Decimal laengengrad = 4 [default = 0]; + optional .bcl.Decimal Breitengrad = 3 [default = 0]; + optional .bcl.Decimal Laengengrad = 4 [default = 0]; } message Geraeteeigenschaften { - optional Geraetetyp geraetetyp = 3 [default = WECHSELSTROMZAEHLER]; - optional Geraetemerkmal geraetemerkmal = 4; - map parameter = 1005; + optional Geraetetyp Geraetetyp = 3 [default = WECHSELSTROMZAEHLER]; + optional Geraetemerkmal Geraetemerkmal = 4; + map Parameter = 1005; } enum Geraetemerkmal { EINTARIF = 0; @@ -211,20 +211,20 @@ enum Geraetetyp { } message Geschaeftspartner { optional Anrede anrede = 4; - optional string name1 = 6; - optional string name2 = 7; - optional string name3 = 8; - optional bool gewerbekennzeichnung = 9 [default = false]; - optional string hrnummer = 10; - optional string amtsgericht = 11; - repeated Kontaktart kontaktweg = 12; - optional string umsatzsteuerId = 13; - optional string glaeubigerId = 14; - optional string eMailAdresse = 15; - optional string website = 16; - repeated Geschaeftspartnerrolle geschaeftspartnerrolle = 17; - optional Adresse partneradresse = 18; - optional string title = 1001; + optional string Name1 = 6; + optional string Name2 = 7; + optional string Name3 = 8; + optional bool Gewerbekennzeichnung = 9 [default = false]; + optional string Hrnummer = 10; + optional string Amtsgericht = 11; + repeated Kontaktart Kontaktweg = 12; + optional string UmsatzsteuerId = 13; + optional string GlaeubigerId = 14; + optional string EMailAdresse = 15; + optional string Website = 16; + repeated Geschaeftspartnerrolle Geschaeftspartnerrolle = 17; + optional Adresse Partneradresse = 18; + optional string Title = 1001; } enum Geschaeftspartnerrolle { LIEFERANT = 0; @@ -234,15 +234,15 @@ enum Geschaeftspartnerrolle { MARKTPARTNER = 4; } message Hardware { - optional Geraetetyp geraetetyp = 3 [default = WECHSELSTROMZAEHLER]; - optional string bezeichnung = 4; - optional Geraeteeigenschaften geraeteeigenschaften = 1005; - optional string geraetenummer = 1006; - optional string geraetereferenz = 1007; + optional Geraetetyp Geraetetyp = 3 [default = WECHSELSTROMZAEHLER]; + optional string Bezeichnung = 4; + optional Geraeteeigenschaften Geraeteeigenschaften = 1005; + optional string Geraetenummer = 1006; + optional string Geraetereferenz = 1007; } message Katasteradresse { - optional string gemarkung_flur = 3; - optional string flurstueck = 4; + optional string Gemarkung_flur = 3; + optional string Flurstueck = 4; } enum Kontaktart { ANSCHREIBEN = 0; @@ -252,9 +252,9 @@ enum Kontaktart { SMS = 4; } message Konzessionsabgabe { - optional AbgabeArt satz = 3 [default = KAS]; - optional .bcl.Decimal kosten = 4 [default = 0]; - optional string kategorie = 5; + optional AbgabeArt Satz = 3 [default = KAS]; + optional .bcl.Decimal Kosten = 4 [default = 0]; + optional string Kategorie = 5; } enum Landescode { AC = 0; @@ -526,31 +526,31 @@ enum Landescode { ZW = 266; } message Marktlokation { - optional string marktlokationsId = 4 [default = "|null|"]; - optional Sparte sparte = 5 [default = STROM]; - optional Energierichtung energierichtung = 6 [default = AUSSP]; - optional Bilanzierungsmethode bilanzierungsmethode = 7 [default = RLM]; - optional Verbrauchsart verbrauchsart = 8; - optional bool unterbrechbar = 9; - optional Netzebene netzebene = 10 [default = NSP]; - optional string netzbetreibercodenr = 11; - optional Gebiettyp gebiettyp = 12; - optional string netzgebietnr = 13; - optional string bilanzierungsgebiet = 14; - optional string grundversorgercodenr = 15; - optional Gasqualitaet gasqualitaet = 16; - optional Geschaeftspartner endkunde = 17; - optional Adresse lokationsadresse = 18; - optional Geokoordinaten geoadresse = 19; - optional Katasteradresse katasterinformation = 20; - repeated Messlokationszuordnung zugehoerigeMesslokationen = 28; - repeated Marktrolle marktrollen = 1021; - optional string regelzone = 1022; - optional string marktgebiet = 1023; - optional Zeitreihentyp zeitreihentyp = 1024; - repeated Zaehlwerk zaehlwerke = 1025; - repeated Verbrauch verbauchsmenge = 1026; - repeated Messlokation messlokationen = 1027; + optional string MarktlokationsId = 4 [default = "|null|"]; + optional Sparte Sparte = 5 [default = STROM]; + optional Energierichtung Energierichtung = 6 [default = AUSSP]; + optional Bilanzierungsmethode Bilanzierungsmethode = 7 [default = RLM]; + optional Verbrauchsart Verbrauchsart = 8; + optional bool Unterbrechbar = 9; + optional Netzebene Netzebene = 10 [default = NSP]; + optional string NetzbetreiberCodeNr = 11; + optional Gebiettyp GebietType = 12; + optional string NetzgebietNr = 13; + optional string Bilanzierungsgebiet = 14; + optional string GrundversorgerCodeNr = 15; + optional Gasqualitaet Gasqualitaet = 16; + optional Geschaeftspartner Endkunde = 17; + optional Adresse Lokationsadresse = 18; + optional Geokoordinaten Geoadresse = 19; + optional Katasteradresse Katasterinformation = 20; + repeated Messlokationszuordnung ZugehoerigeMesslokationen = 28; + repeated Marktrolle Marktrollen = 1021; + optional string Regelzone = 1022; + optional string Marktgebiet = 1023; + optional Zeitreihentyp Zeitreihentyp = 1024; + repeated Zaehlwerk Zaehlwerke = 1025; + repeated Verbrauch Verbrauchsmenge = 1026; + repeated Messlokation Messlokationen = 1027; } enum Marktrolle { NB = 0; @@ -569,8 +569,8 @@ enum Marktrolle { INTERESSENT = 13; } message Marktrolle { - optional string rollencodenummer = 3; - optional string code = 4; + optional string Rollencodenummer = 3; + optional string Code = 4; optional Marktrolle marktrolle = 5 [default = NB]; } enum Mengeneinheit { @@ -591,30 +591,30 @@ enum Mengeneinheit { MWH = 2000000; } message Messlokation { - optional string messlokationsId = 4 [default = "|null|"]; - optional Sparte sparte = 5 [default = STROM]; - optional Netzebene netzebeneMessung = 6; - optional string messgebietNr = 7; - optional string grundzustaendigerMSBCodeNr = 8; - optional string grundzustaendigerMSBIMCodeNr = 9; - optional string grundzustaendigerMDLCodeNr = 10; - optional Adresse messadresse = 11; - optional Geokoordinaten geoadresse = 12; - optional Katasteradresse katasterinformation = 13; - repeated Hardware geraete = 14; - repeated Dienstleistung messdienstleistung = 15; - repeated Zaehler messlokationszaehler = 16; - optional Bilanzierungsmethode bilanzierungsmethode = 17; - optional bool abrechnungmessstellenbetriebnna = 1018; - repeated Marktrolle marktrollen = 1019; - optional Gasqualitaet gasqualitaet = 1020; - optional .bcl.Decimal verlustfaktor = 1021; + optional string MesslokationsId = 4 [default = "|null|"]; + optional Sparte Sparte = 5 [default = STROM]; + optional Netzebene NetzebeneMessung = 6; + optional string MessgebietNr = 7; + optional string GrundzustaendigerMSBCodeNr = 8; + optional string GrundzustaendigerMSBIMCodeNr = 9; + optional string GrundzustaendigerMDLCodeNr = 10; + optional Adresse Messadresse = 11; + optional Geokoordinaten Geoadresse = 12; + optional Katasteradresse Katasterinformation = 13; + repeated Hardware Geraete = 14; + repeated Dienstleistung Messdienstleistung = 15; + repeated Zaehler Messlokationszaehler = 16; + optional Bilanzierungsmethode Bilanzierungsmethode = 17; + optional bool Abrechnungmessstellenbetriebnna = 1018; + repeated Marktrolle Marktrollen = 1019; + optional Gasqualitaet Gasqualitaet = 1020; + optional .bcl.Decimal Verlustfaktor = 1021; } message Messlokationszuordnung { - optional string messlokationsId = 3; - optional ArithmetischeOperation arithmetik = 4; - optional .bcl.DateTime gueltigSeit = 5; - optional .bcl.DateTime gueltigBis = 6; + optional string MesslokationsId = 3; + optional ArithmetischeOperation Arithmetik = 4; + optional .bcl.DateTime GueltigSeit = 5; + optional .bcl.DateTime GueltigBis = 6; } enum Messwerterfassung { FERNAUSLESBAR = 0; @@ -656,13 +656,13 @@ enum Unterbrechbarkeit { NUV = 1; } message Verbrauch { - optional .bcl.DateTime startdatum = 3; - optional .bcl.DateTime enddatum = 4; - optional Wertermittlungsverfahren wertermittlungsverfahren = 5 [default = PROGNOSE]; - optional string obiskennzahl = 6; - optional .bcl.Decimal wert = 7 [default = 0]; - optional Mengeneinheit einheit = 8 [default = 0]; - optional Verbrauchsmengetyp type = 9; + optional .bcl.DateTime Startdatum = 3; + optional .bcl.DateTime Enddatum = 4; + optional Wertermittlungsverfahren Wertermittlungsverfahren = 5 [default = PROGNOSE]; + optional string Obiskennzahl = 6; + optional .bcl.Decimal Wert = 7 [default = 0]; + optional Mengeneinheit Einheit = 8 [default = 0]; + optional Verbrauchsmengetyp Type = 9; } enum Verbrauchsart { KL = 0; @@ -692,19 +692,19 @@ enum Wertermittlungsverfahren { MESSUNG = 1; } message Zaehler { - optional string zaehlernummer = 4; - optional Sparte sparte = 5 [default = STROM]; - optional Zaehlerauspraegung zaehlerauspraegung = 6 [default = EINRICHTUNGSZAEHLER]; - optional Zaehlertyp zaehlertyp = 7 [default = DREHSTROMZAEHLER]; - optional Tarifart tarifart = 8 [default = EINTARIF]; + optional string Zaehlernummer = 4; + optional Sparte Sparte = 5 [default = STROM]; + optional Zaehlerauspraegung Zaehlerauspraegung = 6 [default = EINRICHTUNGSZAEHLER]; + optional Zaehlertyp Zaehlertyp = 7 [default = DREHSTROMZAEHLER]; + optional Tarifart Tarifart = 8 [default = EINTARIF]; optional .bcl.Decimal zaehlerkonstante = 9 [default = 0]; - optional .bcl.DateTime eichungBis = 10; - optional .bcl.DateTime letzteEichung = 11; - repeated Zaehlwerk zaehlwerke = 12; - optional Geschaeftspartner zaehlerhersteller = 13; - optional string gateway = 1014; - optional Fernschaltung fernschaltung = 1015; - optional Messwerterfassung messwerterfassung = 1016; + optional .bcl.DateTime EichungBis = 10; + optional .bcl.DateTime LetzteEichung = 11; + repeated Zaehlwerk Zaehlwerke = 12; + optional Geschaeftspartner Zaehlerhersteller = 13; + optional string Gateway = 1014; + optional Fernschaltung Fernschaltung = 1015; + optional Messwerterfassung Messwerterfassung = 1016; } enum Zaehlerauspraegung { EINRICHTUNGSZAEHLER = 0; @@ -722,22 +722,22 @@ enum Zaehlertyp { WECHSELSTROMZAEHLER = 8; } message Zaehlwerk { - optional string zaehlwerkId = 3; - optional string bezeichnung = 4; - optional Energierichtung richtung = 5 [default = AUSSP]; - optional string obisKennzahl = 6; - optional .bcl.Decimal wandlerfaktor = 7 [default = 0]; - optional Mengeneinheit einheit = 8 [default = 0]; - optional string kennzahl = 1009; - optional Schwachlastfaehig schwachlastfaehig = 1010; - repeated Verwendungszweck verwendungszwecke = 1011; - optional Verbrauchsart verbrauchsart = 1012; - optional Unterbrechbarkeit unterbrechbarkeit = 1013; - optional Waermenutzung waermenutzung = 1014; - optional Konzessionsabgabe konzessionsabgabe = 1015; - optional bool steuerbefreit = 1016; - optional int32 vorkommastelle = 1017; - optional int32 nachkommastelle = 1018; + optional string ZaehlwerkId = 3; + optional string Bezeichnung = 4; + optional Energierichtung Richtung = 5 [default = AUSSP]; + optional string ObisKennzahl = 6; + optional .bcl.Decimal Wandlerfaktor = 7 [default = 0]; + optional Mengeneinheit Einheit = 8 [default = 0]; + optional string Kennzahl = 1009; + optional Schwachlastfaehig Schwachlastfaehig = 1010; + repeated Verwendungszweck Verwendungszwecke = 1011; + optional Verbrauchsart Verbrauchsart = 1012; + optional Unterbrechbarkeit Unterbrechbarkeit = 1013; + optional Waermenutzung Waermenutzung = 1014; + optional Konzessionsabgabe Konzessionsabgabe = 1015; + optional bool Steuerbefreit = 1016; + optional int32 Vorkommastelle = 1017; + optional int32 Nachkommastelle = 1018; } enum Zeitreihentyp { EGS = 0; diff --git a/protobuf-files/BO4E.BO.Messlokation.proto b/protobuf-files/BO4E.BO.Messlokation.proto index 4573711c..d3f1a71a 100644 --- a/protobuf-files/BO4E.BO.Messlokation.proto +++ b/protobuf-files/BO4E.BO.Messlokation.proto @@ -13,14 +13,14 @@ enum AbgabeArt { TSS = 8; } message Adresse { - optional string postleitzahl = 3; - optional string ort = 4; - optional string strasse = 5; - optional string hausnummer = 6; - optional string postfach = 7; - optional string adresszusatz = 8; - optional string coErgaenzung = 9; - optional Landescode landescode = 10; + optional string Postleitzahl = 3; + optional string Ort = 4; + optional string Strasse = 5; + optional string Hausnummer = 6; + optional string Postfach = 7; + optional string Adresszusatz = 8; + optional string CoErgaenzung = 9; + optional Landescode Landescode = 10; } enum Anrede { HERR = 0; @@ -39,8 +39,8 @@ enum Bilanzierungsmethode { IMS = 5; } message Dienstleistung { - optional Dienstleistungstyp dienstleistungstyp = 3 [default = DATENBEREITSTELLUNG_TAEGLICH]; - optional string bezeichnung = 4; + optional Dienstleistungstyp Dienstleistungstyp = 3 [default = DATENBEREITSTELLUNG_TAEGLICH]; + optional string Bezeichnung = 4; } enum Dienstleistungstyp { DATENBEREITSTELLUNG_TAEGLICH = 0; @@ -99,13 +99,13 @@ enum Gasqualitaet { LGAS = 2; } message Geokoordinaten { - optional .bcl.Decimal breitengrad = 3 [default = 0]; - optional .bcl.Decimal laengengrad = 4 [default = 0]; + optional .bcl.Decimal Breitengrad = 3 [default = 0]; + optional .bcl.Decimal Laengengrad = 4 [default = 0]; } message Geraeteeigenschaften { - optional Geraetetyp geraetetyp = 3 [default = WECHSELSTROMZAEHLER]; - optional Geraetemerkmal geraetemerkmal = 4; - map parameter = 1005; + optional Geraetetyp Geraetetyp = 3 [default = WECHSELSTROMZAEHLER]; + optional Geraetemerkmal Geraetemerkmal = 4; + map Parameter = 1005; } enum Geraetemerkmal { EINTARIF = 0; @@ -194,20 +194,20 @@ enum Geraetetyp { } message Geschaeftspartner { optional Anrede anrede = 4; - optional string name1 = 6; - optional string name2 = 7; - optional string name3 = 8; - optional bool gewerbekennzeichnung = 9 [default = false]; - optional string hrnummer = 10; - optional string amtsgericht = 11; - repeated Kontaktart kontaktweg = 12; - optional string umsatzsteuerId = 13; - optional string glaeubigerId = 14; - optional string eMailAdresse = 15; - optional string website = 16; - repeated Geschaeftspartnerrolle geschaeftspartnerrolle = 17; - optional Adresse partneradresse = 18; - optional string title = 1001; + optional string Name1 = 6; + optional string Name2 = 7; + optional string Name3 = 8; + optional bool Gewerbekennzeichnung = 9 [default = false]; + optional string Hrnummer = 10; + optional string Amtsgericht = 11; + repeated Kontaktart Kontaktweg = 12; + optional string UmsatzsteuerId = 13; + optional string GlaeubigerId = 14; + optional string EMailAdresse = 15; + optional string Website = 16; + repeated Geschaeftspartnerrolle Geschaeftspartnerrolle = 17; + optional Adresse Partneradresse = 18; + optional string Title = 1001; } enum Geschaeftspartnerrolle { LIEFERANT = 0; @@ -217,15 +217,15 @@ enum Geschaeftspartnerrolle { MARKTPARTNER = 4; } message Hardware { - optional Geraetetyp geraetetyp = 3 [default = WECHSELSTROMZAEHLER]; - optional string bezeichnung = 4; - optional Geraeteeigenschaften geraeteeigenschaften = 1005; - optional string geraetenummer = 1006; - optional string geraetereferenz = 1007; + optional Geraetetyp Geraetetyp = 3 [default = WECHSELSTROMZAEHLER]; + optional string Bezeichnung = 4; + optional Geraeteeigenschaften Geraeteeigenschaften = 1005; + optional string Geraetenummer = 1006; + optional string Geraetereferenz = 1007; } message Katasteradresse { - optional string gemarkung_flur = 3; - optional string flurstueck = 4; + optional string Gemarkung_flur = 3; + optional string Flurstueck = 4; } enum Kontaktart { ANSCHREIBEN = 0; @@ -235,9 +235,9 @@ enum Kontaktart { SMS = 4; } message Konzessionsabgabe { - optional AbgabeArt satz = 3 [default = KAS]; - optional .bcl.Decimal kosten = 4 [default = 0]; - optional string kategorie = 5; + optional AbgabeArt Satz = 3 [default = KAS]; + optional .bcl.Decimal Kosten = 4 [default = 0]; + optional string Kategorie = 5; } enum Landescode { AC = 0; @@ -509,8 +509,8 @@ enum Landescode { ZW = 266; } message Marktrolle { - optional string rollencodenummer = 3; - optional string code = 4; + optional string Rollencodenummer = 3; + optional string Code = 4; optional Marktrolle marktrolle = 5 [default = NB]; } enum Marktrolle { @@ -547,24 +547,24 @@ enum Mengeneinheit { MWH = 2000000; } message Messlokation { - optional string messlokationsId = 4 [default = "|null|"]; - optional Sparte sparte = 5 [default = STROM]; - optional Netzebene netzebeneMessung = 6; - optional string messgebietNr = 7; - optional string grundzustaendigerMSBCodeNr = 8; - optional string grundzustaendigerMSBIMCodeNr = 9; - optional string grundzustaendigerMDLCodeNr = 10; - optional Adresse messadresse = 11; - optional Geokoordinaten geoadresse = 12; - optional Katasteradresse katasterinformation = 13; - repeated Hardware geraete = 14; - repeated Dienstleistung messdienstleistung = 15; - repeated Zaehler messlokationszaehler = 16; - optional Bilanzierungsmethode bilanzierungsmethode = 17; - optional bool abrechnungmessstellenbetriebnna = 1018; - repeated Marktrolle marktrollen = 1019; - optional Gasqualitaet gasqualitaet = 1020; - optional .bcl.Decimal verlustfaktor = 1021; + optional string MesslokationsId = 4 [default = "|null|"]; + optional Sparte Sparte = 5 [default = STROM]; + optional Netzebene NetzebeneMessung = 6; + optional string MessgebietNr = 7; + optional string GrundzustaendigerMSBCodeNr = 8; + optional string GrundzustaendigerMSBIMCodeNr = 9; + optional string GrundzustaendigerMDLCodeNr = 10; + optional Adresse Messadresse = 11; + optional Geokoordinaten Geoadresse = 12; + optional Katasteradresse Katasterinformation = 13; + repeated Hardware Geraete = 14; + repeated Dienstleistung Messdienstleistung = 15; + repeated Zaehler Messlokationszaehler = 16; + optional Bilanzierungsmethode Bilanzierungsmethode = 17; + optional bool Abrechnungmessstellenbetriebnna = 1018; + repeated Marktrolle Marktrollen = 1019; + optional Gasqualitaet Gasqualitaet = 1020; + optional .bcl.Decimal Verlustfaktor = 1021; } enum Messwerterfassung { FERNAUSLESBAR = 0; @@ -624,19 +624,19 @@ enum Waermenutzung { DIREKTHEIZUNG = 2; } message Zaehler { - optional string zaehlernummer = 4; - optional Sparte sparte = 5 [default = STROM]; - optional Zaehlerauspraegung zaehlerauspraegung = 6 [default = EINRICHTUNGSZAEHLER]; - optional Zaehlertyp zaehlertyp = 7 [default = DREHSTROMZAEHLER]; - optional Tarifart tarifart = 8 [default = EINTARIF]; + optional string Zaehlernummer = 4; + optional Sparte Sparte = 5 [default = STROM]; + optional Zaehlerauspraegung Zaehlerauspraegung = 6 [default = EINRICHTUNGSZAEHLER]; + optional Zaehlertyp Zaehlertyp = 7 [default = DREHSTROMZAEHLER]; + optional Tarifart Tarifart = 8 [default = EINTARIF]; optional .bcl.Decimal zaehlerkonstante = 9 [default = 0]; - optional .bcl.DateTime eichungBis = 10; - optional .bcl.DateTime letzteEichung = 11; - repeated Zaehlwerk zaehlwerke = 12; - optional Geschaeftspartner zaehlerhersteller = 13; - optional string gateway = 1014; - optional Fernschaltung fernschaltung = 1015; - optional Messwerterfassung messwerterfassung = 1016; + optional .bcl.DateTime EichungBis = 10; + optional .bcl.DateTime LetzteEichung = 11; + repeated Zaehlwerk Zaehlwerke = 12; + optional Geschaeftspartner Zaehlerhersteller = 13; + optional string Gateway = 1014; + optional Fernschaltung Fernschaltung = 1015; + optional Messwerterfassung Messwerterfassung = 1016; } enum Zaehlerauspraegung { EINRICHTUNGSZAEHLER = 0; @@ -654,20 +654,20 @@ enum Zaehlertyp { WECHSELSTROMZAEHLER = 8; } message Zaehlwerk { - optional string zaehlwerkId = 3; - optional string bezeichnung = 4; - optional Energierichtung richtung = 5 [default = AUSSP]; - optional string obisKennzahl = 6; - optional .bcl.Decimal wandlerfaktor = 7 [default = 0]; - optional Mengeneinheit einheit = 8 [default = 0]; - optional string kennzahl = 1009; - optional Schwachlastfaehig schwachlastfaehig = 1010; - repeated Verwendungszweck verwendungszwecke = 1011; - optional Verbrauchsart verbrauchsart = 1012; - optional Unterbrechbarkeit unterbrechbarkeit = 1013; - optional Waermenutzung waermenutzung = 1014; - optional Konzessionsabgabe konzessionsabgabe = 1015; - optional bool steuerbefreit = 1016; - optional int32 vorkommastelle = 1017; - optional int32 nachkommastelle = 1018; + optional string ZaehlwerkId = 3; + optional string Bezeichnung = 4; + optional Energierichtung Richtung = 5 [default = AUSSP]; + optional string ObisKennzahl = 6; + optional .bcl.Decimal Wandlerfaktor = 7 [default = 0]; + optional Mengeneinheit Einheit = 8 [default = 0]; + optional string Kennzahl = 1009; + optional Schwachlastfaehig Schwachlastfaehig = 1010; + repeated Verwendungszweck Verwendungszwecke = 1011; + optional Verbrauchsart Verbrauchsart = 1012; + optional Unterbrechbarkeit Unterbrechbarkeit = 1013; + optional Waermenutzung Waermenutzung = 1014; + optional Konzessionsabgabe Konzessionsabgabe = 1015; + optional bool Steuerbefreit = 1016; + optional int32 Vorkommastelle = 1017; + optional int32 Nachkommastelle = 1018; } diff --git a/protobuf-files/BO4E.BO.Preisblatt.proto b/protobuf-files/BO4E.BO.Preisblatt.proto index 8ed452e8..612cabb5 100644 --- a/protobuf-files/BO4E.BO.Preisblatt.proto +++ b/protobuf-files/BO4E.BO.Preisblatt.proto @@ -127,35 +127,35 @@ enum Mengeneinheit { MWH = 2000000; } message PositionsAufAbschlag { - optional string bezeichnung = 3; - optional string beschreibung = 4; - optional AufAbschlagstyp aufAbschlagstyp = 5 [default = RELATIV]; - optional .bcl.Decimal aufAbschlagswert = 6 [default = 0]; - optional Waehrungseinheit aufAbschlagswaehrung = 7 [default = EUR]; + optional string Bezeichnung = 3; + optional string Beschreibung = 4; + optional AufAbschlagstyp AufAbschlagstyp = 5 [default = RELATIV]; + optional .bcl.Decimal AufAbschlagswert = 6 [default = 0]; + optional Waehrungseinheit AufAbschlagswaehrung = 7 [default = EUR]; } message Preisblatt { - optional string bezeichnung = 4; - optional Zeitraum gueltigkeit = 5; - repeated Preisposition preispositionen = 6; + optional string Bezeichnung = 4; + optional Zeitraum Gueltigkeit = 5; + repeated Preisposition Preispositionen = 6; } message Preisposition { - optional Kalkulationsmethode berechnungsmethode = 3 [default = KEINE]; - optional Leistungstyp leistungstyp = 4 [default = ARBEITSPREIS_WIRKARBEIT]; - optional string leistungsbezeichung = 5; - optional Waehrungseinheit preiseinheit = 6 [default = EUR]; - optional Mengeneinheit bezugsgroesse = 7 [default = 0]; - optional Zeiteinheit zeitbasis = 8; - optional Tarifzeit tarifzeit = 9; - optional BDEWArtikelnummer bdewArtikelnummer = 10; - optional Bemessungsgroesse zonungsgroesse = 11; - optional PositionsAufAbschlag zu_abschlaege = 12; - repeated Preisstaffel preisstaffeln = 13; + optional Kalkulationsmethode Berechnungsmethode = 3 [default = KEINE]; + optional Leistungstyp Leistungstyp = 4 [default = ARBEITSPREIS_WIRKARBEIT]; + optional string Leistungsbezeichung = 5; + optional Waehrungseinheit Preiseinheit = 6 [default = EUR]; + optional Mengeneinheit Bezugsgroesse = 7 [default = 0]; + optional Zeiteinheit Zeitbasis = 8; + optional Tarifzeit Tarifzeit = 9; + optional BDEWArtikelnummer BdewArtikelnummer = 10; + optional Bemessungsgroesse Zonungsgroesse = 11; + optional PositionsAufAbschlag Zu_abschlaege = 12; + repeated Preisstaffel Preisstaffeln = 13; } message Preisstaffel { - optional .bcl.Decimal einheitspreis = 3 [default = 0]; - optional .bcl.Decimal staffelgrenzeVon = 4 [default = 0]; - optional .bcl.Decimal staffelgrenzeBis = 5 [default = 0]; - optional Sigmoidparameter sigmoidparameter = 6; + optional .bcl.Decimal Einheitspreis = 3 [default = 0]; + optional .bcl.Decimal StaffelgrenzeVon = 4 [default = 0]; + optional .bcl.Decimal StaffelgrenzeBis = 5 [default = 0]; + optional Sigmoidparameter Sigmoidparameter = 6; } message Sigmoidparameter { optional .bcl.Decimal A = 3 [default = 0]; @@ -185,8 +185,8 @@ enum Zeiteinheit { JAHR = 9; } message Zeitraum { - optional Zeiteinheit einheit = 3; - optional .bcl.Decimal dauer = 4; - optional .bcl.DateTime startdatum = 5; - optional .bcl.DateTime enddatum = 6; + optional Zeiteinheit Einheit = 3; + optional .bcl.Decimal Dauer = 4; + optional .bcl.DateTime Startdatum = 5; + optional .bcl.DateTime Enddatum = 6; } diff --git a/protobuf-files/BO4E.BO.Rechnung.proto b/protobuf-files/BO4E.BO.Rechnung.proto index 4855c838..2edacb2b 100644 --- a/protobuf-files/BO4E.BO.Rechnung.proto +++ b/protobuf-files/BO4E.BO.Rechnung.proto @@ -2,14 +2,14 @@ import "protobuf-net/bcl.proto"; // schema for protobuf-net's handling of core .NET types message Adresse { - optional string postleitzahl = 3; - optional string ort = 4; - optional string strasse = 5; - optional string hausnummer = 6; - optional string postfach = 7; - optional string adresszusatz = 8; - optional string coErgaenzung = 9; - optional Landescode landescode = 10; + optional string Postleitzahl = 3; + optional string Ort = 4; + optional string Strasse = 5; + optional string Hausnummer = 6; + optional string Postfach = 7; + optional string Adresszusatz = 8; + optional string CoErgaenzung = 9; + optional Landescode Landescode = 10; } enum Anrede { HERR = 0; @@ -67,25 +67,25 @@ enum BDEWArtikelnummer { MSB_INKL_MESSUNG = 44; } message Betrag { - optional .bcl.Decimal wert = 3 [default = 0]; - optional Waehrungscode waehrung = 4 [default = AFN]; + optional .bcl.Decimal Wert = 3 [default = 0]; + optional Waehrungscode Waehrung = 4 [default = AFN]; } message Geschaeftspartner { optional Anrede anrede = 4; - optional string name1 = 6; - optional string name2 = 7; - optional string name3 = 8; - optional bool gewerbekennzeichnung = 9 [default = false]; - optional string hrnummer = 10; - optional string amtsgericht = 11; - repeated Kontaktart kontaktweg = 12; - optional string umsatzsteuerId = 13; - optional string glaeubigerId = 14; - optional string eMailAdresse = 15; - optional string website = 16; - repeated Geschaeftspartnerrolle geschaeftspartnerrolle = 17; - optional Adresse partneradresse = 18; - optional string title = 1001; + optional string Name1 = 6; + optional string Name2 = 7; + optional string Name3 = 8; + optional bool Gewerbekennzeichnung = 9 [default = false]; + optional string Hrnummer = 10; + optional string Amtsgericht = 11; + repeated Kontaktart Kontaktweg = 12; + optional string UmsatzsteuerId = 13; + optional string GlaeubigerId = 14; + optional string EMailAdresse = 15; + optional string Website = 16; + repeated Geschaeftspartnerrolle Geschaeftspartnerrolle = 17; + optional Adresse Partneradresse = 18; + optional string Title = 1001; } enum Geschaeftspartnerrolle { LIEFERANT = 0; @@ -371,8 +371,8 @@ enum Landescode { ZW = 266; } message Menge { - optional .bcl.Decimal wert = 3 [default = 0]; - optional Mengeneinheit einheit = 4 [default = 0]; + optional .bcl.Decimal Wert = 3 [default = 0]; + optional Mengeneinheit Einheit = 4 [default = 0]; } enum Mengeneinheit { WH = 2; @@ -392,53 +392,53 @@ enum Mengeneinheit { MWH = 2000000; } message Preis { - optional .bcl.Decimal wert = 3 [default = 0]; - optional Waehrungseinheit einheit = 4 [default = EUR]; - optional Mengeneinheit bezugswert = 5 [default = 0]; - optional Preisstatus status = 6; + optional .bcl.Decimal Wert = 3 [default = 0]; + optional Waehrungseinheit Einheit = 4 [default = EUR]; + optional Mengeneinheit Bezugswert = 5 [default = 0]; + optional Preisstatus Status = 6; } enum Preisstatus { VORLAEUFIG = 0; ENDGUELTIG = 1; } message Rechnung { - optional string rechnungstitel = 4; - optional Rechnungsstatus rechnungsstatus = 5; - optional bool storno = 6 [default = false]; - optional string rechnungsnummer = 7; - optional .bcl.DateTime rechnungsdatum = 8; - optional .bcl.DateTime faelligkeitsdatum = 9; - optional Rechnungstyp rechnungsstyp = 10 [default = ABSCHLAGSRECHNUNG]; - optional string originalRechnungsnummer = 11; - optional Zeitraum rechnungsperiode = 12; - optional Geschaeftspartner rechnungsersteller = 13; - optional Geschaeftspartner rechnungsempfaenger = 14; - optional Betrag gesamtnetto = 15; - optional Betrag gesamtsteuer = 16; - optional Betrag gesamtbrutto = 17; - optional Betrag vorausgezahlt = 18; + optional string Rechnungstitel = 4; + optional Rechnungsstatus Rechnungsstatus = 5; + optional bool Storno = 6 [default = false]; + optional string Rechnungsnummer = 7; + optional .bcl.DateTime Rechnungsdatum = 8; + optional .bcl.DateTime Faelligkeitsdatum = 9; + optional Rechnungstyp Rechnungsstyp = 10 [default = ABSCHLAGSRECHNUNG]; + optional string OriginalRechnungsnummer = 11; + optional Zeitraum Rechnungsperiode = 12; + optional Geschaeftspartner Rechnungsersteller = 13; + optional Geschaeftspartner Rechnungsempfaenger = 14; + optional Betrag Gesamtnetto = 15; + optional Betrag Gesamtsteuer = 16; + optional Betrag Gesamtbrutto = 17; + optional Betrag Vorausgezahlt = 18; optional Betrag rabattBrutto = 19; - optional Betrag zuzahlen = 20; - repeated Steuerbetrag steuerbetraege = 21; - repeated Rechnungsposition rechnungspositionen = 22; + optional Betrag Zuzahlen = 20; + repeated Steuerbetrag Steuerbetraege = 21; + repeated Rechnungsposition Rechnungspositionen = 22; } message Rechnungsposition { - optional int32 positionsnummer = 3 [default = 0]; - optional .bcl.DateTime lieferungVon = 4; - optional .bcl.DateTime lieferungBis = 5; - optional string positionstext = 6; - optional Mengeneinheit zeiteinheit = 7; - optional BDEWArtikelnummer artikelnummer = 8; - optional string lokationsId = 9; - optional Menge positionsMenge = 10; - optional Menge zeitbezogeneMenge = 11; - optional Preis einzelpreis = 12; - optional Betrag teilsummeNetto = 13; - optional Betrag teilrabattNetto = 14; - optional Steuerbetrag teilsummeSteuer = 15; - optional string vertragskontoId = 16; - optional string vertragsId = 1017; - optional RechnungspositionsStatus status = 1018; + optional int32 Positionsnummer = 3 [default = 0]; + optional .bcl.DateTime LieferungVon = 4; + optional .bcl.DateTime LieferungBis = 5; + optional string Positionstext = 6; + optional Mengeneinheit Zeiteinheit = 7; + optional BDEWArtikelnummer Artikelnummer = 8; + optional string LokationsId = 9; + optional Menge PositionsMenge = 10; + optional Menge ZeitbezogeneMenge = 11; + optional Preis Einzelpreis = 12; + optional Betrag TeilsummeNetto = 13; + optional Betrag TeilrabattNetto = 14; + optional Steuerbetrag TeilsummeSteuer = 15; + optional string VertragskontoId = 16; + optional string VertragsId = 1017; + optional RechnungspositionsStatus Status = 1018; } enum RechnungspositionsStatus { ROH = 0; @@ -464,10 +464,10 @@ enum Rechnungstyp { MEHRMINDERMENGENRECHNUNG = 7; } message Steuerbetrag { - optional Steuerkennzeichen steuerkennzeichen = 3 [default = UST_19]; - optional .bcl.Decimal basiswert = 4 [default = 0]; - optional .bcl.Decimal steuerwert = 5 [default = 0]; - optional Waehrungscode waehrung = 6 [default = AFN]; + optional Steuerkennzeichen Steuerkennzeichen = 3 [default = UST_19]; + optional .bcl.Decimal Basiswert = 4 [default = 0]; + optional .bcl.Decimal Steuerwert = 5 [default = 0]; + optional Waehrungscode Waehrung = 6 [default = AFN]; } enum Steuerkennzeichen { UST_19 = 0; @@ -677,8 +677,8 @@ enum Zeiteinheit { JAHR = 9; } message Zeitraum { - optional Zeiteinheit einheit = 3; - optional .bcl.Decimal dauer = 4; - optional .bcl.DateTime startdatum = 5; - optional .bcl.DateTime enddatum = 6; + optional Zeiteinheit Einheit = 3; + optional .bcl.Decimal Dauer = 4; + optional .bcl.DateTime Startdatum = 5; + optional .bcl.DateTime Enddatum = 6; } diff --git a/protobuf-files/BO4E.BO.Region.proto b/protobuf-files/BO4E.BO.Region.proto index a337c9e1..c9b3eb05 100644 --- a/protobuf-files/BO4E.BO.Region.proto +++ b/protobuf-files/BO4E.BO.Region.proto @@ -9,16 +9,16 @@ enum Mengenoperator { GLEICH = 2; } message Region { - optional string bezeichnung = 4; - repeated Regionskriterium positivListe = 5; - repeated Regionskriterium negativListe = 6; + optional string Bezeichnung = 4; + repeated Regionskriterium PositivListe = 5; + repeated Regionskriterium NegativListe = 6; } message Regionskriterium { - optional Gueltigkeitstyp gueltigkeitstyp = 3 [default = NICHT_IN]; - optional Sparte sparte = 4; - optional Mengenoperator mengenoperator = 5 [default = KLEINER_ALS]; - optional Regionskriteriumtyp regionskriteriumtyp = 6 [default = BUNDESLANDKENNZIFFER]; - optional string wert = 7; + optional Gueltigkeitstyp Gueltigkeitstyp = 3 [default = NICHT_IN]; + optional Sparte Sparte = 4; + optional Mengenoperator Mengenoperator = 5 [default = KLEINER_ALS]; + optional Regionskriteriumtyp Regionskriteriumtyp = 6 [default = BUNDESLANDKENNZIFFER]; + optional string Wert = 7; } enum Regionskriteriumtyp { BUNDESLANDKENNZIFFER = 0; diff --git a/protobuf-files/BO4E.BO.Vertrag.proto b/protobuf-files/BO4E.BO.Vertrag.proto index 9b3d7f82..a070f3a8 100644 --- a/protobuf-files/BO4E.BO.Vertrag.proto +++ b/protobuf-files/BO4E.BO.Vertrag.proto @@ -2,14 +2,14 @@ import "protobuf-net/bcl.proto"; // schema for protobuf-net's handling of core .NET types message Adresse { - optional string postleitzahl = 3; - optional string ort = 4; - optional string strasse = 5; - optional string hausnummer = 6; - optional string postfach = 7; - optional string adresszusatz = 8; - optional string coErgaenzung = 9; - optional Landescode landescode = 10; + optional string Postleitzahl = 3; + optional string Ort = 4; + optional string Strasse = 5; + optional string Hausnummer = 6; + optional string Postfach = 7; + optional string Adresszusatz = 8; + optional string CoErgaenzung = 9; + optional Landescode Landescode = 10; } enum Anrede { HERR = 0; @@ -21,20 +21,20 @@ enum Anrede { } message Geschaeftspartner { optional Anrede anrede = 4; - optional string name1 = 6; - optional string name2 = 7; - optional string name3 = 8; - optional bool gewerbekennzeichnung = 9 [default = false]; - optional string hrnummer = 10; - optional string amtsgericht = 11; - repeated Kontaktart kontaktweg = 12; - optional string umsatzsteuerId = 13; - optional string glaeubigerId = 14; - optional string eMailAdresse = 15; - optional string website = 16; - repeated Geschaeftspartnerrolle geschaeftspartnerrolle = 17; - optional Adresse partneradresse = 18; - optional string title = 1001; + optional string Name1 = 6; + optional string Name2 = 7; + optional string Name3 = 8; + optional bool Gewerbekennzeichnung = 9 [default = false]; + optional string Hrnummer = 10; + optional string Amtsgericht = 11; + repeated Kontaktart Kontaktweg = 12; + optional string UmsatzsteuerId = 13; + optional string GlaeubigerId = 14; + optional string EMailAdresse = 15; + optional string Website = 16; + repeated Geschaeftspartnerrolle Geschaeftspartnerrolle = 17; + optional Adresse Partneradresse = 18; + optional string Title = 1001; } enum Geschaeftspartnerrolle { LIEFERANT = 0; @@ -320,8 +320,8 @@ enum Landescode { ZW = 266; } message Menge { - optional .bcl.Decimal wert = 3 [default = 0]; - optional Mengeneinheit einheit = 4 [default = 0]; + optional .bcl.Decimal Wert = 3 [default = 0]; + optional Mengeneinheit Einheit = 4 [default = 0]; } enum Mengeneinheit { WH = 2; @@ -365,26 +365,26 @@ enum Sparte { ABWASSER = 5; } message Unterschrift { - optional string ort = 3; - optional .bcl.DateTime datum = 4; - optional string name = 5; + optional string Ort = 3; + optional .bcl.DateTime Datum = 4; + optional string Name = 5; } message Vertrag { - optional string vertragsnummer = 4; - optional string beschreibung = 5; - optional Vertragsart vertragsart = 6 [default = ENERGIELIEFERVERTRAG]; - optional Vertragstatus vertragstatus = 7 [default = IN_ARBEIT]; - optional Sparte sparte = 8 [default = STROM]; - optional .bcl.DateTime vertragsbeginn = 9; - optional .bcl.DateTime vertragsende = 10; - optional Geschaeftspartner vertragspartner1 = 11; - optional Geschaeftspartner vertragspartner2 = 12; - repeated Unterschrift unterzeichnervp1 = 13; - repeated Unterschrift unterzeichnervp2 = 14; - optional Vertragskonditionen vertragskonditionen = 15; - repeated Vertragsteil vertragsteile = 16; - optional .bcl.Decimal gemeinderabatt = 1017; - optional Geschaeftspartner korrespondenzpartner = 1018; + optional string Vertragsnummer = 4; + optional string Beschreibung = 5; + optional Vertragsart Vertragsart = 6 [default = ENERGIELIEFERVERTRAG]; + optional Vertragstatus Vertragstatus = 7 [default = IN_ARBEIT]; + optional Sparte Sparte = 8 [default = STROM]; + optional .bcl.DateTime Vertragsbeginn = 9; + optional .bcl.DateTime Vertragsende = 10; + optional Geschaeftspartner Vertragspartner1 = 11; + optional Geschaeftspartner Vertragspartner2 = 12; + repeated Unterschrift Unterzeichnervp1 = 13; + repeated Unterschrift Unterzeichnervp2 = 14; + optional Vertragskonditionen Vertragskonditionen = 15; + repeated Vertragsteil Vertragsteile = 16; + optional .bcl.Decimal Gemeinderabatt = 1017; + optional Geschaeftspartner Korrespondenzpartner = 1018; } enum Vertragsart { ENERGIELIEFERVERTRAG = 0; @@ -394,22 +394,22 @@ enum Vertragsart { BUENDELVERTRAG = 4; } message Vertragskonditionen { - optional string beschreibung = 3; - optional int32 anzahlAbschlaege = 4; - optional Zeitraum vertragslaufzeit = 5; - optional Zeitraum kuendigungsfrist = 6; - optional Zeitraum vertragsverlaengerung = 7; - optional Zeitraum abschlagszyklus = 8; - optional .bcl.DateTime startAbrechnungsjahr = 1009; - optional Zeitraum geplanteTurnusablesung = 1010; - optional int32 turnusablesungIntervall = 1011; - optional Zeitraum netznutzungsabrechnung = 1012; - optional int32 netznutzungsabrechnungIntervall = 1013; - optional bool haushaltskunde = 1014; - optional NetznutzungsVertrag netznutzungsvertrag = 1015; - optional Netznutzungszahler netznutzungszahler = 1016; - optional Netznutzungsabrechnungsvariante netznutzungsabrechnungsvariante = 1017; - optional Netznutzungsabrechnungsgrundlage netznutzungsabrechnungsgrundlage = 1018; + optional string Beschreibung = 3; + optional int32 AnzahlAbschlaege = 4; + optional Zeitraum Vertragslaufzeit = 5; + optional Zeitraum Kuendigungsfrist = 6; + optional Zeitraum Vertragsverlaengerung = 7; + optional Zeitraum Abschlagszyklus = 8; + optional .bcl.DateTime StartAbrechnungsjahr = 1009; + optional Zeitraum GeplanteTurnusablesung = 1010; + optional int32 TurnusablesungIntervall = 1011; + optional Zeitraum Netznutzungsabrechnung = 1012; + optional int32 NetznutzungsabrechnungIntervall = 1013; + optional bool Haushaltskunde = 1014; + optional NetznutzungsVertrag Netznutzungsvertrag = 1015; + optional Netznutzungszahler Netznutzungszahler = 1016; + optional Netznutzungsabrechnungsvariante Netznutzungsabrechnungsvariante = 1017; + optional Netznutzungsabrechnungsgrundlage Netznutzungsabrechnungsgrundlage = 1018; } enum Vertragstatus { IN_ARBEIT = 0; @@ -423,15 +423,15 @@ enum Vertragstatus { BEENDET = 8; } message Vertragsteil { - optional .bcl.DateTime vertragsteilbeginn = 3; - optional .bcl.DateTime vertragsteilende = 4; - optional string lokation = 5; - optional Menge vertraglichFixierteMenge = 6; - optional Menge minimaleAbnahmemenge = 7; - optional Menge maximaleAbnahmemenge = 8; - optional Menge jahresverbrauchsprognose = 1009; - optional Menge kundenwert = 1010; - optional string verbrauchsaufteilung = 1011; + optional .bcl.DateTime Vertragsteilbeginn = 3; + optional .bcl.DateTime Vertragsteilende = 4; + optional string Lokation = 5; + optional Menge VertraglichFixierteMenge = 6; + optional Menge MinimaleAbnahmemenge = 7; + optional Menge MaximaleAbnahmemenge = 8; + optional Menge Jahresverbrauchsprognose = 1009; + optional Menge Kundenwert = 1010; + optional string Verbrauchsaufteilung = 1011; } enum Zeiteinheit { SEKUNDE = 0; @@ -446,8 +446,8 @@ enum Zeiteinheit { JAHR = 9; } message Zeitraum { - optional Zeiteinheit einheit = 3; - optional .bcl.Decimal dauer = 4; - optional .bcl.DateTime startdatum = 5; - optional .bcl.DateTime enddatum = 6; + optional Zeiteinheit Einheit = 3; + optional .bcl.Decimal Dauer = 4; + optional .bcl.DateTime Startdatum = 5; + optional .bcl.DateTime Enddatum = 6; } diff --git a/protobuf-files/BO4E.BO.Zaehler.proto b/protobuf-files/BO4E.BO.Zaehler.proto index ceafdc1d..f602525f 100644 --- a/protobuf-files/BO4E.BO.Zaehler.proto +++ b/protobuf-files/BO4E.BO.Zaehler.proto @@ -13,14 +13,14 @@ enum AbgabeArt { TSS = 8; } message Adresse { - optional string postleitzahl = 3; - optional string ort = 4; - optional string strasse = 5; - optional string hausnummer = 6; - optional string postfach = 7; - optional string adresszusatz = 8; - optional string coErgaenzung = 9; - optional Landescode landescode = 10; + optional string Postleitzahl = 3; + optional string Ort = 4; + optional string Strasse = 5; + optional string Hausnummer = 6; + optional string Postfach = 7; + optional string Adresszusatz = 8; + optional string CoErgaenzung = 9; + optional Landescode Landescode = 10; } enum Anrede { HERR = 0; @@ -40,20 +40,20 @@ enum Fernschaltung { } message Geschaeftspartner { optional Anrede anrede = 4; - optional string name1 = 6; - optional string name2 = 7; - optional string name3 = 8; - optional bool gewerbekennzeichnung = 9 [default = false]; - optional string hrnummer = 10; - optional string amtsgericht = 11; - repeated Kontaktart kontaktweg = 12; - optional string umsatzsteuerId = 13; - optional string glaeubigerId = 14; - optional string eMailAdresse = 15; - optional string website = 16; - repeated Geschaeftspartnerrolle geschaeftspartnerrolle = 17; - optional Adresse partneradresse = 18; - optional string title = 1001; + optional string Name1 = 6; + optional string Name2 = 7; + optional string Name3 = 8; + optional bool Gewerbekennzeichnung = 9 [default = false]; + optional string Hrnummer = 10; + optional string Amtsgericht = 11; + repeated Kontaktart Kontaktweg = 12; + optional string UmsatzsteuerId = 13; + optional string GlaeubigerId = 14; + optional string EMailAdresse = 15; + optional string Website = 16; + repeated Geschaeftspartnerrolle Geschaeftspartnerrolle = 17; + optional Adresse Partneradresse = 18; + optional string Title = 1001; } enum Geschaeftspartnerrolle { LIEFERANT = 0; @@ -70,9 +70,9 @@ enum Kontaktart { SMS = 4; } message Konzessionsabgabe { - optional AbgabeArt satz = 3 [default = KAS]; - optional .bcl.Decimal kosten = 4 [default = 0]; - optional string kategorie = 5; + optional AbgabeArt Satz = 3 [default = KAS]; + optional .bcl.Decimal Kosten = 4 [default = 0]; + optional string Kategorie = 5; } enum Landescode { AC = 0; @@ -406,19 +406,19 @@ enum Waermenutzung { DIREKTHEIZUNG = 2; } message Zaehler { - optional string zaehlernummer = 4; - optional Sparte sparte = 5 [default = STROM]; - optional Zaehlerauspraegung zaehlerauspraegung = 6 [default = EINRICHTUNGSZAEHLER]; - optional Zaehlertyp zaehlertyp = 7 [default = DREHSTROMZAEHLER]; - optional Tarifart tarifart = 8 [default = EINTARIF]; + optional string Zaehlernummer = 4; + optional Sparte Sparte = 5 [default = STROM]; + optional Zaehlerauspraegung Zaehlerauspraegung = 6 [default = EINRICHTUNGSZAEHLER]; + optional Zaehlertyp Zaehlertyp = 7 [default = DREHSTROMZAEHLER]; + optional Tarifart Tarifart = 8 [default = EINTARIF]; optional .bcl.Decimal zaehlerkonstante = 9 [default = 0]; - optional .bcl.DateTime eichungBis = 10; - optional .bcl.DateTime letzteEichung = 11; - repeated Zaehlwerk zaehlwerke = 12; - optional Geschaeftspartner zaehlerhersteller = 13; - optional string gateway = 1014; - optional Fernschaltung fernschaltung = 1015; - optional Messwerterfassung messwerterfassung = 1016; + optional .bcl.DateTime EichungBis = 10; + optional .bcl.DateTime LetzteEichung = 11; + repeated Zaehlwerk Zaehlwerke = 12; + optional Geschaeftspartner Zaehlerhersteller = 13; + optional string Gateway = 1014; + optional Fernschaltung Fernschaltung = 1015; + optional Messwerterfassung Messwerterfassung = 1016; } enum Zaehlerauspraegung { EINRICHTUNGSZAEHLER = 0; @@ -436,20 +436,20 @@ enum Zaehlertyp { WECHSELSTROMZAEHLER = 8; } message Zaehlwerk { - optional string zaehlwerkId = 3; - optional string bezeichnung = 4; - optional Energierichtung richtung = 5 [default = AUSSP]; - optional string obisKennzahl = 6; - optional .bcl.Decimal wandlerfaktor = 7 [default = 0]; - optional Mengeneinheit einheit = 8 [default = 0]; - optional string kennzahl = 1009; - optional Schwachlastfaehig schwachlastfaehig = 1010; - repeated Verwendungszweck verwendungszwecke = 1011; - optional Verbrauchsart verbrauchsart = 1012; - optional Unterbrechbarkeit unterbrechbarkeit = 1013; - optional Waermenutzung waermenutzung = 1014; - optional Konzessionsabgabe konzessionsabgabe = 1015; - optional bool steuerbefreit = 1016; - optional int32 vorkommastelle = 1017; - optional int32 nachkommastelle = 1018; + optional string ZaehlwerkId = 3; + optional string Bezeichnung = 4; + optional Energierichtung Richtung = 5 [default = AUSSP]; + optional string ObisKennzahl = 6; + optional .bcl.Decimal Wandlerfaktor = 7 [default = 0]; + optional Mengeneinheit Einheit = 8 [default = 0]; + optional string Kennzahl = 1009; + optional Schwachlastfaehig Schwachlastfaehig = 1010; + repeated Verwendungszweck Verwendungszwecke = 1011; + optional Verbrauchsart Verbrauchsart = 1012; + optional Unterbrechbarkeit Unterbrechbarkeit = 1013; + optional Waermenutzung Waermenutzung = 1014; + optional Konzessionsabgabe Konzessionsabgabe = 1015; + optional bool Steuerbefreit = 1016; + optional int32 Vorkommastelle = 1017; + optional int32 Nachkommastelle = 1018; }