Ejemplo n.º 1
0
        /// <summary>
        /// Sets shipment state for order items.
        /// Use this method when you purchased a BOL shipping label.
        /// </summary>
        /// <param name="orderItemIds">The order item ids.</param>
        /// <param name="shipmentReference">The shipment reference.</param>
        /// <param name="labelId">The label identifier.</param>
        /// <returns>StatusResponse.</returns>
        public async Task <IEnumerable <StatusResponse> > ShipOrderItemsAsync(
            IEnumerable <string> orderItemIds,
            string shipmentReference,
            string labelId)
        {
            var result     = new List <StatusResponse>();
            var orderItems = orderItemIds.Select(oi => new ItemId(oi));

            foreach (var orderItem in orderItems)
            {
                var shipmentRequest = new ShipmentRequest()
                {
                    OrderItems        = new [] { orderItem },
                    ShipmentReference = shipmentReference,
                    ShippingLabelId   = labelId
                };

                result.Add(
                    await GetApiResult <StatusResponse>(
                        HttpMethod.Put,
                        $"{EndPoints.BaseUriApiCalls}{EndPoints.Orders}/shipment",
                        shipmentRequest
                        )
                    );
            }

            return(result);
        }
        /// <summary>
        /// Funciton to log shipment errors in table Cloud_ShipmentErrors
        /// </summary>
        /// <param name="shipmentReq">ShipmentRequest object</param>
        /// <param name="isError">error or warning</param>
        /// <param name="errorDetail">error details</param>
        /// <param name="errorMessage">error message</param>
        /// <param name="session">session object</param>
        public static void UpdateShipmentErrors(ShipmentRequest shipmentReq, Boolean isError, String errorDetail, String errorMessage, ISession session, String companyID, String VersionNo = "")
        {
            try
            {
                string ComponentsXML = string.Empty;
                using (StringWriter sw = new StringWriter())
                {
                    XmlSerializer xs = new XmlSerializer(typeof(List <ShipmentRequestComponents>));
                    xs.Serialize(sw, shipmentReq.Components);
                    ComponentsXML = sw.ToString().Replace("utf-16", "utf-8");
                }

                SqlCommand cmd = (SqlCommand)session.CreateCommand();
                cmd.CommandText = "Cloud_UpdateShipmentErrors";
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@SysTrxNo", shipmentReq.SysTrxNo);
                cmd.Parameters.AddWithValue("@SysLineNo", shipmentReq.SysTrxLine);
                cmd.Parameters.AddWithValue("@ComponentsXML", ComponentsXML);
                cmd.Parameters.AddWithValue("@UserID", shipmentReq.UserID);
                cmd.Parameters.AddWithValue("@ErrorOrWarning", isError);
                cmd.Parameters.AddWithValue("@ErrorDetails", errorDetail);
                cmd.Parameters.AddWithValue("@ErrorMessage", errorMessage);
                cmd.ExecuteNonQuery();
                UpdateOrderStatus(session, shipmentReq.SysTrxNo, ApplicationConstants.ErrorStatusCode.Error_In_Shipment, companyID);
            }
            catch (Exception ex)
            {
                Logging.LogError(ex);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Reads a single request from the file opened if one is still available
        /// </summary>
        public ShipmentRequest GetNextRequest()
        {
            if (reader.EndOfStream)
            {
                return(new ShipmentRequest
                {
                    IsLast = true,
                    IsValid = false
                });
            }

            var line  = reader.ReadLine();
            var parts = (line ?? string.Empty).Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);


            var result = new ShipmentRequest
            {
                IsValid = true,
                Source  = line,
                IsLast  = reader.EndOfStream
            };

            if (!ParseDate(parts[0], ref result) || !ParsePackageSize(parts[1], ref result) || !ParseProviderName(parts[2], ref result))
            {
                result.IsValid = false;
            }

            return(result);
        }
Ejemplo n.º 4
0
        public void Router_TryGetShipmentPrice_AccumulatedDiscount_DoesntExceedLimit()
        {
            // arrange
            var router = new Router();

            router.RegisterProvider(provider1);
            var successCount = new Dictionary <bool, int>
            {
                { true, 0 },
                { false, 0 }
            };
            ShipmentPrice lastPrice;
            var           request = new ShipmentRequest
            {
                IsValid      = true,
                ProviderName = "P1",
                PackageSize  = PackageSize.M,
                Date         = DateTime.Today
            };

            // act
            successCount[router.TryGetShipmentPrice(request, out lastPrice)]++;
            successCount[router.TryGetShipmentPrice(request, out lastPrice)]++;
            successCount[router.TryGetShipmentPrice(request, out lastPrice)]++;
            successCount[router.TryGetShipmentPrice(request, out lastPrice)]++;

            // assert
            successCount[true].Should().Be(4);
            successCount[false].Should().Be(0);

            lastPrice.Price.Should().Be(5);
            lastPrice.Discount.Should().Be(1);
        }
        /// <summary>
        /// Calculates the price for the given shipment <paramref name="request"/>
        /// </summary>
        /// <param name="request">Request to calculate the price for</param>
        public virtual ShipmentPrice GetShipmentPrice(ShipmentRequest request)
        {
            if (!request.IsValid || !request.ProviderName.Equals(ProviderName, StringComparison.OrdinalIgnoreCase) || !SupportedPackageSizes.Contains(request.PackageSize))
            {
                throw new NotSupportedException($"This provider ({ProviderName}) doesn't support processing {request.ProviderName} provider and/or {request.PackageSize} package size.");
            }

            if (request.PackageSize == PackageSize.S)
            {
                var originalPrice = PriceTable[request.PackageSize];
                var lowestPrice   = Router.GetLowestPriceForPackageSize(request.PackageSize).Item1;
                if (lowestPrice > 0)
                {
                    return(new ShipmentPrice
                    {
                        Price = lowestPrice,
                        Discount = originalPrice - lowestPrice
                    });
                }
            }

            return(new ShipmentPrice
            {
                Discount = 0,
                Price = PriceTable[request.PackageSize]
            });
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Sets shipment state for order items.
        /// Use this method when you use your own transporter.
        /// </summary>
        /// <param name="orderItemIds">The order item ids.</param>
        /// <param name="transporterCode">The transporter code.</param>
        /// <param name="trackingCode">The tracking code.</param>
        /// <returns>StatusResponse.</returns>
        public async Task <IEnumerable <StatusResponse> > ShipOrderItemsAsync(
            IEnumerable <string> orderItemIds,
            TransporterCode transporterCode,
            string trackingCode)
        {
            var result     = new List <StatusResponse>();
            var orderItems = orderItemIds.Select(oi => new ItemId(oi));

            foreach (var orderItem in orderItems)
            {
                var shipmentRequest = new ShipmentRequest()
                {
                    OrderItems = new[] { orderItem },
                    Transport  = new TransportInstruction()
                    {
                        TransporterCode = transporterCode.TransporterCodeValue,
                        TrackAndTrace   = trackingCode
                    }
                };

                result.Add(
                    await GetApiResult <StatusResponse>(
                        HttpMethod.Put,
                        $"{EndPoints.BaseUriApiCalls}{EndPoints.Orders}/shipment",
                        shipmentRequest
                        )
                    );
            }

            return(result);
        }
Ejemplo n.º 7
0
        public async Task <IReadOnlyList <Shipment> > GetAllAsync(
            int saleId,
            ShipmentRequest request,
            CancellationToken cancellationToken)
        {
            var shipmentsLink = await _linkFactory.CreateLinkAsync($"sales/{saleId}/shipments").ConfigureAwait(_halClient);

            return(await _halClient.GetAllPagesAsync <Shipment>(shipmentsLink, request, cancellationToken).ConfigureAwait(_halClient));
        }
Ejemplo n.º 8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override Task <ShipmentResponse> ProcessShipment(ShipmentRequest request, ServerCallContext context)
        {
            _logger.Information($"Shipment with PaymentId {request.PaymentId} processed.");

            return(Task.FromResult(new ShipmentResponse
            {
                ShipmentId = Guid.NewGuid().ToString()
            }));
        }
        public void CarrierBatch_Success()
        {
            var shipments = new List <ShipmentRequest>();

            foreach (var transactionNumber in Enumerable.Range(1, 100))
            {
                var shipment = new ShipmentRequest
                {
                    Sequence            = 1,
                    ShipToAddress1      = "123 SAMPLE STREET",
                    ShipToCountry       = "US",
                    ShipToName          = "JOHN SMITH",
                    ServiceCode         = "GRD",
                    TransactionNumber   = $"TEST {Guid.NewGuid()} {transactionNumber}",
                    ShipToPostal        = "46774",
                    ShipToCity          = "NEW HAVEN",
                    ShipToStateProvince = "IN",
                    ShipToPhone         = "11111111111",
                    Packages            = new Package[]
                    {
                        new Package {
                            Weight    = 2,
                            BoxHeight = 1,
                            BoxLength = 12,
                            BoxWidth  = 9,
                            Items     = new Item[]
                            {
                                new Item {
                                    Sku             = "TST",
                                    LotNumber       = "LT1",
                                    SerialNumber    = "",
                                    Description     = "TEST",
                                    Description2    = "",
                                    Quantity        = 1,
                                    UnitPrice       = 1,
                                    ExpirationDate  = "2099-07-19T17:12:02.731Z",
                                    Uom             = "Each",
                                    Supplier        = "",
                                    CountryOfOrigin = "US"
                                }
                            }
                        }
                    },
                    ClientCode = "Test",
                    Terms      = "SHIPPER"
                };

                shipments.Add(shipment);
            }

            var result = new Shipments(_apiKey, _secretKey).CarrierBatch(
                duplicateHandling: DuplicateHandling.Overwrite,
                shipments: shipments.ToArray()
                );

            Assert.IsNotNull(result);
        }
Ejemplo n.º 10
0
        public ShipmentNote(ShipmentRequest request)
        {
            var now = DateTime.Now;

            this.Request            = request;
            this.ConfirmationNumber = $"XX-{now.Ticks}";
            this.Created            = now;
            this.IsDelivered        = false;
        }
Ejemplo n.º 11
0
        public ShipmentResponse CallUPSShipmentRequest(string serviceCode, int ShipmentID)
        {
            //var dbShipment = ShipmentModule.GetShipmentByID(ShipmentID);
            var shipmentDetails = ShipmentModule.GetShipmentShipmentDetails(ShipmentID);

            var shpSvc          = new ShipService();
            var shipmentRequest = new ShipmentRequest();

            AddUpsSecurity(shpSvc);
            var request = new RequestType();

            String[] requestOption = { "1" }; //{ "nonvalidate" };
            request.RequestOption   = requestOption;
            shipmentRequest.Request = request;
            var shipment = new ShipmentType();

            shipment.Description = "Ship webservice example";
            AddShipper(shipment);
            AddShipFromAddress(shipment);
            AddShipToAddress(shipment);
            AddBillShipperAccount(shipment);
            //AddPaymentInformation(shipment);

            var service = new ServiceType();

            service.Code     = serviceCode;
            shipment.Service = service;

            PackageType[] pkgArray;
            pkgArray = new PackageType[shipmentDetails.Count];
            var i = 0;

            foreach (var box in shipmentDetails)
            {
                AddPackage(box.UnitWeight.Value, Convert.ToInt32(box.UnitPrice), box.DimensionH.Value, box.DimensionD.Value, box.DimensionL.Value, PackagingTypeCode, "USD", pkgArray, i);
                i = i + 1;
            }
            shipment.Package = pkgArray;

            var labelSpec      = new LabelSpecificationType();
            var labelStockSize = new LabelStockSizeType();

            labelStockSize.Height    = "3";
            labelStockSize.Width     = "2";
            labelSpec.LabelStockSize = labelStockSize;
            var labelImageFormat = new LabelImageFormatType();

            labelImageFormat.Code              = "GIF";//"SPL";
            labelSpec.LabelImageFormat         = labelImageFormat;
            shipmentRequest.LabelSpecification = labelSpec;
            shipmentRequest.Shipment           = shipment;

            var shipmentResponse = shpSvc.ProcessShipment(shipmentRequest);

            return(shipmentResponse);
        }
Ejemplo n.º 12
0
        private static bool ParsePackageSize(string input, ref ShipmentRequest request)
        {
            if (input.Length != 1)
            {
                return(false);
            }

            request.PackageSize = input[0];
            return(true);
        }
Ejemplo n.º 13
0
        private static bool ParseDate(string input, ref ShipmentRequest request)
        {
            if (!DateTime.TryParseExact(input, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out DateTime date))
            {
                return(false);
            }

            request.Date = date;
            return(true);
        }
Ejemplo n.º 14
0
        private static bool ParseProviderName(string input, ref ShipmentRequest request)
        {
            if (string.IsNullOrWhiteSpace(input))
            {
                return(false);
            }

            request.ProviderName = input;
            return(true);
        }
Ejemplo n.º 15
0
        public async Task CanCreateShipmentWithOnlyRequiredFields()
        {
            // the order needs to be autorized to do a shipment on. this can only be done by waiting.
            string           validOrderId    = "XXXXX";
            ShipmentRequest  shipmentRequest = this.CreateShipmentWithOnlyRequiredFields();
            ShipmentResponse result          = await this._shipmentClient.CreateShipmentAsync(validOrderId, shipmentRequest);

            // Then: Make sure we get a valid shipment response
            Assert.IsNotNull(result);
            Assert.IsTrue(result.CreatedAt >= DateTime.Now);
        }
Ejemplo n.º 16
0
        public async Task <Shipment> CreateAsync(int saleId, ShipmentRequest request, CancellationToken cancellationToken)
        {
            var createShipmentLink = await _linkFactory.CreateLinkAsync($"sales/{saleId}/shipments").ConfigureAwait(_halClient);

            var shipment = await _halClient.PutAsync <Shipment>(createShipmentLink, null, request, cancellationToken)
                           .ConfigureAwait(_halClient);

            // Work-around an issue in the API where the first request's shipment
            // isn't populated with links and embedded addresses
            return(await _halClient.PutAsync <Shipment>(createShipmentLink, null, request, cancellationToken)
                   .ConfigureAwait(_halClient));
        }
Ejemplo n.º 17
0
        public async Task <IActionResult> Create(Order order)
        {
            bool isValidOrder = true;

            foreach (var orderItem in order.OrderItems)
            {
                using (HttpClient client = new HttpClient())
                {
                    var stockRequest = new StockRequest {
                        ItemId = orderItem.ItemId
                    };

                    var content  = new StringContent(JsonConvert.SerializeObject(stockRequest), Encoding.UTF8, "application/json");
                    var response = client.PostAsync(_configuration["StockService"], content).Result;

                    var stockResponse = JsonConvert.DeserializeObject <StockResponse>(await response.Content.ReadAsStringAsync());

                    if (orderItem.Qty > stockResponse.Stock)
                    {
                        isValidOrder = false;
                        break;
                    }
                }
            }

            if (isValidOrder)
            {
                //Send shipment
                using (HttpClient client = new HttpClient())
                {
                    var shipmentRequest = new ShipmentRequest
                    {
                        CustomerEmail = order.Customer.Email,
                        CustomerName  = order.Customer.Name,
                        OrderId       = order.OrderNr,
                        ShipmentItems = order.OrderItems.Select(o => new ShipmentItem {
                            ItemId = o.ItemId, Qty = o.Qty
                        }).ToList()
                    };

                    var content = new StringContent(JsonConvert.SerializeObject(shipmentRequest), Encoding.UTF8, "application/json");
                    var result  = await client.PostAsync(_configuration["ShipmentService"], content);
                }


                return(Ok());
            }
            else
            {
                return(BadRequest("No stock available"));
            }
        }
        public void CarrierShipment_BadRequest()
        {
            var shipment = new ShipmentRequest
            {
                Sequence            = 1,
                ShipToAddress1      = "123 SAMPLE STREET",
                ShipToCountry       = "US",
                ShipToName          = "JOHN SMITH",
                CarrierCode         = "UPSN",
                ServiceCode         = "STD",
                TransactionNumber   = "987654321012345678909876543210123456789098765432101234567890987654321012345678909876543210123456789098765432101234567890987654321012345678909876543210123456789098765432101234567890987654321012345678909876543210123456789098765432101234567890987654321012345",
                ShipToPostal        = "46774",
                ShipToCity          = "NEW HAVEN",
                ShipToStateProvince = "IN",
                ShipToPhone         = "11111111111",
                Packages            = new Package[]
                {
                    new Package {
                        Weight    = 2,
                        BoxHeight = 1,
                        BoxLength = 12,
                        BoxWidth  = 9,
                        Items     = new Item[]
                        {
                            new Item {
                                Sku             = "TST",
                                LotNumber       = "LT1",
                                SerialNumber    = "",
                                Description     = "TEST",
                                Description2    = "",
                                Quantity        = 1,
                                UnitPrice       = 1,
                                ExpirationDate  = "2099-07-19T17:12:02.731Z",
                                Uom             = "Each",
                                Supplier        = "",
                                CountryOfOrigin = "US"
                            }
                        }
                    }
                },
                ClientCode = "Test",
                Terms      = "SHIPPER"
            };

            Assert.ThrowsExceptionAsync <ApplicationException>(
                async() => await new Shipments(_apiKey, _secretKey).Carrier(
                    duplicateHandling: DuplicateHandling.Overwrite,
                    shipment: shipment
                    )
                );
        }
Ejemplo n.º 19
0
        public ShipmentRequestTransactionBuilder Begin(long shipmentRequestId, DateTime utcNow)
        {
            m_shipmentRequest = m_ctx.ShipmentRequests.Where(r => r.ShipmentRequestId == shipmentRequestId).Single();
            m_utcNow          = utcNow;

            m_shipmentRequestTransaction = new ShipmentRequestTransaction()
            {
                ShipmentRequest        = m_shipmentRequest,
                TransactionDateTimeUtc = m_utcNow
            };
            _ = m_ctx.ShipmentRequestTransactions.Add(m_shipmentRequestTransaction);

            return(this);
        }
        public async Task RateShopShipment_Success()
        {
            var shipment = new ShipmentRequest
            {
                Sequence            = 1,
                ShipToAddress1      = "123 SAMPLE STREET",
                ShipToCountry       = "US",
                ShipToName          = "JOHN SMITH",
                ServiceCode         = "GRD",
                TransactionNumber   = "TEST123456788",
                ShipToPostal        = "46774",
                ShipToCity          = "NEW HAVEN",
                ShipToStateProvince = "IN",
                ShipToPhone         = "11111111111",
                Packages            = new Package[]
                {
                    new Package {
                        Weight    = 2,
                        BoxHeight = 1,
                        BoxLength = 12,
                        BoxWidth  = 9,
                        Items     = new Item[]
                        {
                            new Item {
                                Sku             = "TST",
                                LotNumber       = "LT1",
                                SerialNumber    = "",
                                Description     = "TEST",
                                Description2    = "",
                                Quantity        = 1,
                                UnitPrice       = 1,
                                ExpirationDate  = "2099-07-19T17:12:02.731Z",
                                Uom             = "Each",
                                Supplier        = "",
                                CountryOfOrigin = "US"
                            }
                        }
                    }
                },
                ClientCode = "Test",
                Terms      = "SHIPPER"
            };

            var result = await new Shipments(_apiKey, _secretKey).RateShop(
                duplicateHandling: DuplicateHandling.Overwrite,
                shipment: shipment
                );

            Assert.IsNotNull(result.ShipmentId);
        }
Ejemplo n.º 21
0
        public IHttpActionResult OrdedrShipment(ShipmentRequest shipmentRequest)
        {
            if (!shipmentRequestValidator.IsValid(shipmentRequest))
            {
                return(BadRequest());
            }

            var shipmentNote = shipmentDispatcher.Add(shipmentRequest);

            string routeName   = "RouteGetShipment";
            object routeValues = new { confirmationNumber = shipmentNote.ConfirmationNumber };
            var    content     = Map(shipmentNote);

            return(CreatedAtRoute(routeName, routeValues, content));
        }
Ejemplo n.º 22
0
        /// <summary>
        /// UpdateShipment
        /// Function to update the shipment details
        /// </summary>
        /// <param name="companyID">Company ID</param>
        /// <param name="password">Password</param>
        /// <param name="shipmentReq">ShipmentRequest object</param>
        /// <returns>ShipmentResponse object</returns>
        /// <param name="VersionNo">VersionNo</param>
        public ShipmentResponse UpdateShipment(string companyID, string password, ShipmentRequest shipmentReq, String VersionNo = "")
        {
            ShipmentResponse shipmentResponse = null;
            ISession         session          = null;

            try
            {
                ValidateCustomerLogin(companyID, password, VersionNo);
                session = GetSession();
                session.BeginTransaction();
                shipmentResponse = DALMethods.UpdateShipment(session, shipmentReq, VersionNo);
                DALMethods.ClearShipmentErrors(shipmentReq.SysTrxNo, shipmentReq.SysTrxLine, session, VersionNo);
                session.CommitTransaction();
                CloseSession(session);
            }
            catch (ApplicationException ex)
            {
                if (session != null)
                {
                    session.RollbackTransaction();
                    CloseSession(session);
                    session = GetSession();
                }
                //Logging.WriteToFile1("Dinesh 3- ");
                //Logging.WriteToFile1("Dinesh 4- ");
                DALMethods.UpdateShipmentErrors(shipmentReq, true, ex.StackTrace, ex.Message, session, VersionNo);
                throw ex;
            }
            catch (Exception ex)
            {
                if (session != null)
                {
                    session.RollbackTransaction();
                    CloseSession(session);
                }
                //session = GetSession();
                //DALMethods.UpdateShipmentErrors(shipmentReq, true, ex.StackTrace, ex.Message, session, VersionNo);
                Logging.LogError(ex);
                //Logging.WriteToFile1("Dinesh 4- ");
                //shipmentResponse = new ShipmentResponse();
                //shipmentResponse.ErrorMessage = ex.Message + " - " + ex.StackTrace;
                //Logging.WriteToFile1("Dinesh 5- ");
                //return shipmentResponse;
                throw ex;
            }

            return(shipmentResponse);
        }
Ejemplo n.º 23
0
 public async Task <IHttpActionResult> AddShipmentStatus(string containerId, [FromBody] ShipmentRequest request)
 {
     try
     {
         return(Ok(await Task.Run(async() =>
         {
             var result = await Constants.UnlockAccount();
             var ShipmentStatus = Constants.shipmentContract.GetFunction("ShipmentStatus");
             await Constants.web3.Miner.Start.SendRequestAsync();
             var transactionhash = await ShipmentStatus.SendTransactionAsync(Constants.senderAddress, new Nethereum.Hex.HexTypes.HexBigInteger("0x3d0900"), null, request.Id, Convert.ToInt32(request.Weight), DateTime.Now.ToString(), request.Desc, request.Status, Constants.trackingaddress, request.ContainerName, request.Source, request.Destination);
             var receipt = await Constants.MineAndGetReceiptAsync(Constants.web3, transactionhash);
             return receipt;
         })));
     }
     catch (Exception ex)
     {
         return(InternalServerError(ex));
     }
 }
Ejemplo n.º 24
0
        public async Task CreateShipmentRequestAsync(IEnumerable <int> requestIdList, int shipmentId)
        {
            int i = 1;

            foreach (int requestId in requestIdList)
            {
                var entity = new ShipmentRequest();

                entity.RequestId    = requestId;
                entity.ShipmentId   = shipmentId;
                entity.RequestOrder = i++;
                entity.Note         = "";
                entity.Status       = ShipmentRequestStatus.WAITING;

                _uow.GetRepository <IShipmentRequestRepository>().Create(entity);
            }

            await _uow.SaveChangesAsync();
        }
Ejemplo n.º 25
0
        public ShipmentRequestTransactionBuilder Begin(ShipmentRequest dbShipmentRequest, string description, DateTime utcNow)
        {
            if (string.IsNullOrEmpty(description))
            {
                throw new ArgumentNullException(nameof(description));
            }

            m_shipmentRequest = dbShipmentRequest;
            m_utcNow          = utcNow;

            m_shipmentRequestTransaction = new ShipmentRequestTransaction()
            {
                ShipmentRequest        = m_shipmentRequest,
                TransactionDateTimeUtc = m_utcNow,
                Description            = description
            };
            _ = m_ctx.ShipmentRequestTransactions.Add(m_shipmentRequestTransaction);

            return(this);
        }
Ejemplo n.º 26
0
        public void Router_TryGetShipmentPrice_AccumulatedDiscount_DoesntAffectDifferentMonth()
        {
            // arrange
            var router = new Router();

            router.RegisterProvider(provider1);
            var successCount = new Dictionary <bool, int>
            {
                { true, 0 },
                { false, 0 }
            };
            ShipmentPrice lastPrice1;
            ShipmentPrice lastPrice2;
            var           request = new ShipmentRequest
            {
                IsValid      = true,
                ProviderName = "P1",
                PackageSize  = PackageSize.M,
                Date         = DateTime.Today
            };

            // act
            successCount[router.TryGetShipmentPrice(request, out lastPrice1)]++;
            successCount[router.TryGetShipmentPrice(request, out lastPrice1)]++;
            successCount[router.TryGetShipmentPrice(request, out lastPrice1)]++;
            successCount[router.TryGetShipmentPrice(request, out lastPrice1)]++;
            successCount[router.TryGetShipmentPrice(request, out lastPrice1)]++;

            request.Date = request.Date.AddMonths(1);
            successCount[router.TryGetShipmentPrice(request, out lastPrice2)]++;

            // assert
            successCount[true].Should().Be(6);
            successCount[false].Should().Be(0);

            lastPrice1.Price.Should().Be(6);
            lastPrice1.Discount.Should().Be(0);

            lastPrice2.Price.Should().Be(3);
            lastPrice2.Discount.Should().Be(3);
        }
Ejemplo n.º 27
0
        public async Task <ShipmentResponse> PostShipment(ShipmentRequest shipment)
        {
            var currentTime = GetCurrentTime();
            var hash        = CreateHash(_loginId + currentTime + shipment.SenderPostalcode + shipment.RecipientPostalcode, _apiKey);

            shipment.LoginId    = _loginId;
            shipment.Date       = currentTime;
            shipment.HmacSha256 = hash;

            var content  = new StringContent(JsonHelper.Serialize(shipment));
            var response = await _httpClient.PostAsync("zending.php", content).ConfigureAwait(false);

            var jsonResult = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

            if (response.IsSuccessStatusCode)
            {
                return(JsonHelper.Deserialize <ShipmentResponse>(jsonResult));
            }
            var error = JsonHelper.Deserialize <Error>(jsonResult);

            throw new Exception(error.Message);
        }
Ejemplo n.º 28
0
        /// <summary>
        /// Calculates the price for the given shipment <paramref name="request"/>
        /// </summary>
        /// <param name="request">Request to calculate the price for</param>
        public override ShipmentPrice GetShipmentPrice(ShipmentRequest request)
        {
            if (request.PackageSize == PackageSize.L)
            {
                var dateHash = GetDateHash(request.Date);
                if (!largePackagesPerMonth.ContainsKey(dateHash))
                {
                    largePackagesPerMonth.Add(dateHash, 0);
                }

                if (++largePackagesPerMonth[dateHash] == 3)
                {
                    var price = base.GetShipmentPrice(request);

                    price.Discount = price.Price;
                    price.Price    = 0;

                    return(price);
                }
            }

            return(base.GetShipmentPrice(request));
        }
Ejemplo n.º 29
0
        //Add seed data of Shipment_Request
        private static void SeedShipmentRequestData(ApplicationDbContext dbContext)
        {
            Random   ran = new Random();
            DateTime RequestEstimateDate = FormatDateTime(DateTime.Now);

            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    var shipmentRequest = new ShipmentRequest
                    {
                        ShipmentId            = i + 1,
                        RequestId             = (i * 5) + j + 1,
                        RequestOrder          = j + 1,
                        Note                  = "",
                        Status                = "Waiting",
                        RequestEstimateDate   = RequestEstimateDate.AddDays(ran.Next(0, i % 2 + 1)),
                        RequestDeliveriedDate = RequestEstimateDate.AddDays(ran.Next(2, i % 7 + 3))
                    };
                    dbContext.Add(shipmentRequest);
                    dbContext.SaveChanges();
                }
            }
        }
Ejemplo n.º 30
0
        public void address_elements_that_have_leading_and_trailing_white_space_should_be_trimed(string testZip, string expectedZip)
        {
            var example = new ShipmentRequest();

            example.ShipTo = new Address()
            {
                Address1   = "",
                Address2   = "",
                Email      = "*****@*****.**",
                Name       = "Someone being tested",
                Phone      = "",
                Postcode   = testZip,
                State      = "",
                Town       = "",
                IsoCountry = "DE"
            };

            example.Shipper = new Shipper();

            example.Packages = new System.Collections.Generic.List <Package>();

            example.Packages.Add(new Package());

            example.Carrier = new Carrier()
            {
                Extra = "{\"product\":\"V01PAK\", \"accounatNumber\":\"22222222220101\"}"
            };

            var mapper = new ShipmentOrderMapper();

            var mappedOrder = mapper.Map(example, new ConsoleLogger(), "poop", null);

            var address = mappedOrder.Shipment.Receiver.Item as ReceiverNativeAddressType;

            address.zip.Should().Be(expectedZip);
        }