Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | import { Injectable, NotFoundException, ConflictException, } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; import { WorkWeek, WorkWeekDayRule, EmployeeWorkWeekAssignment, } from '../schemas'; import { CreateWorkWeekDto, UpdateWorkWeekDto, CreateWorkWeekDayRuleDto, AssignWorkWeekDto, } from './dto/work-week.dto'; @Injectable() export class WorkWeekService { constructor( @InjectModel(WorkWeek.name) private workWeekModel: Model<WorkWeek>, @InjectModel(WorkWeekDayRule.name) private dayRuleModel: Model<WorkWeekDayRule>, @InjectModel(EmployeeWorkWeekAssignment.name) private assignmentModel: Model<EmployeeWorkWeekAssignment>, ) {} async create(tenantId: string, createDto: CreateWorkWeekDto, userId: string) { const existing = await this.workWeekModel.findOne({ tenantId, workWeekCode: createDto.workWeekCode, }); if (existing) { throw new ConflictException( `Work week with code ${createDto.workWeekCode} already exists`, ); } const created = new this.workWeekModel({ ...createDto, tenantId, createdBy: userId, }); return created.save(); } async findAll(tenantId: string) { return this.workWeekModel.find({ tenantId }).exec(); } async findOne(tenantId: string, id: string) { const workWeek = await this.workWeekModel .findOne({ _id: id, tenantId }) .exec(); if (!workWeek) { throw new NotFoundException(`Work week #${id} not found`); } return workWeek; } async update(tenantId: string, id: string, updateDto: UpdateWorkWeekDto) { const updated = await this.workWeekModel.findOneAndUpdate( { _id: id, tenantId }, { $set: updateDto }, { new: true }, ); if (!updated) { throw new NotFoundException(`Work week #${id} not found`); } return updated; } async setDayRules( tenantId: string, workWeekId: string, rulesDto: CreateWorkWeekDayRuleDto[], ) { await this.findOne(tenantId, workWeekId); // Clear existing rules for this work week await this.dayRuleModel.deleteMany({ tenantId, workWeekId }); const rules = rulesDto.map((rule) => ({ ...rule, tenantId, workWeekId, })); return this.dayRuleModel.insertMany(rules); } async getDayRules(tenantId: string, workWeekId: string) { return this.dayRuleModel .find({ tenantId, workWeekId }) .sort({ dayOfWeek: 1 }) .exec(); } async assignWorkWeek( tenantId: string, id: string, assignDto: AssignWorkWeekDto, ) { await this.findOne(tenantId, id); // Optionally check if an active assignment exists and close it const assignment = new this.assignmentModel({ ...assignDto, tenantId, workWeekId: id, }); return assignment.save(); } } |