public async Task Handle(PetrolStolenByCustomer @event)
        {
            logger.LogDebug($"Petrol stolen by customer event received. Id: {@event.NozzleId}");

            var petrolStation = await repository.GetAsync(callContext.PetrolStationId.Value);

            petrolStation.Time = @event.TimeStamp;

            var tank = petrolStation.Tanks.SingleOrDefault(x => x.Nozzles.Any(z => z.Id == @event.NozzleId));

            tank.CurrentVolume -= @event.PetrolAmountInTransaction;

            var nozzle = tank.Nozzles.Single(z => z.Id == @event.NozzleId);

            nozzle.LastTransactionVolume   = @event.PetrolAmountInTransaction;
            nozzle.TotalPetrolAmount       = @event.TotalDispatchedPetrolAmount;
            nozzle.LastStolenPetrolAmount  = @event.PetrolAmountInTransaction;
            nozzle.TotalStolenPetrolAmount = @event.TotalStolenPetrolAmount;

            var report = factory.CreateReportForPetrolStolenByCustomer(tank.Id, @event);

            if (petrolStation.Reports == null)
            {
                petrolStation.Reports = new List <PetrolStationReport>();
            }

            petrolStation.Reports.Add(report);

            await repository.UpdateAsync(petrolStation);

            await hub.Clients.All.SendAsync("StationUpdate", petrolStation.Id);

            logger.LogDebug($"Petrol stolen by customer event received handling ended.");
        }
Beispiel #2
0
        private IEvent FinishUsingNozzle(DateTime currentDateTime)
        {
            TotalPetrolAmount += PetrolAmountInCurrentTransaction;
            IsCurrentlyInUse   = false;
            IEvent eventToPublish;

            if (CurrentClient.PayForOrder())
            {
                TotalStolenPetrolAmount         += 0;
                LastStolenPetrolAmount           = 0;
                eventToPublish                   = new NozzleUsed(Id, currentDateTime, PetrolAmountInCurrentTransaction, TotalPetrolAmount);
                PetrolAmountInCurrentTransaction = 0;
            }
            else
            {
                TotalStolenPetrolAmount         += PetrolAmountInCurrentTransaction;
                LastStolenPetrolAmount           = PetrolAmountInCurrentTransaction;
                eventToPublish                   = new PetrolStolenByCustomer(Id, currentDateTime, LastStolenPetrolAmount, TotalStolenPetrolAmount, TotalPetrolAmount);
                PetrolAmountInCurrentTransaction = 0;
            }

            return(eventToPublish);
        }
Beispiel #3
0
 public PetrolStationReport CreateReportForPetrolStolenByCustomer(Guid tankId, PetrolStolenByCustomer @event)
 {
     return(new PetrolStationReport()
     {
         TankId = tankId,
         NozzleId = @event.NozzleId,
         TimeStamp = @event.TimeStamp,
         Report = $"Petrol stolen by customer. Petrol amount in transaction: {@event.PetrolAmountInTransaction}. Total stolen petrol amount: {@event.TotalStolenPetrolAmount}. Total dispatched petrol amount: {@event.TotalDispatchedPetrolAmount}.",
         Status = ReportStatus.PetrolStolenByCustomer
     });
 }