Example #1
0
 private async Task <VatPayerType?> GetVatPayerTypeAsync(ChangeOfChargesTransaction chargeMessage)
 {
     return(string.IsNullOrWhiteSpace(chargeMessage.MktActivityRecord?.ChargeType?.VatPayer)
         ? throw new ArgumentException($"Fails as {nameof(chargeMessage.MktActivityRecord.ChargeType.VatPayer)} is invalid")
         : await _chargesDatabaseContext.VatPayerType.SingleOrDefaultAsync(type =>
                                                                           type.Name == chargeMessage.MktActivityRecord.ChargeType.VatPayer).ConfigureAwait(false));
 }
        private static ChangeOfChargesTransaction GetValidChangeOfChargesMessage()
        {
            var transaction = new ChangeOfChargesTransaction
            {
                MRid                = "chargeMRid",
                ChargeTypeMRid      = "chargeTypeMRid",
                CorrelationId       = "correlationId",
                LastUpdatedBy       = "lastUpdatedBy",
                Type                = KnownChargeType,
                ChargeTypeOwnerMRid = KnownChargeOwner,
                MktActivityRecord   = new MktActivityRecord
                {
                    ChargeType = new Domain.ChangeOfCharges.Transaction.ChargeType
                    {
                        VatPayer = KnownVatPayer, Name = "shortDescription", Description = "longDescription",
                    },
                },
                Period = new ChargeTypePeriod
                {
                    Resolution = KnownResolutionType,
                    Points     = { new Point {
                                       Position = 1, PriceAmount = 1m, Time = SystemClock.Instance.GetCurrentInstant(),
                                   } },
                },
            };

            return(transaction);
        }
Example #3
0
 private async Task <MarketParticipant?> GetChargeTypeOwnerMRidAsync(ChangeOfChargesTransaction chargeMessage)
 {
     return(string.IsNullOrWhiteSpace(chargeMessage.ChargeTypeOwnerMRid)
         ? throw new ArgumentException($"Fails as {nameof(chargeMessage.ChargeTypeOwnerMRid)} is invalid")
         : await _chargesDatabaseContext.MarketParticipant.SingleOrDefaultAsync(type =>
                                                                                type.MRid == chargeMessage.ChargeTypeOwnerMRid).ConfigureAwait(false));
 }
 public ChargeTransactionReceived(
     string correlationId,
     [NotNull] ChangeOfChargesTransaction transaction)
 {
     CorrelationId = correlationId;
     Transaction   = transaction;
     Filter        = transaction.GetType().Name;
 }
        public async Task <HubRequestValidationResult> ValidateAsync([NotNull] ChangeOfChargesTransaction changeOfChargesTransaction)
        {
            var result = await _inputValidationRuleEngine.ValidateAsync(changeOfChargesTransaction).ConfigureAwait(false);

            var hubRequestValidationResult = new HubRequestValidationResult(changeOfChargesTransaction.ChargeTypeMRid);

            foreach (var error in result)
            {
                hubRequestValidationResult.Add(new ValidationError(error.RuleNumber, error.Message));
            }

            return(hubRequestValidationResult);
        }
Example #6
0
        public async Task <ChargeStorageStatus> StoreChargeAsync(ChangeOfChargesTransaction transaction)
        {
            if (transaction == null)
            {
                throw new ArgumentNullException(nameof(transaction));
            }

            var chargeType = await GetChargeTypeAsync(transaction).ConfigureAwait(false);

            if (chargeType == null)
            {
                return(ChargeStorageStatus.CreateFailure($"No charge type for {transaction.Type}"));
            }

            var resolutionType = await GetResolutionTypeAsync(transaction).ConfigureAwait(false);

            if (resolutionType == null)
            {
                return(ChargeStorageStatus.CreateFailure($"No resolution type for {transaction.Period?.Resolution}"));
            }

            var vatPayerType = await GetVatPayerTypeAsync(transaction).ConfigureAwait(false);

            if (vatPayerType == null)
            {
                return(ChargeStorageStatus.CreateFailure($"No VAT payer type for {transaction.MktActivityRecord?.ChargeType?.VatPayer}"));
            }

            var chargeTypeOwnerMRid = await GetChargeTypeOwnerMRidAsync(transaction).ConfigureAwait(false);

            if (chargeTypeOwnerMRid == null)
            {
                return(ChargeStorageStatus.CreateFailure($"No market participant for {transaction.ChargeTypeOwnerMRid}"));
            }

            var charge = ChangeOfChargesMapper.MapChangeOfChargesTransactionToCharge(transaction, chargeType, chargeTypeOwnerMRid, resolutionType, vatPayerType);

            await _chargesDatabaseContext.Charge.AddAsync(charge).ConfigureAwait(false);

            await _chargesDatabaseContext.SaveChangesAsync().ConfigureAwait(false);

            return(ChargeStorageStatus.CreateSuccess());
        }
        public ChangeOfChargesTransaction Build()
        {
            var test = new ChangeOfChargesTransaction
            {
                ChargeTypeMRid    = _mrid,
                MktActivityRecord = new MktActivityRecord
                {
                    Status            = (MktActivityRecordStatus)_status,
                    ValidityStartDate = _validityStartDate,
                    ChargeType        = new ChargeType
                    {
                        VatPayer     = _vatPayer,
                        TaxIndicator = _taxIndicator,
                    },
                },
                ChargeTypeOwnerMRid = _owner,
            };

            return(test);
        }
Example #8
0
 private static ChangeOfChargesTransaction GetCommandFromChangeOfChargeTransaction(ChangeOfChargesTransaction transaction)
 {
     return(transaction.Type switch
     {
         "D01" => new FeeCreate
         {
             Period = transaction.Period,
             Type = transaction.Type,
             CorrelationId = transaction.CorrelationId,
             MarketDocument = transaction.MarketDocument,
             RequestDate = transaction.RequestDate,
             LastUpdatedBy = transaction.LastUpdatedBy,
             MktActivityRecord = transaction.MktActivityRecord,
             ChargeTypeMRid = transaction.ChargeTypeMRid,
             ChargeTypeOwnerMRid = transaction.ChargeTypeOwnerMRid,
         },
         _ => new TariffCreate
         {
             Period = transaction.Period,
             Type = transaction.Type,
             CorrelationId = transaction.CorrelationId,
             MarketDocument = transaction.MarketDocument,
             RequestDate = transaction.RequestDate,
             LastUpdatedBy = transaction.LastUpdatedBy,
             MktActivityRecord = transaction.MktActivityRecord,
             ChargeTypeMRid = transaction.ChargeTypeMRid,
             ChargeTypeOwnerMRid = transaction.ChargeTypeOwnerMRid,
         }
     });
        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);
        }
Example #10
0
 private async Task <ResolutionType?> GetResolutionTypeAsync(ChangeOfChargesTransaction chargeMessage)
 {
     return(string.IsNullOrWhiteSpace(chargeMessage.Period?.Resolution)
         ? throw new ArgumentException($"Fails as {nameof(chargeMessage.Period.Resolution)} is invalid")
         : await _chargesDatabaseContext.ResolutionType.SingleOrDefaultAsync(type => type.Name == chargeMessage.Period.Resolution).ConfigureAwait(false));
 }
 public async Task HandleAsync([NotNull] ChangeOfChargesTransaction transaction)
 {
     var localEvent = new ChargeTransactionReceived(transaction.CorrelationId !, transaction);
     await _localEventPublisher.PublishAsync(localEvent).ConfigureAwait(false);
 }