public void MapChangeOfChargesMessageToCharge_WhenMessageWithProperties_ThenReturnsChargeWithPropertiesSet()
        {
            // Arrange
            var changeOfChargesMessage = GetValidChangeOfChargesMessage();

            changeOfChargesMessage !.MktActivityRecord !.ValidityEndDate = Instant.MaxValue;
            var chargeType = new ChargeType {
                Code = changeOfChargesMessage.Type, Id = 1, Name = "Name"
            };
            var chargeTypeOwnerMRid = new MarketParticipant {
                Id = 1, MRid = changeOfChargesMessage.ChargeTypeOwnerMRid
            };
            var resolutionType = new ResolutionType {
                Id = 1, Name = changeOfChargesMessage.Period?.Resolution
            };
            var vatPayerType = new VatPayerType {
                Id = 1, Name = changeOfChargesMessage.MktActivityRecord?.ChargeType?.VatPayer
            };

            // When
            var result = ChangeOfChargesMapper.MapChangeOfChargesTransactionToCharge(changeOfChargesMessage, chargeType, chargeTypeOwnerMRid, resolutionType, vatPayerType);

            var properties = result.GetType().GetProperties();

            foreach (var property in properties)
            {
                var value = property.GetValue(result);
                Assert.NotNull(value);
            }
        }
        public void MapChangeOfChargesMessageToCharge_WhenMessageWithProperties_ThenReturnsChargeWithPropertiesSet()
        {
            // Arrange
            var changeOfChargesMessage = GetValidChangeOfChargesMessage();

#pragma warning disable CS8602 // Dereference of a possibly null reference.
            changeOfChargesMessage.MktActivityRecord.ValidityEndDate = Instant.MaxValue;
#pragma warning restore CS8602 // Dereference of a possibly null reference.
            var chargeType = new ChargeType {
                Code = changeOfChargesMessage.Type, Id = 1, Name = "Name"
            };
            var chargeTypeOwnerMRid = new Ingestion.Infrastructure.ChangeOfCharges.Context.Model.MarketParticipant {
                Id = 1, MRid = changeOfChargesMessage.ChargeTypeOwnerMRid
            };
            var resolutionType = new ResolutionType {
                Id = 1, Name = changeOfChargesMessage.Period?.Resolution
            };
            var vatPayerType = new VatPayerType {
                Id = 1, Name = changeOfChargesMessage.MktActivityRecord?.ChargeType?.VATPayer
            };

            // When
            var result = ChangeOfChargesMapper.MapChangeOfChargesMessageToCharge(changeOfChargesMessage, chargeType, chargeTypeOwnerMRid, resolutionType, vatPayerType);

            var properties = result.GetType().GetProperties();
            foreach (var property in properties)
            {
                Assert.NotNull(property.GetValue(result));
            }
        }
        public static Charge MapChangeOfChargesTransactionToCharge(
            [NotNull] ChangeOfChargesTransaction changeOfChargeTransaction,
            ChargeType chargeType,
            MarketParticipant chargeTypeOwnerMRid,
            ResolutionType resolutionType,
            VatPayerType vatPayerType)
        {
            if (changeOfChargeTransaction == null)
            {
                throw new ArgumentNullException(nameof(changeOfChargeTransaction));
            }
            if (string.IsNullOrWhiteSpace(changeOfChargeTransaction.ChargeTypeMRid))
            {
                throw new ArgumentException($"{nameof(changeOfChargeTransaction.ChargeTypeMRid)} must have value");
            }
            if (string.IsNullOrWhiteSpace(changeOfChargeTransaction.CorrelationId))
            {
                throw new ArgumentException($"{nameof(changeOfChargeTransaction.CorrelationId)} must have value");
            }
            if (string.IsNullOrWhiteSpace(changeOfChargeTransaction.LastUpdatedBy))
            {
                throw new ArgumentException($"{nameof(changeOfChargeTransaction.LastUpdatedBy)} must have value");
            }
            if (changeOfChargeTransaction.MktActivityRecord?.ChargeType == null)
            {
                throw new ArgumentException($"{nameof(changeOfChargeTransaction.MktActivityRecord.ChargeType)} can't be null");
            }
            if (string.IsNullOrWhiteSpace(changeOfChargeTransaction.MktActivityRecord.ChargeType.Name))
            {
                throw new ArgumentException($"{nameof(changeOfChargeTransaction.MktActivityRecord.ChargeType.Name)} must have value");
            }
            if (string.IsNullOrWhiteSpace(changeOfChargeTransaction.MktActivityRecord.ChargeType.Description))
            {
                throw new ArgumentException($"{nameof(changeOfChargeTransaction.MktActivityRecord.ChargeType.Description)} must have value");
            }
            if (changeOfChargeTransaction.Period == null)
            {
                throw new ArgumentException($"{nameof(changeOfChargeTransaction.Period)} can't be null");
            }
            if (changeOfChargeTransaction.Period.Points == null)
            {
                throw new ArgumentException($"{nameof(changeOfChargeTransaction.Period.Points)} can't be null");
            }

            var charge = new Charge
            {
                ChargeType                 = chargeType,
                ChargeTypeOwner            = chargeTypeOwnerMRid,
                Description                = changeOfChargeTransaction.MktActivityRecord.ChargeType.Description,
                LastUpdatedBy              = changeOfChargeTransaction.LastUpdatedBy,
                LastUpdatedByCorrelationId = changeOfChargeTransaction.CorrelationId,
                LastUpdatedByTransactionId = changeOfChargeTransaction.MRid,
                Name                 = changeOfChargeTransaction.MktActivityRecord.ChargeType.Name,
                RequestDateTime      = changeOfChargeTransaction.RequestDate.ToUnixTimeTicks(),
                ResolutionType       = resolutionType,
                StartDate            = changeOfChargeTransaction.MktActivityRecord.ValidityStartDate.ToUnixTimeTicks(),
                EndDate              = changeOfChargeTransaction.MktActivityRecord.ValidityEndDate?.ToUnixTimeTicks(),
                Status               = (int)changeOfChargeTransaction.MktActivityRecord.Status,
                TaxIndicator         = changeOfChargeTransaction.MktActivityRecord.ChargeType.TaxIndicator,
                TransparentInvoicing = changeOfChargeTransaction.MktActivityRecord.ChargeType.TransparentInvoicing,
                VatPayer             = vatPayerType,
                MRid                 = changeOfChargeTransaction.ChargeTypeMRid,
                Currency             = "DKK",
            };

            foreach (var point in changeOfChargeTransaction.Period.Points)
            {
                var newChargePrice = new ChargePrice
                {
                    Time   = point.Time.ToUnixTimeTicks(),
                    Amount = point.PriceAmount,
                    LastUpdatedByCorrelationId = changeOfChargeTransaction.CorrelationId,
                    LastUpdatedByTransactionId = changeOfChargeTransaction.MRid,
                    LastUpdatedBy   = changeOfChargeTransaction.LastUpdatedBy,
                    RequestDateTime = changeOfChargeTransaction.RequestDate.ToUnixTimeTicks(),
                };

                charge.ChargePrices.Add(newChargePrice);
            }

            return(charge);
        }