feat: ✨ provide document code through metadata field
This commit is contained in:
parent
6106e1d5fa
commit
25696d6a98
4 changed files with 39 additions and 0 deletions
|
@ -66,6 +66,7 @@ fragment OrderConfirmedSubscription on Order {
|
|||
}
|
||||
avataxEntityCode: metafield(key: "avataxEntityCode")
|
||||
avataxTaxCalculationDate: metafield(key: "avataxTaxCalculationDate")
|
||||
avataxDocumentCode: metafield(key: "avataxDocumentCode")
|
||||
}
|
||||
fragment OrderConfirmedEventSubscription on Event {
|
||||
__typename
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql";
|
||||
import { AvataxOrderConfirmedDocumentCodeResolver } from "./avatax-order-confirmed-document-code-resolver";
|
||||
import { expect, describe, it } from "vitest";
|
||||
|
||||
const resolver = new AvataxOrderConfirmedDocumentCodeResolver();
|
||||
|
||||
describe("AvataxOrderConfirmedDocumentCodeResolver", () => {
|
||||
it("returns document code when provided in metadata", () => {
|
||||
expect(
|
||||
resolver.resolve({
|
||||
id: "id",
|
||||
avataxDocumentCode: "123",
|
||||
} as unknown as OrderConfirmedSubscriptionFragment)
|
||||
).toBe("123");
|
||||
});
|
||||
it("returns order id when document code is not provided in metadata", () => {
|
||||
expect(
|
||||
resolver.resolve({
|
||||
id: "id",
|
||||
} as unknown as OrderConfirmedSubscriptionFragment)
|
||||
).toBe("id");
|
||||
});
|
||||
});
|
|
@ -0,0 +1,11 @@
|
|||
import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql";
|
||||
|
||||
export class AvataxOrderConfirmedDocumentCodeResolver {
|
||||
resolve(order: OrderConfirmedSubscriptionFragment): string {
|
||||
/*
|
||||
* The value for "code" can be provided in the metadata.
|
||||
* Read more: https://developer.avalara.com/erp-integration-guide/sales-tax-badge/transactions/cert-document-codes/
|
||||
*/
|
||||
return order.avataxDocumentCode ?? order.id;
|
||||
}
|
||||
}
|
|
@ -8,6 +8,7 @@ import { AvataxTaxCodeMatches } from "../tax-code/avatax-tax-code-match-reposito
|
|||
import { AvataxOrderConfirmedPayloadLinesTransformer } from "./avatax-order-confirmed-payload-lines-transformer";
|
||||
import { AvataxEntityTypeMatcher } from "../avatax-entity-type-matcher";
|
||||
import { AvataxOrderConfirmedCalculationDateResolver } from "./avatax-order-confirmed-calculation-date-resolver";
|
||||
import { AvataxOrderConfirmedDocumentCodeResolver } from "./avatax-order-confirmed-document-code-resolver";
|
||||
|
||||
export const SHIPPING_ITEM_CODE = "Shipping";
|
||||
|
||||
|
@ -31,12 +32,15 @@ export class AvataxOrderConfirmedPayloadTransformer {
|
|||
const linesTransformer = new AvataxOrderConfirmedPayloadLinesTransformer();
|
||||
const dateResolver = new AvataxOrderConfirmedCalculationDateResolver();
|
||||
const entityTypeMatcher = new AvataxEntityTypeMatcher({ client: avataxClient });
|
||||
const documentCodeResolver = new AvataxOrderConfirmedDocumentCodeResolver();
|
||||
|
||||
const entityUseCode = await entityTypeMatcher.match(order.avataxEntityCode);
|
||||
const date = dateResolver.resolve(order);
|
||||
const code = documentCodeResolver.resolve(order);
|
||||
|
||||
return {
|
||||
model: {
|
||||
code,
|
||||
type: this.matchDocumentType(avataxConfig),
|
||||
entityUseCode,
|
||||
customerCode:
|
||||
|
|
Loading…
Reference in a new issue