Exemplo n.º 1
0
        public async Task <ShipmentManifestsDtos> CreateOrUpdateContainerAsync(ShipmentManifestsDtos rq)
        {
            Container container = new Container();

            container.Name     = rq.Name;
            container.Size     = rq.Size;
            container.Loading  = rq.Loading;
            container.PackType = rq.PackType;
            container.Status   = ContainerStatus.Pending;
            List <Manifest> manifests = new List <Manifest>();

            foreach (var item in rq.Manifests)
            {
                Manifest entity = new Manifest();
                if (item.selectedItem == true)
                {
                    var orderDeatail = await _orderDetailRepository.Query(p => p.ItemNumber == item.ItemNumber, false).SelectAsync();

                    var booking = await _shipmentBookingRepository.Query(p => p.Id == item.BookingId, false).SelectAsync();

                    entity.Quantity     = item.ShipQuantity;
                    entity.Container    = container;
                    entity.Loading      = container.Loading;
                    entity.PackType     = container.PackType;
                    entity.Size         = container.Size;
                    entity.BookingId    = item.BookingId;
                    entity.Cartons      = orderDeatail[0].Cartons;
                    entity.Cube         = orderDeatail[0].Cube;
                    entity.FreightTerms = item.FreightTerms;
                    entity.KGS          = orderDeatail[0].KGS;
                    if (item.ShipQuantity == item.OpenQuantity)
                    {
                        booking[0].Status      = OrderStatus.Manifested;
                        orderDeatail[0].Status = OrderStatus.Manifested;
                    }
                    if (item.ShipQuantity > 0 && item.ShipQuantity < item.OpenQuantity)
                    {
                        booking[0].Status      = OrderStatus.PartlyManifested;
                        orderDeatail[0].Status = OrderStatus.PartlyManifested;
                    }
                    entity.Booking = booking[0];

                    manifests.Add(entity);
                    _orderDetailRepository.Update(orderDeatail[0]);
                    _shipmentBookingRepository.Update(booking[0]);
                }
            }
            if (manifests.Count > 0)
            {
                container.Manifests = manifests;
                _containerRepository.Insert(container);
            }
            await UnitOfWork.SaveChangesAsync();

            var rs = Mapper.Map <ShipmentManifestsDtos>(container);

            return(rs);
        }
Exemplo n.º 2
0
        public async Task <PagedListResult <ShipmentManifestsDtos> > ListManifestDtoAsync(int pageIndex = 1, int pageSize = 2, string DestinationPort = null, string OriginPort = null, string Carrier = null, DateTime?ETDFrom = null, DateTime?ETDTo = null, string Status = null, string Vendor = null, string PONumber = null, string Item = null)
        {
            PagedListResult <ShipmentManifestsDtos> pageResult            = new PagedListResult <ShipmentManifestsDtos>();
            List <ShipmentManifestsDtos>            shipmentManifestsDtos = new List <ShipmentManifestsDtos>();
            List <ShipmentManifestsDtos>            currentPage           = new List <ShipmentManifestsDtos>();
            List <ShipmentManifestsDtos>            previousPage          = new List <ShipmentManifestsDtos>();
            Expression <Func <Container, bool> >    All        = x => x.Id > 0;
            Expression <Func <Booking, bool> >      AllBooking = o => o.Id > 0;

            if (DestinationPort != null)
            {
                Expression <Func <Container, bool> > filterDestinationPort = x => x.Manifests.Where(p => p.Booking.PortOfDelivery == DestinationPort).Count() > 0;
                All = All.And(filterDestinationPort);
            }
            if (OriginPort != null)
            {
                Expression <Func <Container, bool> > filterOriginPort = x => x.Manifests.Where(p => p.Booking.PortOfLoading == OriginPort).Count() > 0;
                All = All.And(filterOriginPort);
            }
            if (Carrier != null)
            {
                Expression <Func <Container, bool> > filterCarrier = x => x.Manifests.Where(p => p.Booking.Carrier == Carrier).Count() > 0;
                All = All.And(filterCarrier);
            }
            if (ETDFrom != null)
            {
                Expression <Func <Container, bool> > filterETDFrom = x => x.Manifests.Where(p => p.Booking.ETD.CompareTo(ETDFrom) > 0).Count() > 0;
                Expression <Func <Booking, bool> >   filter        = x => x.ETD.CompareTo(ETDFrom) > 0;
                AllBooking = AllBooking.And(filter);
                All        = All.And(filterETDFrom);
            }
            if (ETDTo != null)
            {
                Expression <Func <Container, bool> > filterETDTo = x => x.Manifests.Where(p => p.Booking.ETD.CompareTo(ETDTo) < 0).Count() > 0;
                Expression <Func <Booking, bool> >   filter      = x => x.ETD.CompareTo(ETDTo) > 0;
                AllBooking = AllBooking.And(filter);
                All        = All.And(filterETDTo);
            }
            if (Status != null)
            {
                Expression <Func <Container, bool> > filterStatus = x => x.Manifests.Where(p => p.Booking.Status.GetDescription <OrderStatus>() == Status).Count() > 0;
                Expression <Func <Booking, bool> >   filter       = x => x.Status.GetDescription <OrderStatus>() == Status;
                AllBooking = AllBooking.And(filter);
                All        = All.And(filterStatus);
            }
            if (Vendor != null)
            {
                Expression <Func <Container, bool> > filterVendor = x => x.Manifests.Where(p => p.Booking.Order.Vendor == Vendor).Count() > 0;
                Expression <Func <Booking, bool> >   filter       = x => x.ETD.CompareTo(ETDFrom) > 0;
                AllBooking = AllBooking.And(filter);
                All        = All.And(filterVendor);
            }
            if (PONumber != null)
            {
                Expression <Func <Container, bool> > filterPONumber = x => x.Manifests.Where(p => p.Booking.PONumber.Contains(PONumber)).Count() > 0;
                Expression <Func <Booking, bool> >   filter         = x => x.PONumber.Contains(PONumber);
                AllBooking = AllBooking.And(filter);
                All        = All.And(filterPONumber);
            }
            if (Item != null)
            {
                Expression <Func <Container, bool> > filterItem = x => x.Manifests.Where(p => p.Booking.ItemNumber == Item).Count() > 0;
                Expression <Func <Booking, bool> >   filter     = x => x.ItemNumber == Item;
                AllBooking = AllBooking.And(filter);
                All        = All.And(filterItem);
            }
            Expression <Func <Booking, bool> > filterBooking = p => p.PortOfLoading == OriginPort && p.PortOfDelivery == DestinationPort && p.Carrier == Carrier;
            var containers = await _containerDataProvider.ListAsync(All, "Name", true, pageIndex, pageSize);

            AllBooking = AllBooking.And(filterBooking);
            var bookings = await _shipmentBookingDataProvider.ListAsync(AllBooking, null, true);

            var previous = await _containerDataProvider.ListAsync(All, null, true, pageIndex, pageSize);

            List <Booking> listBooking            = bookings.Items;
            List <Booking> listBookingNoContainer = listBooking.Where(p => p.Status == OrderStatus.BookingMade || p.Status == OrderStatus.PartlyManifested).OrderBy(p => p.PortOfLoading).ToList();
            bool           checkEmptyContainer    = false;

            if (listBookingNoContainer.Count() == 0)
            {
                checkEmptyContainer = true;
            }
            if (checkEmptyContainer == false && pageIndex != 1)
            {
                previous = await _containerDataProvider.ListAsync(All, null, true, pageIndex - 1, pageSize);
            }
            //currentDTO
            foreach (var container in containers.Items)
            {
                List <ItemManifest>   itemManifests        = new List <ItemManifest>();
                ShipmentManifestsDtos shipmentManifestsDto = new ShipmentManifestsDtos();
                foreach (var item in container.Manifests)
                {
                    decimal temp = 0;
                    foreach (var manifest in item.Booking.Manifests)
                    {
                        temp += manifest.Quantity;
                    }
                    var orderDeatail = await _orderDetailRepository.Query(p => p.ItemNumber == item.Booking.ItemNumber, true).SelectAsync();

                    ItemManifest itemManifest = new ItemManifest()
                    {
                        Id              = item.Id,
                        Vendor          = orderDeatail[0].Order.Vendor,
                        Carrier         = item.Booking.Carrier,
                        PONumber        = item.Booking.PONumber,
                        ItemNumber      = item.Booking.ItemNumber,
                        ETDDate         = item.Booking.ETD,
                        BookingQuantity = item.Booking.Quantity,
                        OpenQuantity    = item.Booking.Quantity - temp,
                        ShipQuantity    = item.Quantity,
                        BookingCartons  = item.Booking.Quantity * (decimal)item.Booking.Cartons,
                        ShipCartons     = item.Quantity * (decimal)item.Cartons,
                        BookingCube     = item.Booking.Quantity * (decimal)item.Booking.Cube,
                        ShipCube        = item.Quantity * (decimal)item.Cube,
                        NetWeight       = item.Quantity * (decimal)item.KGS,
                        Manifested      = item.Booking.Status.GetDescription <OrderStatus>(),
                    };
                    itemManifests.Add(itemManifest);
                }
                shipmentManifestsDto.Id        = container.Id;
                shipmentManifestsDto.Manifests = itemManifests;
                shipmentManifestsDto.Name      = container.Name;
                shipmentManifestsDto.Size      = container.Size;
                shipmentManifestsDto.Loading   = container.Loading;
                shipmentManifestsDto.PackType  = container.PackType;
                currentPage.Add(shipmentManifestsDto);
            }
            if (containers.TotalCount % 2 == 0 && checkEmptyContainer == false)
            {
                pageResult.PageCount = containers.PageCount + 1;
            }
            else
            {
                pageResult.PageCount = containers.PageCount;
            }
            if (checkEmptyContainer == true)
            {
                pageResult.Items     = currentPage;
                pageResult.PageCount = containers.PageCount;
            }
            ShipmentManifestsDtos shipmentNoContainerDto = new ShipmentManifestsDtos(); // Define DTO No Container
            List <ItemManifest>   itemNoContainer        = new List <ItemManifest>();   // Define List Booking No Manifest Container Or  Status is PartlyManifest

            if (checkEmptyContainer == false)
            {
                foreach (var bookingNoContainer in listBookingNoContainer)
                {
                    var orderDeatail = await _orderDetailRepository.Query(p => p.ItemNumber == bookingNoContainer.ItemNumber, true).SelectAsync();

                    if (bookingNoContainer.Status == OrderStatus.BookingMade)
                    {
                        ItemManifest itemManifest = new ItemManifest()
                        {
                            Id              = 0,
                            Vendor          = orderDeatail[0].Order.Vendor,
                            Carrier         = bookingNoContainer.Carrier,
                            PONumber        = bookingNoContainer.PONumber,
                            ItemNumber      = bookingNoContainer.ItemNumber,
                            ETDDate         = bookingNoContainer.ETD,
                            BookingQuantity = bookingNoContainer.Quantity,
                            BookingCartons  = bookingNoContainer.Quantity * (decimal)bookingNoContainer.Cartons,
                            OpenQuantity    = bookingNoContainer.Quantity,
                            BookingCube     = bookingNoContainer.Quantity * (decimal)bookingNoContainer.Cube,
                            Manifested      = bookingNoContainer.Status.GetDescription <OrderStatus>(),
                            BookingId       = bookingNoContainer.Id,
                            Cube            = bookingNoContainer.Cube,
                            Carton          = bookingNoContainer.Cartons,
                            KGS             = orderDeatail[0].KGS,
                        };
                        itemNoContainer.Add(itemManifest);
                    }
                    if (bookingNoContainer.Status == OrderStatus.PartlyManifested)
                    {
                        ItemManifest itemManifest = new ItemManifest()
                        {
                            Id              = 0,
                            Vendor          = orderDeatail[0].Order.Vendor,
                            Carrier         = bookingNoContainer.Carrier,
                            PONumber        = bookingNoContainer.PONumber,
                            ItemNumber      = bookingNoContainer.ItemNumber,
                            ETDDate         = bookingNoContainer.ETD,
                            BookingQuantity = bookingNoContainer.Quantity,
                            BookingCartons  = bookingNoContainer.Quantity * (decimal)bookingNoContainer.Cartons,
                            BookingCube     = bookingNoContainer.Quantity * (decimal)bookingNoContainer.Cube,
                            Manifested      = bookingNoContainer.Status.GetDescription <OrderStatus>(),
                            BookingId       = bookingNoContainer.Id,
                            Cube            = bookingNoContainer.Cube,
                            Carton          = bookingNoContainer.Cartons,
                            KGS             = orderDeatail[0].KGS,
                        };
                        decimal temp = 0;
                        foreach (var quantity in bookingNoContainer.Manifests)
                        {
                            temp += quantity.Quantity;
                        }
                        itemManifest.OpenQuantity = bookingNoContainer.Quantity - temp;
                        itemNoContainer.Add(itemManifest);
                    }
                }
                shipmentNoContainerDto.Id        = 0;
                shipmentNoContainerDto.Manifests = itemNoContainer; //Dto no container

                foreach (var next in previous.Items)                //get DTO previous page
                {
                    List <ItemManifest>   itemManifests            = new List <ItemManifest>();
                    ShipmentManifestsDtos shipmentManifestsNextDto = new ShipmentManifestsDtos();
                    foreach (var item in next.Manifests)
                    {
                        decimal temp = 0;
                        foreach (var manifest in item.Booking.Manifests)
                        {
                            temp += manifest.Quantity;
                        }
                        ItemManifest itemManifest = new ItemManifest()
                        {
                            Id              = item.Id,
                            Vendor          = item.Booking.Factory,
                            Carrier         = item.Booking.Carrier,
                            PONumber        = item.Booking.PONumber,
                            ItemNumber      = item.Booking.ItemNumber,
                            ETDDate         = item.Booking.ETD,
                            BookingQuantity = item.Booking.Quantity,
                            OpenQuantity    = item.Booking.Quantity - temp,
                            ShipQuantity    = item.Quantity,
                            BookingCartons  = item.Booking.Quantity * (decimal)item.Booking.Cartons,
                            ShipCartons     = item.Quantity * (decimal)item.Cartons,
                            BookingCube     = item.Booking.Quantity * (decimal)item.Booking.Cube,
                            ShipCube        = item.Quantity * (decimal)item.Cube,
                            NetWeight       = item.Quantity * (decimal)item.KGS,
                            Manifested      = item.Booking.Status.GetDescription <OrderStatus>(),
                        };
                        itemManifests.Add(itemManifest);
                    }
                    shipmentManifestsNextDto.Id        = next.Id;
                    shipmentManifestsNextDto.Manifests = itemManifests;
                    shipmentManifestsNextDto.Name      = next.Name;
                    shipmentManifestsNextDto.Size      = next.Size;
                    shipmentManifestsNextDto.Loading   = next.Loading;
                    shipmentManifestsNextDto.PackType  = next.PackType;
                    previousPage.Add(shipmentManifestsNextDto);
                }
                if (pageIndex == 1)
                {
                    shipmentManifestsDtos.Add(shipmentNoContainerDto);
                    if (currentPage.Count() > 0)
                    {
                        shipmentManifestsDtos.Add(currentPage[0]);
                    }
                    pageResult.Items = shipmentManifestsDtos;
                }
                if (pageIndex > 1)
                {
                    shipmentManifestsDtos.Add(previousPage[1]);
                    if (currentPage.Count > 0)
                    {
                        shipmentManifestsDtos.Add(currentPage[0]);
                    }
                    pageResult.Items = shipmentManifestsDtos;
                }
            }
            return(pageResult);
        }