import OB, {AnyBoolean} from "@onebro/oba-common"; import OBACore from "@onebro/oba-core"; import {Schema} from "mongoose"; import { ModelFactoryConfig, ModelFactory, getInfoMapSchemaDef, getSettingsSchemaDef, getSpecialTypeSchemaDef, } from "@onebro/oba-mongoose"; import { FinancialDoc, FinancialDocSignature, UserStatuses, UserRoles, } from "../00-model-types"; import { userAcctAsPropSchema } from "./01-user-acct"; import { finDocItemAsPropSchema } from "./06-fin-doc-item"; export type FinancialDocFactoryConfig = ModelFactoryConfig; export const finDocAsPropSchema = (arr?:AnyBoolean,useracct?:AnyBoolean) => { switch(true){ case !!arr:return { type:[Schema.Types.ObjectId], ref:"FinancialDoc", default:[] as FinancialDoc["instance"][], get:(p:FinancialDoc["instance"][]) => p.map(o => useracct?o.json():o.preview), }; default:return { type:Schema.Types.ObjectId, ref:"FinancialDoc", get:(p:FinancialDoc["instance"]) => p?useracct?p.json():p.preview:null, }; } }; export const finDocSchemaDef:FinancialDocFactoryConfig["definition"] = { qid:{type:String,default:() => "ob_" + OB.longId().replace(/-/g,""),immutable:true}, owner:userAcctAsPropSchema(), name:{type:String,required:true,trim:true,maxLength:20}, type:{type:String,trim:true}, yr:{type:String,trim:true}, items:finDocItemAsPropSchema(1), }; export const finDocRefs_:FinancialDocFactoryConfig["refs"] = []; export const finDocRefs:FinancialDocFactoryConfig["refs"] = [...finDocRefs_]; export const finDocVirtuals:FinancialDocFactoryConfig["virtuals"] = { preview:{ get:function(){ const s = this as FinancialDoc["instance"]; const p = {} as FinancialDoc["preview"]; p.id = s.id; p.stat = s.stat; p.name = s.name; p.type = s.type; p.owner = s.owner as any; p.yr = s.yr; p.items = s.items.map(o => o.preview); return p; } }, }; export const finDocMethods:FinancialDocFactoryConfig["methods"] = { json:function(){ const s = this as FinancialDoc["instance"]; const j = {} as FinancialDoc["json"]; j._type_ = "financial-document"; j.id = s.id; j.qid = s.qid; j.status = s.status as any; j.stat = s.stat; s.desc?j.desc = s.desc:null; s.info?j.info = s.info:null; j.name = s.name; j.type = s.type; j.owner = s.owner as any; j.yr = s.yr; j.items = s.items.map(o => o.preview); return j; }, }; export const FinancialDocFactoryConfig:FinancialDocFactoryConfig = { modelName:"FinancialDoc", businessName:"financial document", collectionName:"cctx_playground_fin_docs", statuses:UserStatuses, definition:finDocSchemaDef, opts:{}, refs:finDocRefs, virtuals:finDocVirtuals, methods:finDocMethods, }; export class FinancialDocFactory extends ModelFactory {constructor(api:OBACore){super(api as any,FinancialDocFactoryConfig);}}