public async Task QuantityExceedsRemaining_Throws()
 {
     await Assert.ThrowsAsync <InvalidOperationException>(() => factory.Create(movement, new ShipmentQuantity(100, ShipmentQuantityUnits.Kilograms),
                                                                               new[]
     {
         new TestablePackagingInfo()
     }));
 }
Exemple #2
0
        private async Task SaveMovementDetails(Movement movement, DraftMovement draftMovement, NotificationApplication notification)
        {
            var shipmentQuantity = new ShipmentQuantity(draftMovement.Quantity, draftMovement.Units);
            var packagingInfos   = GetPackagingInfoFromDraft(draftMovement.PackagingInfos, notification);

            var movementDetails = await movementDetailsFactory.Create(
                movement,
                shipmentQuantity,
                packagingInfos);

            context.MovementDetails.Add(movementDetails);

            await context.SaveChangesAsync();
        }
        public async Task <Guid[]> HandleAsync(CreateMovements message)
        {
            var newIds = new List <Guid>();

            using (var transaction = context.Database.BeginTransaction())
            {
                try
                {
                    for (int i = 0; i < message.NumberToCreate; i++)
                    {
                        var movement = await movementFactory.Create(message.NotificationId, message.ActualMovementDate);

                        context.Movements.Add(movement);

                        await context.SaveChangesAsync();

                        var shipmentQuantity = new ShipmentQuantity(message.Quantity, message.Units);
                        var packagingInfos   = await GetPackagingInfos(message.NotificationId, message.PackagingTypes);

                        var movementDetails = await movementDetailsFactory.Create(
                            movement,
                            shipmentQuantity,
                            packagingInfos);

                        context.MovementDetails.Add(movementDetails);

                        await context.SaveChangesAsync();

                        newIds.Add(movement.Id);

                        await movementAuditRepository.Add(new MovementAudit(movement.NotificationId, movement.Number,
                                                                            userContext.UserId.ToString(), (int)MovementAuditType.Incomplete, SystemTime.Now));

                        await context.SaveChangesAsync();
                    }
                }
                catch
                {
                    transaction.Rollback();
                    throw;
                }

                transaction.Commit();
            }

            return(newIds.ToArray());
        }