import OB, {AnyBoolean} from "@onebro/oba-common"; import OBACore from "@onebro/oba-core"; import {Schema} from "mongoose"; import {ModelFactoryConfig,ModelFactory, getMiscReferenceSchemaDef, getStatusSchemaDef} from "@onebro/oba-mongoose"; import {DocStatuses,FinancialDocItem,FinancialDocItemSignature} from "../00-model-types"; //import { MessageRefs, getMessageAsPropSchema } from "./05-message"; export type FinancialDocItemFactoryConfig = ModelFactoryConfig; export const finDocItemAsPropSchema = (arr?:AnyBoolean) => { switch(true){ case !!arr:{ return { type:[Schema.Types.ObjectId], ref:"FinancialDocItem", default:[] as FinancialDocItem["instance"][], get:(p:FinancialDocItem["instance"][]) => p.map(o => o.preview), }; } default:{ return { type:Schema.Types.ObjectId, ref:"FinancialDocItem", get:(p:FinancialDocItem["instance"]) => p?p.preview:null, }; } } }; export const finDocItemSchemaDef:FinancialDocItemFactoryConfig["definition"] = { qid:{type:String,default:() => "ob_" + OB.longId().replace(/-/g,""),immutable:true}, domain:{type:String,trim:true,required:true,maxLength:120}, type:{type:String,trim:true,required:true,maxLength:120}, kind:{type:String,trim:true,required:true,maxLength:120}, method:{type:String,trim:true,required:true,maxLength:120}, loc:new Schema({str:{type:String},coords:{type:[Number]}},{_id:false}), slug:{type:String,trim:true}, amt:{type:Number,required:true}, reason:{type:String,trim:true,required:true,maxLength:120}, parent:getMiscReferenceSchemaDef(), }; export const finDocItemRefs_:FinancialDocItemFactoryConfig["refs"] = []; export const finDocItemRefs:FinancialDocItemFactoryConfig["refs"] = [...finDocItemRefs_]; export const finDocItemVirtuals:FinancialDocItemFactoryConfig["virtuals"] = { preview:{ get:function(){ const s = this as FinancialDocItem["instance"]; const p = {} as FinancialDocItem["preview"]; p.id = s.id; p.stat = s.stat; p.domain = s.domain; p.kind = s.kind; p.type = s.type; p.method = s.method; p.amt = s.amt; p.slug = s.slug; p.published = s.created; return p; } } }; export const finDocItemMethods:FinancialDocItemFactoryConfig["methods"] = { json:function(){ const s = this as FinancialDocItem["instance"]; const j = {} as FinancialDocItem["json"]; j._type_ = "financial-document-item"; 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.slug = s.slug; j.domain = s.domain; j.kind = s.kind; j.type = s.type; j.method = s.method; j.amt = s.amt; j.reason = s.reason; j.parent = s.parent; j.published = s.created; return j; } }; export const FinancialDocItemFactoryConfig:FinancialDocItemFactoryConfig = { modelName:"FinancialDocItem", businessName:"financial document item", collectionName:"cctx_playground_fin_doc_items", statuses:DocStatuses, definition:finDocItemSchemaDef, opts:{}, refs:finDocItemRefs, virtuals:finDocItemVirtuals, methods:finDocItemMethods, }; export class FinancialDocItemFactory extends ModelFactory {constructor(api:OBACore){super(api as any,FinancialDocItemFactoryConfig);}}