diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/Messaging/InvoiceRequest.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/Messaging/InvoiceRequest.cs new file mode 100644 index 00000000..d97facc1 --- /dev/null +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/Messaging/InvoiceRequest.cs @@ -0,0 +1,70 @@ +namespace FikaAmazonAPI.AmazonSpApiSDK.Models.Messaging +{ + using System; + using System.Linq; + using System.Text; + using Newtonsoft.Json; + using System.Collections.Generic; + using System.Runtime.Serialization; + using System.ComponentModel.DataAnnotations; + + [DataContract] + public partial class InvoiceRequest : IEquatable, IValidatableObject + { + public InvoiceRequest(List attachments = default(List), DateTime? coverageStartDate = default(DateTime?), DateTime? coverageEndDate = default(DateTime?)) + { + this.Attachments = attachments; + } + + [DataMember(Name = "attachments", EmitDefaultValue = false)] + public List Attachments { get; set; } + + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class InvoiceRequest {\n"); + sb.Append(" Attachments: ").Append(Attachments).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + public override bool Equals(object input) + { + return this.Equals(input as InvoiceRequest); + } + + public bool Equals(InvoiceRequest input) + { + if (input == null) + return false; + + return + ( + this.Attachments == input.Attachments || + this.Attachments != null && + this.Attachments.SequenceEqual(input.Attachments) + ); + } + + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Attachments != null) + hashCode = hashCode * 59 + this.Attachments.GetHashCode(); + return hashCode; + } + } + + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } +} \ No newline at end of file diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/Messaging/InvoiceResponse.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/Messaging/InvoiceResponse.cs new file mode 100644 index 00000000..30358cd9 --- /dev/null +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/Messaging/InvoiceResponse.cs @@ -0,0 +1,74 @@ +namespace FikaAmazonAPI.AmazonSpApiSDK.Models.Messaging +{ + using System; + using System.Text; + using Newtonsoft.Json; + using System.Collections.Generic; + using System.Runtime.Serialization; + using System.ComponentModel.DataAnnotations; + + [DataContract] + public partial class InvoiceResponse : IEquatable, IValidatableObject + { + public InvoiceResponse(ErrorList errors = default(ErrorList)) + { + this.Errors = errors; + } + + public InvoiceResponse() + { + this.Errors = default(ErrorList); + } + + [DataMember(Name = "errors", EmitDefaultValue = false)] + public ErrorList Errors { get; set; } + + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class InvoiceResponse {\n"); + sb.Append(" Errors: ").Append(Errors).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + public override bool Equals(object input) + { + return this.Equals(input as InvoiceResponse); + } + + public bool Equals(InvoiceResponse input) + { + if (input == null) + return false; + + return + ( + this.Errors == input.Errors || + (this.Errors != null && + this.Errors.Equals(input.Errors)) + ); + } + + public override int GetHashCode() + { + unchecked + { + int hashCode = 41; + if (this.Errors != null) + hashCode = hashCode * 59 + this.Errors.GetHashCode(); + return hashCode; + } + } + + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } +} \ No newline at end of file diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/AvailableValueAddedServiceGroupList.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/AvailableValueAddedServiceGroupList.cs index c43b7136..107e4e2f 100644 --- a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/AvailableValueAddedServiceGroupList.cs +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/AvailableValueAddedServiceGroupList.cs @@ -10,7 +10,7 @@ namespace FikaAmazonAPI.AmazonSpApiSDK.Models.ShippingV2 { /// /// A list of value-added services available for a shipping service offering. /// - [DataContract] + [CollectionDataContract] public class AvailableValueAddedServiceGroupList : List { /// @@ -32,5 +32,5 @@ public override string ToString() { return JsonConvert.SerializeObject(this, Formatting.Indented); } -} + } } diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/ChargeList.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/ChargeList.cs index b1376342..1af784c1 100644 --- a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/ChargeList.cs +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/ChargeList.cs @@ -10,7 +10,7 @@ namespace FikaAmazonAPI.AmazonSpApiSDK.Models.ShippingV2 { /// /// A list of charges based on the shipping service charges applied on a package. /// - [DataContract] + [CollectionDataContract] public class ChargeList : List { /// diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/IneligibleRateList.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/IneligibleRateList.cs index 4ac44e70..0711d96a 100644 --- a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/IneligibleRateList.cs +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/IneligibleRateList.cs @@ -10,7 +10,7 @@ namespace FikaAmazonAPI.AmazonSpApiSDK.Models.ShippingV2 { /// /// A list of ineligible shipping service offerings. /// - [DataContract] + [CollectionDataContract] public class IneligibleRateList : List { /// diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/ItemList.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/ItemList.cs index dd87d103..112b0d9d 100644 --- a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/ItemList.cs +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/ItemList.cs @@ -10,7 +10,7 @@ namespace FikaAmazonAPI.AmazonSpApiSDK.Models.ShippingV2 { /// /// A list of items. /// - [DataContract] + [CollectionDataContract] public class ItemList : List { /// diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PackageDocumentDetailList.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PackageDocumentDetailList.cs index a32dab7a..9993ed19 100644 --- a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PackageDocumentDetailList.cs +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PackageDocumentDetailList.cs @@ -10,7 +10,7 @@ namespace FikaAmazonAPI.AmazonSpApiSDK.Models.ShippingV2 { /// /// A list of post-purchase details about a package that will be shipped using a shipping service. /// - [DataContract] + [CollectionDataContract] public class PackageDocumentDetailList : List { /// diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PackageDocumentList.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PackageDocumentList.cs index 1e3250c5..dd9bb50a 100644 --- a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PackageDocumentList.cs +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PackageDocumentList.cs @@ -10,7 +10,7 @@ namespace FikaAmazonAPI.AmazonSpApiSDK.Models.ShippingV2 { /// /// A list of documents related to a package. /// - [DataContract] + [CollectionDataContract] public class PackageDocumentList : List { /// diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PackageList.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PackageList.cs index 8d987e10..a3a1f91d 100644 --- a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PackageList.cs +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PackageList.cs @@ -10,7 +10,7 @@ namespace FikaAmazonAPI.AmazonSpApiSDK.Models.ShippingV2 { /// /// A list of packages to be shipped through a shipping service offering. /// - [DataContract] + [CollectionDataContract] public class PackageList : List { /// diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PrintOptionList.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PrintOptionList.cs index cfa12b48..fa785e91 100644 --- a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PrintOptionList.cs +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/PrintOptionList.cs @@ -10,7 +10,7 @@ namespace FikaAmazonAPI.AmazonSpApiSDK.Models.ShippingV2 { /// /// A list of the format options for a label. /// - [DataContract] + [CollectionDataContract] public class PrintOptionList : List { /// diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/RateList.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/RateList.cs index 85b3c7a2..0a1dccba 100644 --- a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/RateList.cs +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/RateList.cs @@ -10,7 +10,7 @@ namespace FikaAmazonAPI.AmazonSpApiSDK.Models.ShippingV2 { /// /// A list of eligible shipping service offerings. /// - [DataContract] + [CollectionDataContract] public class RateList : List { /// diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/RequestedValueAddedServiceList.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/RequestedValueAddedServiceList.cs index 5e271045..3a3eac0b 100644 --- a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/RequestedValueAddedServiceList.cs +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/RequestedValueAddedServiceList.cs @@ -10,7 +10,7 @@ namespace FikaAmazonAPI.AmazonSpApiSDK.Models.ShippingV2 { /// /// The value-added services to be added to a shipping service purchase. /// - [DataContract] + [CollectionDataContract] public class RequestedValueAddedServiceList : List { /// diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/SupportedDocumentSpecificationList.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/SupportedDocumentSpecificationList.cs index bbfde7aa..b51c39d1 100644 --- a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/SupportedDocumentSpecificationList.cs +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/SupportedDocumentSpecificationList.cs @@ -10,7 +10,7 @@ namespace FikaAmazonAPI.AmazonSpApiSDK.Models.ShippingV2 { /// /// A list of the document specifications supported for a shipment service offering. /// - [DataContract] + [CollectionDataContract] public class SupportedDocumentSpecificationList : List { /// diff --git a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/TaxDetailList.cs b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/TaxDetailList.cs index e0063c54..049d0421 100644 --- a/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/TaxDetailList.cs +++ b/Source/FikaAmazonAPI/AmazonSpApiSDK/Models/ShippingV2/TaxDetailList.cs @@ -10,7 +10,7 @@ namespace FikaAmazonAPI.AmazonSpApiSDK.Models.ShippingV2 { /// /// A list of tax detail information. /// - [DataContract] + [CollectionDataContract] public class TaxDetailList : List { /// diff --git a/Source/FikaAmazonAPI/Services/ApiUrls.cs b/Source/FikaAmazonAPI/Services/ApiUrls.cs index 3d9e43b0..c9f590c8 100644 --- a/Source/FikaAmazonAPI/Services/ApiUrls.cs +++ b/Source/FikaAmazonAPI/Services/ApiUrls.cs @@ -177,6 +177,7 @@ protected class MessaginApiUrls public static string GetAttributes(string amazonOrderId) => $"{_resourceBaseUrl}/orders/{amazonOrderId}/attributes"; public static string CreateDigitalAccessKey(string amazonOrderId) => $"{_resourceBaseUrl}/orders/{amazonOrderId}/messages/digitalAccessKey"; public static string CreateUnexpectedProblem(string amazonOrderId) => $"{_resourceBaseUrl}/orders/{amazonOrderId}/messages/unexpectedProblem"; + public static string SendInvoice(string amazonOrderId) => $"{_resourceBaseUrl}/orders/{amazonOrderId}/messages/invoice"; } protected class EasyShip20220323 { diff --git a/Source/FikaAmazonAPI/Services/MessagingService.cs b/Source/FikaAmazonAPI/Services/MessagingService.cs index b9f00958..e3bedc41 100644 --- a/Source/FikaAmazonAPI/Services/MessagingService.cs +++ b/Source/FikaAmazonAPI/Services/MessagingService.cs @@ -194,7 +194,18 @@ public async Task CreateUnexpectedProblemAsync(string amazonOrderId, Creat return false; } + public bool SendInvoice(string amazonOrderId, InvoiceRequest invoiceRequest) => + Task.Run(() => SendInvoiceAsync(amazonOrderId, invoiceRequest)).ConfigureAwait(false).GetAwaiter().GetResult(); + public async Task SendInvoiceAsync(string amazonOrderId, InvoiceRequest invoiceRequest, CancellationToken cancellationToken = default) + { + List> queryParameters = new List>(); + queryParameters.Add(new KeyValuePair("marketplaceIds", AmazonCredential.MarketPlace.ID)); + await CreateAuthorizedRequestAsync(MessaginApiUrls.SendInvoice(amazonOrderId), RestSharp.Method.Post, queryParameters, postJsonObj: invoiceRequest, cancellationToken: cancellationToken); - + var response = await ExecuteRequestAsync(RateLimitType.Messaging_CreateUnexpectedProblem, cancellationToken); + if (response != null) + return true; + return false; + } } -} +} \ No newline at end of file diff --git a/Source/FikaAmazonAPI/Services/ShippingServiceV2.cs b/Source/FikaAmazonAPI/Services/ShippingServiceV2.cs index 23c0727f..2a8f518b 100644 --- a/Source/FikaAmazonAPI/Services/ShippingServiceV2.cs +++ b/Source/FikaAmazonAPI/Services/ShippingServiceV2.cs @@ -17,7 +17,7 @@ public bool CancelShipment(string shipmentId) => Task.Run(() => CancelShipmentAsync(shipmentId)).ConfigureAwait(false).GetAwaiter().GetResult(); public async Task CancelShipmentAsync(string shipmentId, CancellationToken cancellationToken = default) { - await CreateAuthorizedRequestAsync(ShippingApiV2Urls.CancelShipment(shipmentId), RestSharp.Method.Post, cancellationToken: cancellationToken); + await CreateAuthorizedRequestAsync(ShippingApiV2Urls.CancelShipment(shipmentId), RestSharp.Method.Put, cancellationToken: cancellationToken); var response = await ExecuteRequestAsync(RateLimitType.ShippingV2_CancelShipment, cancellationToken); if (response != null) return true;