import { BillingActionsEnum, BillingStatusEnum, EntityModelRelationHelper, IBillingEntity, IBillingParticularLineItemEntity, IBillingReimbursementExpenseEntity, IBillingTimesheetEntity, IProjectEntity, IUserEntity } from "../../entities"; import { IUpdateBillingDto } from "./billing.update.dto.interface"; export type IBillingEntityResponse = { billing: IBillingEntity; billingReimbursementExpenses?: IBillingReimbursementExpenseEntity[]; billingTimesheets?: IBillingTimesheetEntity[]; billingParticularLineItems?: IBillingParticularLineItemEntity[]; }; export interface IUserEntityRelation { users?: IUserEntity[]; } export interface IProjectEntityRelation { projects?: IProjectEntity[]; } export interface IBillingRelatedEntities extends IUserEntityRelation, IProjectEntityRelation { } export interface IBillingEntitySearchResponse extends IBillingRelatedEntities { billings: IBillingEntityResponse[]; } export type IBillingFlowConfig = { [key in BillingStatusEnum]?: { actions: { [key in BillingActionsEnum]?: { permissions: string[]; next: (data: IBillingFlowContextData) => BillingStatusEnum; description?: string; }; }; }; }; export type IBillingFlowContextData = { currentBilling?: IBillingEntity; dto?: IUpdateBillingDto; }; export interface IBillingExportContext { currentUser: IUserEntity; billingEntityModelRelationHelper: EntityModelRelationHelper; }