Demo

PartnerService

Builtin CRUD and search for partners (customers and suppliers). Prefer this over a plugin-local partner table.

Inject

TSXinject
1import { 2 ContainerRegistryManager, 3 PartnerService, 4 Inject, 5 Service, 6} from "@quan-erp/shared-backend-core"; 7 8@Service() 9export class MyPluginService { 10 @Inject(PartnerService, ContainerRegistryManager.BUILTIN_PLUGIN) 11 private partnerService: PartnerService; 12}

Lookup methods

  • getPartnerById(id: number): Promise<PartnerEntity | null> — one partner by id
  • getPartner({ search?, isCustomer?, isSupplier?, skip, limit }): Promise<PartnerEntity[]> — paginated list with optional filters (skip/limit required; defaults in callers often 0 / 20)
  • sportlightSearch(dto: SportlightSearchDto, user: RequestedUser) — Spotlight search integration (spelling matches source API)
TSXlookup
1import { 2 ContainerRegistryManager, 3 Inject, 4 PartnerService, 5 Service, 6} from "@quan-erp/shared-backend-core"; 7 8@Service() 9export class SalePartnerService { 10 @Inject(PartnerService, ContainerRegistryManager.BUILTIN_PLUGIN) 11 private partnerService: PartnerService; 12 13 async customers(search?: string) { 14 return this.partnerService.getPartner({ 15 search, 16 isCustomer: true, 17 skip: 0, 18 limit: 20, 19 }); 20 } 21 22 async byId(id: number) { 23 return this.partnerService.getPartnerById(id); 24 } 25}

Create / update / delete

CreateServiceProps wraps { data, manager?, createdByUserId? }. Keep isCustomer / isSupplier aligned with how the partner is used.

  • create(props: CreateServiceProps<CreatePartnerDto & OptionalCreatedByUser>) — create one partner (firstName, lastName required; phone, email, tags, flags optional)
  • createMany(props: CreateServiceProps<CreatePartnerDto[] & OptionalCreatedByUser>) — bulk create
  • update(id: number, partner: CreatePartnerDto, updateBy?: number) — update by id
  • delete(id: number) — delete partner by id
TSXcreate
1import { 2 ContainerRegistryManager, 3 Inject, 4 PartnerService, 5 Service, 6} from "@quan-erp/shared-backend-core"; 7 8@Service() 9export class CustomerOnboardService { 10 @Inject(PartnerService, ContainerRegistryManager.BUILTIN_PLUGIN) 11 private partnerService: PartnerService; 12 13 async createCustomer(createdByUserId: number) { 14 return this.partnerService.create({ 15 createdByUserId, 16 data: { 17 firstName: "Aung", 18 lastName: "Kyaw", 19 phone: "09123456789", 20 isCustomer: true, 21 isSupplier: false, 22 }, 23 }); 24 } 25}

Notes

  • Prefer this service over inventing plugin-local customer/vendor entities
  • Frontend partner hooks/components are exposed from the base plugin (PartnerDropdown, usePartnerQuery, …)