feat(dashboard, js-sdk, medusa, tax, types): custom tax providers (#12297)

* wip: setup loaders, add endpoints, module work, types, js sdk

* fix: tax module provider loader

* feat: select provider on region create, fix enpoint middleware registration

* feat: edit form

* fix: rename param

* chore: changeset

* fix: don't default to system provider

* fix: admin fixes, dispalt tax provider

* fix: some tests and types

* fix: remove provider from province regions in test

* fix: more tests, optional provider for sublevel regions, fix few types

* fix: OE test

* feat: edit tax region admin, update tax region core flow changes

* feat: migrate script

* fix: refactor

* chore: use query graph

* feat: provider section
This commit is contained in:
Frane Polić
2025-05-06 19:26:33 +02:00
committed by GitHub
parent 405ee7f7f3
commit 9cedeb182d
48 changed files with 847 additions and 116 deletions
@@ -0,0 +1,49 @@
import { updateTaxRegionsStep, useQueryGraphStep } from "@medusajs/core-flows"
import { ExecArgs } from "@medusajs/framework/types"
import { ContainerRegistrationKeys } from "@medusajs/framework/utils"
import { transform, WorkflowResponse } from "@medusajs/framework/workflows-sdk"
import { createWorkflow } from "@medusajs/framework/workflows-sdk"
const assignSystemProviderToTaxRegionsWorkflow = createWorkflow(
"assign-system-provider-to-tax-regions",
() => {
const { data: taxRegions } = useQueryGraphStep({
entity: "tax_region",
fields: ["id", "provider_id", "province_code"],
})
const updateData = transform({ taxRegions }, ({ taxRegions }) => {
/**
* Update only parent regions that don't have a provider set.
*/
return taxRegions
.filter(
(taxRegion) => !taxRegion.province_code && !taxRegion.provider_id
)
.map((taxRegion) => ({
id: taxRegion.id,
provider_id: "tp_system_system",
}))
})
updateTaxRegionsStep(updateData)
return new WorkflowResponse(void 0)
}
)
export default async function assignTaxSystemProviderToTaxRegions({
container,
}: ExecArgs) {
const logger = container.resolve(ContainerRegistrationKeys.LOGGER)
logger.info("Assigning tax system provider to tax regions")
try {
await assignSystemProviderToTaxRegionsWorkflow(container).run()
logger.info("System provider assigned to tax regions")
} catch (e) {
logger.error(e)
throw e
}
}