Esempio n. 1
0
        public async Task <ActionResult> UpdateTransitForwardingOrder([FromBody] TransitForwardingOrder transitForwardingOrder, [FromRoute] int id)
        {
            var updateTransitForwardingOrderResult = await transitForwardingOrderService.UpdateTransitForwardingOrder(transitForwardingOrder, id);

            if (!updateTransitForwardingOrderResult.IsSuccessful)
            {
                return(BadRequest(updateTransitForwardingOrderResult));
            }

            return(Ok(updateTransitForwardingOrderResult));
        }
Esempio n. 2
0
        public async Task <ActionResult> AddTransitForwardingOrder([FromBody] TransitForwardingOrder transitForwardingOrder)
        {
            var addTransitForwardingOrderResult = await transitForwardingOrderService.AddTransitForwardingOrder(transitForwardingOrder);

            if (!addTransitForwardingOrderResult.IsSuccessful)
            {
                return(BadRequest(addTransitForwardingOrderResult));
            }

            return(Ok(addTransitForwardingOrderResult));
        }
        public async Task <GenericResponse> UpdateTransitForwardingOrder(TransitForwardingOrder transitForwardingOrder, int id)
        {
            if (transitForwardingOrder == null)
            {
                return(new GenericResponse(false, "Transit - forwarding order relation has not been provided."));
            }

            var transitForwardingOrderToUpdate = await unitOfWork.TransitForwardingOrderRepository.GetTransitForwardingOrderByIdAsync(id);

            if (transitForwardingOrderToUpdate == null)
            {
                return(new GenericResponse(false, $"Transit - forwarding order relation with id={id} does not exist."));
            }

            /*
             * if (transitForwardingOrder.TransitId == transitForwardingOrderToUpdate.TransitId && transitForwardingOrder.ForwardingOrderId == transitForwardingOrderToUpdate.ForwardingOrderId)
             *  return new GenericResponse(false, "No new changes has been provided.");
             */

            var transitForwardingOrderAlreadyInDatabase = await unitOfWork.TransitForwardingOrderRepository.GetTransitForwardingOrderByTransitAndForwardingOrderAsync(transitForwardingOrder.TransitId, transitForwardingOrder.ForwardingOrderId);

            if (transitForwardingOrderAlreadyInDatabase != null)
            {
                return(new GenericResponse(false, "Transit - forwarding order relation already exists in database."));
            }

            transitForwardingOrderToUpdate.ForwardingOrderId = transitForwardingOrder.ForwardingOrderId;
            transitForwardingOrderToUpdate.TransitId         = transitForwardingOrder.TransitId;

            try
            {
                await unitOfWork.TransitForwardingOrderRepository.AddTransitForwardingOrderAsync(transitForwardingOrderToUpdate);
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return(new GenericResponse(false, ex.InnerException.Message));
            }
            catch (DbUpdateException ex)
            {
                return(new GenericResponse(false, ex.InnerException.Message));
            }
            return(new GenericResponse(true, "Transit - forwarding order relation has been updated."));
        }
        public async Task <GenericResponse> AddTransitForwardingOrder(TransitForwardingOrder transitForwardingOrder)
        {
            if (transitForwardingOrder == null)
            {
                return(new GenericResponse(false, "Transit forwarding order relation data has not been provided."));
            }

            try
            {
                await unitOfWork.TransitForwardingOrderRepository.AddTransitForwardingOrderAsync(transitForwardingOrder);
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return(new GenericResponse(false, ex.InnerException.Message));
            }
            catch (DbUpdateException ex)
            {
                return(new GenericResponse(false, ex.InnerException.Message));
            }
            return(new GenericResponse(true, "Transit - forwarding order relation has been added."));
        }
Esempio n. 5
0
        public async Task <GenericResponse> UpdateTransits(TransitDto transits, int forwardingOrderId)
        {
            if (transits == null || transits.Transits == null)
            {
                return(new GenericResponse(false, "Dane przejazdów nie zostały podane"));
            }

            // get old transits from transitForwardingOrders table
            var oldTransitForwardingOrders = await unitOfWork.TransitForwardingOrderRepository.GetTransitForwardingOrdersByForwardingOrderAsync(forwardingOrderId);

            var oldTransits = new List <Transit>();

            foreach (var oldTransitForwardingOrder in oldTransitForwardingOrders)
            {
                var oldTransit = await unitOfWork.TransitRepository.GetTransitByIdAsync(oldTransitForwardingOrder.TransitId);

                if (oldTransit == null)
                {
                    continue;
                }

                oldTransits.Add(oldTransit);
            }

            // create new list of transits to add or update
            var transitsToAddOrUpdate = new List <Transit>();

            // create new list of transitForwardingOders to add or update
            var transitForwardingOrdersToAddOrUpdate = new List <TransitForwardingOrder>();

            foreach (var _transit in transits.Transits)
            {
                var transitToUpdate = await unitOfWork.TransitRepository.GetTransitByIdAsync(_transit.Id);

                if (transitToUpdate == null)
                {
                    transitsToAddOrUpdate.Add(_transit);
                    continue;
                }

                #region Transit data update
                transitToUpdate.GrossPrice                      = _transit.GrossPrice;
                transitToUpdate.NetPrice                        = _transit.NetPrice;
                transitToUpdate.TransportDistance               = _transit.TransportDistance;
                transitToUpdate.PaymentFormId                   = _transit.PaymentFormId;
                transitToUpdate.DriverId                        = _transit.DriverId;
                transitToUpdate.StartDate                       = _transit.StartDate;
                transitToUpdate.EndDate                         = _transit.EndDate;
                transitToUpdate.TransporterId                   = _transit.TransporterId;
                transitToUpdate.VehicleId                       = _transit.VehicleId;
                transitToUpdate.RouteShortPath                  = _transit.RouteShortPath;
                transitToUpdate.TransitDestinationCity          = _transit.TransitDestinationCity;
                transitToUpdate.TransitDestinationCountry       = _transit.TransitDestinationCountry;
                transitToUpdate.TransitDestinationStreetAddress = _transit.TransitDestinationStreetAddress;
                transitToUpdate.TransitDestinationZipCode       = _transit.TransitDestinationZipCode;
                transitToUpdate.TransitSourceCity               = _transit.TransitSourceCity;
                transitToUpdate.TransitSourceCountry            = _transit.TransitSourceCountry;
                transitToUpdate.TransitSourceStreetAddress      = _transit.TransitSourceStreetAddress;
                transitToUpdate.TransitSourceZipCode            = _transit.TransitSourceZipCode;
                transitsToAddOrUpdate.Add(transitToUpdate);
                #endregion
            }

            // catch removed transits from given forwarding order
            foreach (var oldTransit in oldTransits)
            {
                var transitToDelete = transitsToAddOrUpdate.FirstOrDefault(x => x.Id.Equals(oldTransit.Id));
                if (transitToDelete == null)
                {
                    // get all transit forwarding order by transit id to check, if there are other forwarding orders that use this transit
                    var transitsForwardingOrderToDeleteByTransitId = await unitOfWork.TransitForwardingOrderRepository.GetTransitForwardingOrdersByTransitAsync(oldTransit.Id);

                    if (transitsForwardingOrderToDeleteByTransitId == null || transitsForwardingOrderToDeleteByTransitId.Count() == 0)
                    {
                        continue;
                    }

                    try
                    {
                        var _transitForwardinOrderToDelete = transitsForwardingOrderToDeleteByTransitId.FirstOrDefault(x => x.ForwardingOrderId.Equals(forwardingOrderId));
                        await unitOfWork.TransitForwardingOrderRepository.RemoveTransitForwardingOrder(_transitForwardinOrderToDelete);
                    }
                    catch (DbUpdateConcurrencyException ex)
                    {
                        return(new GenericResponse(false, ex.InnerException.Message));
                    }
                    catch (DbUpdateException ex)
                    {
                        return(new GenericResponse(false, ex.InnerException.Message));
                    }

                    // filter those which are not related to given forwarding order
                    var transitsForwardingOrderToDelete = transitsForwardingOrderToDeleteByTransitId.Where(x => x.ForwardingOrderId != forwardingOrderId);
                    if (transitsForwardingOrderToDelete.Count() == 0)
                    {
                        // delete also transit from transits table
                        try
                        {
                            await unitOfWork.TransitRepository.RemoveTransit(oldTransit);
                        }
                        catch (DbUpdateConcurrencyException ex)
                        {
                            return(new GenericResponse(false, ex.InnerException.Message));
                        }
                        catch (DbUpdateException ex)
                        {
                            return(new GenericResponse(false, ex.InnerException.Message));
                        }
                        continue;
                    }
                }
            }

            try
            {
                await unitOfWork.TransitRepository.UpdateTransits(transitsToAddOrUpdate);

                foreach (var _transit in transits.Transits)
                {
                    var transitForwardingOrderToUpdate = await unitOfWork.TransitForwardingOrderRepository.GetTransitForwardingOrderByTransitAndForwardingOrderAsync(_transit.Id, forwardingOrderId);

                    if (transitForwardingOrderToUpdate == null)
                    {
                        var newTransitForwardingOrder = new TransitForwardingOrder()
                        {
                            TransitId         = _transit.Id,
                            ForwardingOrderId = forwardingOrderId
                        };
                        transitForwardingOrdersToAddOrUpdate.Add(newTransitForwardingOrder);
                    }
                }

                await unitOfWork.TransitForwardingOrderRepository.UpdateTransitForwardingOrders(transitForwardingOrdersToAddOrUpdate);
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return(new GenericResponse(false, ex.InnerException.Message));
            }
            catch (DbUpdateException ex)
            {
                return(new GenericResponse(false, ex.InnerException.Message));
            }
            return(new GenericResponse(true, "Transit has been updated."));
        }
 public async Task RemoveTransitForwardingOrder(TransitForwardingOrder transitForwardingOrder)
 {
     context.TransitForwardingOrders.Remove(transitForwardingOrder);
     await context.SaveChangesAsync();
 }
        public async Task AddTransitForwardingOrderAsync(TransitForwardingOrder transitForwardingOrder)
        {
            await context.TransitForwardingOrders.AddAsync(transitForwardingOrder);

            await context.SaveChangesAsync();
        }