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")
|
avataxEntityCode: metafield(key: "avataxEntityCode")
|
||||||
avataxTaxCalculationDate: metafield(key: "avataxTaxCalculationDate")
|
avataxTaxCalculationDate: metafield(key: "avataxTaxCalculationDate")
|
||||||
|
avataxDocumentCode: metafield(key: "avataxDocumentCode")
|
||||||
}
|
}
|
||||||
fragment OrderConfirmedEventSubscription on Event {
|
fragment OrderConfirmedEventSubscription on Event {
|
||||||
__typename
|
__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 { AvataxOrderConfirmedPayloadLinesTransformer } from "./avatax-order-confirmed-payload-lines-transformer";
|
||||||
import { AvataxEntityTypeMatcher } from "../avatax-entity-type-matcher";
|
import { AvataxEntityTypeMatcher } from "../avatax-entity-type-matcher";
|
||||||
import { AvataxOrderConfirmedCalculationDateResolver } from "./avatax-order-confirmed-calculation-date-resolver";
|
import { AvataxOrderConfirmedCalculationDateResolver } from "./avatax-order-confirmed-calculation-date-resolver";
|
||||||
|
import { AvataxOrderConfirmedDocumentCodeResolver } from "./avatax-order-confirmed-document-code-resolver";
|
||||||
|
|
||||||
export const SHIPPING_ITEM_CODE = "Shipping";
|
export const SHIPPING_ITEM_CODE = "Shipping";
|
||||||
|
|
||||||
|
@ -31,12 +32,15 @@ export class AvataxOrderConfirmedPayloadTransformer {
|
||||||
const linesTransformer = new AvataxOrderConfirmedPayloadLinesTransformer();
|
const linesTransformer = new AvataxOrderConfirmedPayloadLinesTransformer();
|
||||||
const dateResolver = new AvataxOrderConfirmedCalculationDateResolver();
|
const dateResolver = new AvataxOrderConfirmedCalculationDateResolver();
|
||||||
const entityTypeMatcher = new AvataxEntityTypeMatcher({ client: avataxClient });
|
const entityTypeMatcher = new AvataxEntityTypeMatcher({ client: avataxClient });
|
||||||
|
const documentCodeResolver = new AvataxOrderConfirmedDocumentCodeResolver();
|
||||||
|
|
||||||
const entityUseCode = await entityTypeMatcher.match(order.avataxEntityCode);
|
const entityUseCode = await entityTypeMatcher.match(order.avataxEntityCode);
|
||||||
const date = dateResolver.resolve(order);
|
const date = dateResolver.resolve(order);
|
||||||
|
const code = documentCodeResolver.resolve(order);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
model: {
|
model: {
|
||||||
|
code,
|
||||||
type: this.matchDocumentType(avataxConfig),
|
type: this.matchDocumentType(avataxConfig),
|
||||||
entityUseCode,
|
entityUseCode,
|
||||||
customerCode:
|
customerCode:
|
||||||
|
|
Loading…
Reference in a new issue