pos-be/src/modules/queue/domain/usecases/index-queue.manager.ts

79 lines
1.8 KiB
TypeScript

import { Injectable } from '@nestjs/common';
import { BaseIndexManager } from 'src/core/modules/domain/usecase/managers/base-index.manager';
import { SelectQueryBuilder } from 'typeorm';
import {
Param,
RelationParam,
} from 'src/core/modules/domain/entities/base-filter.entity';
import { Queue } from '../entities/queue.entity';
import * as moment from 'moment';
@Injectable()
export class IndexQueueManager extends BaseIndexManager<Queue> {
async prepareData(): Promise<void> {
return;
}
async beforeProcess(): Promise<void> {
return;
}
async afterProcess(): Promise<void> {
return;
}
get relations(): RelationParam {
return {
joinRelations: [],
selectRelations: ['item', 'item.ticket'],
countRelations: [],
};
}
get selects(): string[] {
return [
`${this.tableName}.id`,
`${this.tableName}.code`,
`${this.tableName}.status`,
`${this.tableName}.time`,
`${this.tableName}.call_time`,
`${this.tableName}.vip`,
`${this.tableName}.item`,
`${this.tableName}.qty`,
`${this.tableName}.created_at`,
`item.id`,
`ticket.customer`,
`ticket.phone`,
];
}
get specificFilter(): Param[] {
return [
{
cols: `${this.tableName}.status`,
data: this.filterParam.status,
},
];
}
setQueryFilter(
queryBuilder: SelectQueryBuilder<Queue>,
): SelectQueryBuilder<Queue> {
const start = moment().startOf('day').valueOf();
const end = moment().endOf('day').valueOf();
queryBuilder.andWhere(`${this.tableName}.time BETWEEN :start AND :end`, {
start,
end,
});
if (this.filterParam.vip != null) {
queryBuilder.andWhere(`${this.tableName}.vip = :vip`, {
vip: this.filterParam.vip,
});
}
return queryBuilder;
}
}