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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | 2x 2x 2x 2x 2x 2x 2x 2x 2x 4x 2x 6x 6x 6x 6x 5x 5x 5x 1x 1x 4x 6x 5x 4x 2x 7x 6x 5x 3x 2x 2x 2x 2x 2x 2x 2x 2x 2x 4x 2x 2x 2x 2x 4x 2x 2x 2x | import { ForbiddenException, Injectable, Logger, UnauthorizedException, } from '@nestjs/common' import { ObjectId } from 'mongoose' import { LastWill } from '../db/entities/lastwill.entity' import { LastWillDBService } from '../db/services/lastwill.service' import { UserDBService } from '../db/services/user.service' import { paymentPlans } from '../payments/interfaces/payments' import { CreateLastWillDto } from './dto/create-lastwill.dto' import { GeneratedLastWillDTO } from './dto/generated-lastwill.dto' import { generateFinancialInheritancePragraphs, generateInitialText, generateItemInheritanceParagraph, generateLocationHeader, generateTestatorHeader, getLegalClauses, } from './utilities/lastwill-templating.util' @Injectable() export class LastWillService { private readonly logger = new Logger(LastWillService.name) constructor( private readonly userService: UserDBService, private readonly lastwillDbService: LastWillDBService, ) {} async getFullTextLastWill( id: string, userId: ObjectId, ): Promise<GeneratedLastWillDTO> { const lastWill = await this.lastwillDbService.findFullById(id, userId) return this.generateLastWillFullText(lastWill) } async createLastWill( createLastWillDto: CreateLastWillDto, userId: ObjectId, ): Promise<LastWill> { this.logger.log(`Creating new Lastwill for user`) const lastWillCount = await this.lastwillDbService.countDocuments(userId) const user = await this.userService.findOneById(userId) if (!user) throw new UnauthorizedException('Only Existing users can create') const plan = user.paymentPlan const allowedWills = Math.abs(paymentPlans[plan]) if (lastWillCount >= allowedWills) { this.logger.log(`Last will creation exceeding plan limits was attempted`) throw new ForbiddenException( `Exceeding allowed last wills: ${allowedWills}`, ) } return await this.lastwillDbService.createOne(createLastWillDto, userId) } includesFinancialInheritance(lastWill: LastWill): boolean { if (lastWill.financialAssets.length === 0) return false for (const heir of lastWill.heirs) { if (heir.percentage) return true } // False because noone actually inherits anything return false } includesItemInheritance(lastWill: LastWill): boolean { if (lastWill.items.length === 0) return false for (const heir of lastWill.heirs) { if (heir.itemIds?.length > 0) return true } // false bc noone actually inherits anything return false } private generateLastWillFullText(lastWill: LastWill): GeneratedLastWillDTO { // 1. Set headers const testator = lastWill.testator const testatorAddress = testator.address const testatorHeader = generateTestatorHeader( testator.name, testatorAddress?.street, testatorAddress?.houseNumber, testatorAddress?.city, testatorAddress?.zipCode, ) const locationHeader = generateLocationHeader( lastWill.testator.address?.city, ) // Generate outer text const initialText = generateInitialText( testator.name, testator.birthDate, testator.birthPlace, ) const generatedLastWill: GeneratedLastWillDTO = { testatorHeader, locationHeader, title: 'Mein letzter Wille', initialText, paragraphs: [], } // Generate Erbeinsetzung if (this.includesFinancialInheritance(lastWill)) { const financialHeirs = [] for (const heir of lastWill.heirs) { if (heir.percentage) financialHeirs.push(heir) } generatedLastWill.paragraphs.push( ...generateFinancialInheritancePragraphs( financialHeirs, lastWill.financialAssets, ), ) } if (this.includesItemInheritance(lastWill)) { const itemHeirs = [] for (const heir of lastWill.heirs) { if (heir.itemIds?.length > 0) itemHeirs.push(heir) } generatedLastWill.paragraphs.push( generateItemInheritanceParagraph(itemHeirs, lastWill.items), ) } generatedLastWill.paragraphs.push(...getLegalClauses()) return generatedLastWill } } |