Exemplo n.º 1
0
        /// <summary>
        /// 1 ton = 1000 litres
        /// 1 ton = 1 cubic metre
        /// </summary>
        /// <param name="notificationId"></param>
        /// <param name="totalShipments"></param>
        /// <returns></returns>
        public async Task <ShipmentQuantity> AveragePerShipment(Guid notificationId, decimal totalShipments)
        {
            if (totalShipments == 0)
            {
                return(new ShipmentQuantity(0, ShipmentQuantityUnits.Tonnes));
            }

            var shipment = await shipmentRepository.GetByNotificationId(notificationId);

            decimal shipmentQuantity;

            if (shipment.Units == ShipmentQuantityUnits.Kilograms)
            {
                shipmentQuantity = ShipmentQuantityUnitConverter.ConvertToTarget(
                    shipment.Units,
                    ShipmentQuantityUnits.Tonnes,
                    shipment.Quantity);
            }
            else if (shipment.Units == ShipmentQuantityUnits.Litres)
            {
                shipmentQuantity = shipment.Quantity / 1000m;
            }
            else
            {
                shipmentQuantity = shipment.Quantity;
            }

            return(new ShipmentQuantity(decimal.Divide(shipmentQuantity, totalShipments), ShipmentQuantityUnits.Tonnes));
        }
Exemplo n.º 2
0
        private async Task <ShipmentQuantity> TotalQuantityReceived(Guid importNotificationId, Shipment shipment)
        {
            await authorization.EnsureAccessAsync(importNotificationId);

            var movements = await context.ImportMovements.Where(m => m.NotificationId == importNotificationId).ToArrayAsync();

            var allMovementReceipts = new List <ImportMovementReceipt>();

            foreach (var movement in movements)
            {
                var movementReceipts = await context.ImportMovementReceipts.Where(mr => mr.MovementId == movement.Id).ToListAsync();

                allMovementReceipts = allMovementReceipts.Union(movementReceipts).ToList();
            }

            if (!allMovementReceipts.Any())
            {
                return(new ShipmentQuantity(0, shipment == null ? ShipmentQuantityUnits.Tonnes : shipment.Quantity.Units));
            }

            var totalReceived = allMovementReceipts.Sum(m =>
                                                        ShipmentQuantityUnitConverter.ConvertToTarget(
                                                            m.Unit,
                                                            shipment.Quantity.Units,
                                                            m.Quantity));

            return(new ShipmentQuantity(totalReceived, shipment.Quantity.Units));
        }
 public void CheckLosingPrecisionThrows(ShipmentQuantityUnits source, ShipmentQuantityUnits target, decimal value)
 {
     try
     {
         ShipmentQuantityUnitConverter.ConvertToTarget(source, target, value);
     }
     catch (InvalidOperationException ex)
     {
         Assert.Contains("would lose precision", ex.Message);
     }
 }
 public void CheckInvalidConversions(ShipmentQuantityUnits source, ShipmentQuantityUnits target)
 {
     try
     {
         ShipmentQuantityUnitConverter.ConvertToTarget(source, target, 10);
     }
     catch (ArgumentException ex)
     {
         Assert.Contains("Cannot convert type", ex.Message);
     }
 }
Exemplo n.º 5
0
        private decimal?GetIntendedTonnes(Shipment source)
        {
            if (!source.TotalQuantityUnitsId.HasValue ||
                !source.TotalQuantity.HasValue ||
                ShipmentQuantityUnitsMetadata.IsVolumeUnit(source.TotalQuantityUnitsId.Value))
            {
                return(null);
            }

            return(ShipmentQuantityUnitConverter.ConvertToTarget(source.TotalQuantityUnitsId.Value,
                                                                 ShipmentQuantityUnits.Tonnes,
                                                                 source.TotalQuantity.Value,
                                                                 false));
        }
Exemplo n.º 6
0
        private decimal?GetActualCubicMetres(Shipment source)
        {
            if (!source.Units.HasValue ||
                !source.QuantityReceived.HasValue ||
                ShipmentQuantityUnitsMetadata.IsWeightUnit(source.Units.Value))
            {
                return(null);
            }

            return(ShipmentQuantityUnitConverter.ConvertToTarget(source.Units.Value,
                                                                 ShipmentQuantityUnits.CubicMetres,
                                                                 source.QuantityReceived.Value,
                                                                 false));
        }
Exemplo n.º 7
0
        public async Task <ShipmentQuantity> Received(Guid notificationId)
        {
            var receivedMovements = await movementRepository.GetMovementsByStatus(notificationId, MovementStatus.Received);

            var completedMovements = await movementRepository.GetMovementsByStatus(notificationId, MovementStatus.Completed);

            var movements = receivedMovements.Union(completedMovements);
            var shipment  = await shipmentRepository.GetByNotificationId(notificationId);

            if (!HasSummableMovements(movements))
            {
                return(new ShipmentQuantity(0, shipment == null ? ShipmentQuantityUnits.Tonnes : shipment.Units));
            }

            var totalReceived = movements.Where(x => x.Receipt != null).Sum(m =>
                                                                            ShipmentQuantityUnitConverter.ConvertToTarget(
                                                                                m.Receipt.QuantityReceived.Units,
                                                                                shipment.Units,
                                                                                m.Receipt.QuantityReceived.Quantity));

            var totalPartialReceived  = Convert.ToDecimal(0);
            var totalPartialCompleted = Convert.ToDecimal(0);

            totalPartialCompleted = movements.Where(x => x.Receipt == null).Sum(m =>
                                                                                ShipmentQuantityUnitConverter.ConvertToTarget(
                                                                                    m.PartialRejection.ToList()[0].ActualUnit,
                                                                                    shipment.Units,
                                                                                    m.PartialRejection.ToList()[0].ActualQuantity));

            var partialMovements = await movementRepository.GetMovementsByStatus(notificationId, MovementStatus.PartiallyRejected);

            var listOfMovementIds = partialMovements.ToArray().Select(r => r.Id);
            var listOfPartialRejectedMovements = await movementPartialRejectionRepository.GetMovementPartialRejectionsByMovementIds(listOfMovementIds);

            if (listOfPartialRejectedMovements != null && listOfPartialRejectedMovements.Count() > 0)
            {
                totalPartialReceived = listOfPartialRejectedMovements.Sum(m =>
                                                                          ShipmentQuantityUnitConverter.ConvertToTarget(
                                                                              m.ActualUnit,
                                                                              shipment.Units,
                                                                              m.ActualQuantity));
            }

            totalReceived = totalReceived + totalPartialCompleted + totalPartialReceived;

            return(new ShipmentQuantity(totalReceived, shipment.Units));
        }
Exemplo n.º 8
0
        /// <summary>
        /// 1 ton = 1000 litres
        /// 1 ton = 1 cubic metre
        /// </summary>
        /// <param name="shipment">the shipment info</param>
        /// <returns></returns>
        private static ShipmentQuantity AveragePerShipment(Shipment shipment)
        {
            decimal shipmentQuantity;

            if (shipment.Quantity.Units == ShipmentQuantityUnits.Kilograms)
            {
                shipmentQuantity = ShipmentQuantityUnitConverter.ConvertToTarget(
                    shipment.Quantity.Units,
                    ShipmentQuantityUnits.Tonnes,
                    shipment.Quantity.Quantity);
            }
            else if (shipment.Quantity.Units == ShipmentQuantityUnits.Litres)
            {
                shipmentQuantity = shipment.Quantity.Quantity / 1000m;
            }
            else
            {
                shipmentQuantity = shipment.Quantity.Quantity;
            }

            return(new ShipmentQuantity(decimal.Divide(shipmentQuantity, shipment.NumberOfShipments), ShipmentQuantityUnits.Tonnes));
        }
Exemplo n.º 9
0
        public async Task <ShipmentQuantity> Received(Guid notificationId)
        {
            var receivedMovements = await movementRepository.GetMovementsByStatus(notificationId, MovementStatus.Received);

            var completedMovements = await movementRepository.GetMovementsByStatus(notificationId, MovementStatus.Completed);

            var movements = receivedMovements.Union(completedMovements);

            var shipment = await shipmentRepository.GetByNotificationId(notificationId);

            if (!HasSummableMovements(movements))
            {
                return(new ShipmentQuantity(0, shipment == null ? ShipmentQuantityUnits.Tonnes : shipment.Units));
            }

            var totalReceived = movements.Sum(m =>
                                              ShipmentQuantityUnitConverter.ConvertToTarget(
                                                  m.Receipt.QuantityReceived.Units,
                                                  shipment.Units,
                                                  m.Receipt.QuantityReceived.Quantity));

            return(new ShipmentQuantity(totalReceived, shipment.Units));
        }
 public void CheckWorkingConversions(ShipmentQuantityUnits source, ShipmentQuantityUnits target, decimal value, decimal result)
 {
     Assert.Equal(result, ShipmentQuantityUnitConverter.ConvertToTarget(source, target, value));
 }
 public void ConvertToSameType(ShipmentQuantityUnits sourceAndTarget)
 {
     Assert.Equal(10, ShipmentQuantityUnitConverter.ConvertToTarget(sourceAndTarget, sourceAndTarget, 10));
 }
 public void CanTurnThrowOnLossOfPrecisionOff(ShipmentQuantityUnits source, ShipmentQuantityUnits target,
                                              decimal value)
 {
     Assert.Equal(value / 1000, ShipmentQuantityUnitConverter.ConvertToTarget(source, target, value, false));
 }