complete new audit system
This commit is contained in:
+36
-33
@@ -1,4 +1,7 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.getAllContracts = getAllContracts;
|
||||
exports.getContractById = getContractById;
|
||||
@@ -12,9 +15,9 @@ exports.getInternetCredentials = getInternetCredentials;
|
||||
exports.getSipCredentials = getSipCredentials;
|
||||
exports.getContractTreeForCustomer = getContractTreeForCustomer;
|
||||
const client_1 = require("@prisma/client");
|
||||
const prisma_js_1 = __importDefault(require("../lib/prisma.js"));
|
||||
const helpers_js_1 = require("../utils/helpers.js");
|
||||
const encryption_js_1 = require("../utils/encryption.js");
|
||||
const prisma = new client_1.PrismaClient();
|
||||
async function getAllContracts(filters) {
|
||||
const { customerId, customerIds, type, status, search, page = 1, limit = 20 } = filters;
|
||||
const { skip, take } = (0, helpers_js_1.paginate)(page, limit);
|
||||
@@ -72,7 +75,7 @@ async function getAllContracts(filters) {
|
||||
];
|
||||
}
|
||||
const [contracts, total] = await Promise.all([
|
||||
prisma.contract.findMany({
|
||||
prisma_js_1.default.contract.findMany({
|
||||
where,
|
||||
skip,
|
||||
take,
|
||||
@@ -97,7 +100,7 @@ async function getAllContracts(filters) {
|
||||
contractCategory: true,
|
||||
},
|
||||
}),
|
||||
prisma.contract.count({ where }),
|
||||
prisma_js_1.default.contract.count({ where }),
|
||||
]);
|
||||
return {
|
||||
contracts,
|
||||
@@ -105,7 +108,7 @@ async function getAllContracts(filters) {
|
||||
};
|
||||
}
|
||||
async function getContractById(id, decryptPassword = false) {
|
||||
const contract = await prisma.contract.findUnique({
|
||||
const contract = await prisma_js_1.default.contract.findUnique({
|
||||
where: { id },
|
||||
include: {
|
||||
customer: true,
|
||||
@@ -159,7 +162,7 @@ async function createContract(data) {
|
||||
const portalPasswordEncrypted = portalPassword
|
||||
? (0, encryption_js_1.encrypt)(portalPassword)
|
||||
: undefined;
|
||||
const contract = await prisma.contract.create({
|
||||
const contract = await prisma_js_1.default.contract.create({
|
||||
data: {
|
||||
...contractData,
|
||||
contractNumber: (0, helpers_js_1.generateContractNumber)(data.type),
|
||||
@@ -255,7 +258,7 @@ async function updateContract(id, data) {
|
||||
? (0, encryption_js_1.encrypt)(portalPassword)
|
||||
: undefined;
|
||||
// Update main contract
|
||||
await prisma.contract.update({
|
||||
await prisma_js_1.default.contract.update({
|
||||
where: { id },
|
||||
data: {
|
||||
...contractData,
|
||||
@@ -264,11 +267,11 @@ async function updateContract(id, data) {
|
||||
});
|
||||
// Update type-specific details
|
||||
if (energyDetails) {
|
||||
const existingEcd = await prisma.energyContractDetails.findUnique({
|
||||
const existingEcd = await prisma_js_1.default.energyContractDetails.findUnique({
|
||||
where: { contractId: id },
|
||||
select: { id: true, meterId: true },
|
||||
});
|
||||
await prisma.energyContractDetails.upsert({
|
||||
await prisma_js_1.default.energyContractDetails.upsert({
|
||||
where: { contractId: id },
|
||||
update: energyDetails,
|
||||
create: { contractId: id, ...energyDetails },
|
||||
@@ -279,16 +282,16 @@ async function updateContract(id, data) {
|
||||
const newMeterId = energyDetails.meterId;
|
||||
if (oldMeterId !== newMeterId) {
|
||||
// Alle alten ContractMeter-Einträge entfernen
|
||||
await prisma.contractMeter.deleteMany({
|
||||
await prisma_js_1.default.contractMeter.deleteMany({
|
||||
where: { energyContractDetailsId: existingEcd.id },
|
||||
});
|
||||
// Neuen ContractMeter-Eintrag erstellen (wenn ein Zähler gesetzt)
|
||||
if (newMeterId) {
|
||||
const contract = await prisma.contract.findUnique({
|
||||
const contract = await prisma_js_1.default.contract.findUnique({
|
||||
where: { id },
|
||||
select: { startDate: true },
|
||||
});
|
||||
await prisma.contractMeter.create({
|
||||
await prisma_js_1.default.contractMeter.create({
|
||||
data: {
|
||||
energyContractDetailsId: existingEcd.id,
|
||||
meterId: newMeterId,
|
||||
@@ -302,7 +305,7 @@ async function updateContract(id, data) {
|
||||
}
|
||||
if (internetDetails) {
|
||||
const { phoneNumbers, internetPassword, ...internetData } = internetDetails;
|
||||
const existing = await prisma.internetContractDetails.findUnique({
|
||||
const existing = await prisma_js_1.default.internetContractDetails.findUnique({
|
||||
where: { contractId: id },
|
||||
include: { phoneNumbers: true },
|
||||
});
|
||||
@@ -322,7 +325,7 @@ async function updateContract(id, data) {
|
||||
activationCode: internetData.activationCode,
|
||||
};
|
||||
if (existing) {
|
||||
await prisma.internetContractDetails.update({
|
||||
await prisma_js_1.default.internetContractDetails.update({
|
||||
where: { contractId: id },
|
||||
data: preparedInternetData,
|
||||
});
|
||||
@@ -330,11 +333,11 @@ async function updateContract(id, data) {
|
||||
// Get existing phone numbers for preserving encrypted passwords
|
||||
const existingPhoneNumbers = existing.phoneNumbers || [];
|
||||
// Delete all existing phone numbers
|
||||
await prisma.phoneNumber.deleteMany({
|
||||
await prisma_js_1.default.phoneNumber.deleteMany({
|
||||
where: { internetContractDetailsId: existing.id },
|
||||
});
|
||||
// Create new phone numbers with encryption
|
||||
await prisma.phoneNumber.createMany({
|
||||
await prisma_js_1.default.phoneNumber.createMany({
|
||||
data: phoneNumbers.map((pn) => {
|
||||
// Find existing entry to preserve sipPassword if not changed
|
||||
const existingPn = pn.id
|
||||
@@ -356,7 +359,7 @@ async function updateContract(id, data) {
|
||||
}
|
||||
}
|
||||
else {
|
||||
await prisma.internetContractDetails.create({
|
||||
await prisma_js_1.default.internetContractDetails.create({
|
||||
data: {
|
||||
contractId: id,
|
||||
...preparedInternetData,
|
||||
@@ -382,26 +385,26 @@ async function updateContract(id, data) {
|
||||
}
|
||||
if (mobileDetails) {
|
||||
const { simCards, ...mobileData } = mobileDetails;
|
||||
const existing = await prisma.mobileContractDetails.findUnique({
|
||||
const existing = await prisma_js_1.default.mobileContractDetails.findUnique({
|
||||
where: { contractId: id },
|
||||
});
|
||||
if (existing) {
|
||||
await prisma.mobileContractDetails.update({
|
||||
await prisma_js_1.default.mobileContractDetails.update({
|
||||
where: { contractId: id },
|
||||
data: mobileData,
|
||||
});
|
||||
if (simCards) {
|
||||
// Get existing sim cards to preserve PIN/PUK if not provided
|
||||
const existingSimCards = await prisma.simCard.findMany({
|
||||
const existingSimCards = await prisma_js_1.default.simCard.findMany({
|
||||
where: { mobileDetailsId: existing.id },
|
||||
});
|
||||
const existingSimCardMap = new Map(existingSimCards.map(sc => [sc.id, sc]));
|
||||
// Delete existing sim cards
|
||||
await prisma.simCard.deleteMany({
|
||||
await prisma_js_1.default.simCard.deleteMany({
|
||||
where: { mobileDetailsId: existing.id },
|
||||
});
|
||||
// Create new sim cards, preserving PIN/PUK if not provided
|
||||
await prisma.simCard.createMany({
|
||||
await prisma_js_1.default.simCard.createMany({
|
||||
data: simCards.map((sc) => {
|
||||
const existingSc = sc.id ? existingSimCardMap.get(sc.id) : undefined;
|
||||
return {
|
||||
@@ -419,7 +422,7 @@ async function updateContract(id, data) {
|
||||
}
|
||||
}
|
||||
else {
|
||||
await prisma.mobileContractDetails.create({
|
||||
await prisma_js_1.default.mobileContractDetails.create({
|
||||
data: {
|
||||
contractId: id,
|
||||
...mobileData,
|
||||
@@ -440,14 +443,14 @@ async function updateContract(id, data) {
|
||||
}
|
||||
}
|
||||
if (tvDetails) {
|
||||
await prisma.tvContractDetails.upsert({
|
||||
await prisma_js_1.default.tvContractDetails.upsert({
|
||||
where: { contractId: id },
|
||||
update: tvDetails,
|
||||
create: { contractId: id, ...tvDetails },
|
||||
});
|
||||
}
|
||||
if (carInsuranceDetails) {
|
||||
await prisma.carInsuranceDetails.upsert({
|
||||
await prisma_js_1.default.carInsuranceDetails.upsert({
|
||||
where: { contractId: id },
|
||||
update: carInsuranceDetails,
|
||||
create: { contractId: id, ...carInsuranceDetails },
|
||||
@@ -459,17 +462,17 @@ async function deleteContract(id) {
|
||||
// Vertragskette erhalten beim Löschen:
|
||||
// Wenn A → B → C und B gelöscht wird, soll C direkt auf A zeigen (A → C)
|
||||
// 1. Zu löschenden Vertrag holen um dessen Vorgänger zu kennen
|
||||
const contractToDelete = await prisma.contract.findUnique({
|
||||
const contractToDelete = await prisma_js_1.default.contract.findUnique({
|
||||
where: { id },
|
||||
select: { previousContractId: true },
|
||||
});
|
||||
// 2. Folgevertrag(e) mit dem Vorgänger des gelöschten Vertrags verbinden
|
||||
// So bleibt die Kette erhalten: A → B → C wird zu A → C
|
||||
await prisma.contract.updateMany({
|
||||
await prisma_js_1.default.contract.updateMany({
|
||||
where: { previousContractId: id },
|
||||
data: { previousContractId: contractToDelete?.previousContractId ?? null },
|
||||
});
|
||||
return prisma.contract.delete({ where: { id } });
|
||||
return prisma_js_1.default.contract.delete({ where: { id } });
|
||||
}
|
||||
async function createFollowUpContract(previousContractId) {
|
||||
const previousContract = await getContractById(previousContractId);
|
||||
@@ -477,7 +480,7 @@ async function createFollowUpContract(previousContractId) {
|
||||
throw new Error('Vorgängervertrag nicht gefunden');
|
||||
}
|
||||
// Prüfen ob bereits ein Folgevertrag existiert
|
||||
const existingFollowUp = await prisma.contract.findFirst({
|
||||
const existingFollowUp = await prisma_js_1.default.contract.findFirst({
|
||||
where: { previousContractId },
|
||||
select: { id: true, contractNumber: true },
|
||||
});
|
||||
@@ -568,7 +571,7 @@ async function createFollowUpContract(previousContractId) {
|
||||
}
|
||||
// Decrypt password for viewing
|
||||
async function getContractPassword(id) {
|
||||
const contract = await prisma.contract.findUnique({
|
||||
const contract = await prisma_js_1.default.contract.findUnique({
|
||||
where: { id },
|
||||
select: { portalPasswordEncrypted: true },
|
||||
});
|
||||
@@ -583,7 +586,7 @@ async function getContractPassword(id) {
|
||||
}
|
||||
// Decrypt SimCard PIN/PUK
|
||||
async function getSimCardCredentials(simCardId) {
|
||||
const simCard = await prisma.simCard.findUnique({
|
||||
const simCard = await prisma_js_1.default.simCard.findUnique({
|
||||
where: { id: simCardId },
|
||||
select: { pin: true, puk: true },
|
||||
});
|
||||
@@ -601,7 +604,7 @@ async function getSimCardCredentials(simCardId) {
|
||||
}
|
||||
// Decrypt Internet password
|
||||
async function getInternetCredentials(contractId) {
|
||||
const internetDetails = await prisma.internetContractDetails.findUnique({
|
||||
const internetDetails = await prisma_js_1.default.internetContractDetails.findUnique({
|
||||
where: { contractId },
|
||||
select: { internetPasswordEncrypted: true },
|
||||
});
|
||||
@@ -618,7 +621,7 @@ async function getInternetCredentials(contractId) {
|
||||
}
|
||||
// Decrypt SIP password for a phone number
|
||||
async function getSipCredentials(phoneNumberId) {
|
||||
const phoneNumber = await prisma.phoneNumber.findUnique({
|
||||
const phoneNumber = await prisma_js_1.default.phoneNumber.findUnique({
|
||||
where: { id: phoneNumberId },
|
||||
select: { sipPasswordEncrypted: true },
|
||||
});
|
||||
@@ -640,7 +643,7 @@ async function getSipCredentials(phoneNumberId) {
|
||||
*/
|
||||
async function getContractTreeForCustomer(customerId) {
|
||||
// Alle Verträge des Kunden laden (außer DEACTIVATED)
|
||||
const allContracts = await prisma.contract.findMany({
|
||||
const allContracts = await prisma_js_1.default.contract.findMany({
|
||||
where: {
|
||||
customerId,
|
||||
status: { not: client_1.ContractStatus.DEACTIVATED },
|
||||
|
||||
Reference in New Issue
Block a user