File

apps/recallassess/recallassess-api/src/api/admin/invoice/config/invoice-config.service.ts

Extends

ModuleConfigBase

Index

Methods

Methods

getConfiguration
getConfiguration()
Returns : ModuleConfig
import { ColumnConfig, ColumnType } from "@bish-nest/core/app-config/column-config.class";
import { ModuleConfig } from "@bish-nest/core/app-config/module-config.class";
import { ModuleConfigBase } from "@bish-nest/core/app-config/module-config-base.class";
import { Injectable } from "@nestjs/common";
import { BillingCycle, InvoiceStatus, InvoiceType, PackageType } from "@prisma/client";
import { InvoiceAddDto } from "../dto/invoice-add.dto";
import { InvoiceDetailDto } from "../dto/invoice-detail.dto";
import { InvoiceListDto } from "../dto/invoice-list.dto";
import { InvoiceSaveDto } from "../dto/invoice-save.dto";

@Injectable()
export class InvoiceConfig extends ModuleConfigBase {
  getConfiguration(): ModuleConfig {
    const columns: ColumnConfig[] = [
      new ColumnConfig({ name: "id", type: ColumnType.Integer }),
      new ColumnConfig({ name: "company_id", type: ColumnType.Integer }),
      new ColumnConfig({ name: "company_name", relationPath: "company.name" }),
      new ColumnConfig({ name: "subscription_id", type: ColumnType.Integer }),
      new ColumnConfig({ name: "invoice_number" }),
      new ColumnConfig({ name: "unit_price_per_license", type: ColumnType.Float }),
      new ColumnConfig({ name: "license_quantity", type: ColumnType.Integer }),
      new ColumnConfig({ name: "proration_ratio", type: ColumnType.Float }),
      new ColumnConfig({ name: "proration_amount", type: ColumnType.Float }),
      new ColumnConfig({ name: "gross_license_amount", type: ColumnType.Float }),
      new ColumnConfig({ name: "discount_amount", type: ColumnType.Float }),
      new ColumnConfig({ name: "coupon_code" }),
      new ColumnConfig({ name: "processing_fee_percentage", type: ColumnType.Float }),
      new ColumnConfig({ name: "processing_fee", type: ColumnType.Float }),
      new ColumnConfig({ name: "vat_fee_percentage", type: ColumnType.Float }),
      new ColumnConfig({ name: "vat_fee", type: ColumnType.Float }),
      new ColumnConfig({ name: "subtotal_amount", type: ColumnType.Float }),
      new ColumnConfig({ name: "pre_vat_total_amount", type: ColumnType.Float }),
      new ColumnConfig({ name: "total_amount", type: ColumnType.Float }),
      new ColumnConfig({ name: "period_start", type: ColumnType.DateTime }),
      new ColumnConfig({ name: "period_end", type: ColumnType.DateTime }),
      new ColumnConfig({
        name: "package_type",
        isEnumType: true,
        enumValues: Object.values(PackageType),
      }),
      new ColumnConfig({
        name: "billing_cycle",
        isEnumType: true,
        enumValues: Object.values(BillingCycle),
      }),
      new ColumnConfig({ name: "parent_invoice_id", type: ColumnType.Integer }),
      new ColumnConfig({ name: "parent_invoice_number", relationPath: "parentInvoice.invoice_number" }),
      new ColumnConfig({
        name: "status",
        isEnumType: true,
        enumValues: Object.values(InvoiceStatus),
      }),
      new ColumnConfig({
        name: "invoice_type",
        isEnumType: true,
        enumValues: Object.values(InvoiceType),
      }),
      new ColumnConfig({ name: "stripe_invoice_id" }),
      new ColumnConfig({ name: "stripe_payment_intent_id" }),
      new ColumnConfig({ name: "stripe_charge_id" }),
      new ColumnConfig({ name: "stripe_checkout_session_id" }),
      new ColumnConfig({ name: "paid_date", type: ColumnType.DateTime }),
      new ColumnConfig({ name: "failure_code" }),
      new ColumnConfig({ name: "failure_message" }),
      new ColumnConfig({ name: "billing_reference_notes" }),
      new ColumnConfig({ name: "created_at", type: ColumnType.DateTime }),
      new ColumnConfig({ name: "updated_at", type: ColumnType.DateTime }),
    ];

    return new ModuleConfig({
      name: "invoice",
      repoName: "invoice", // Explicitly set repoName to match Prisma model
      columns,
      keywordSearchCols: [
        // Allow keyword search by table's numeric ID.
        "id",
        "invoice_number",
        "company.name",
        "status",
        "invoice_type",
        "total_amount",
        "stripe_invoice_id",
        "stripe_payment_intent_id",
        "billing_reference_notes",
        // Dates
        "paid_date",
        "created_at",
      ],

      relationObjToIncludeForList: {
        company: true,
        subscription: true,
        // Include parentInvoice on the list so the "Relates to #INV-…" column
        // can render without a second request per row.
        parentInvoice: { select: { id: true, invoice_number: true } },
      },

      relationObjToIncludeForDetail: {
        company: true,
        subscription: true,
        parentInvoice: { select: { id: true, invoice_number: true } },
        userCreatedBy: true,
        userUpdatedBy: true,
      },

      listDto: InvoiceListDto,
      detailDto: InvoiceDetailDto,
      addDto: InvoiceAddDto,
      saveDto: InvoiceSaveDto,
    });
  }
}

results matching ""

    No results matching ""