feat(DTO): dto implementations for the ticket module

This commit is contained in:
Matthieu Haineault 2026-02-10 08:14:44 -05:00
parent c3698d4a36
commit ee6337758e
18 changed files with 224 additions and 26 deletions

View File

@ -1,37 +1,33 @@
import { Customer } from "src/customer-support/customers/customer.dto";
import { Delivery } from "src/customer-support/deliveries/delivery.dto";
//an account is linked to a customer
//an account can have one or more delivery
export class Account {
id: number;
customerId?: string;
language: string;
customer: Customer;
contact?: string;
username?: string;
password?: string;
radiusUsername?: string;
radiusPassword?: string;
groupId: number;
status?: number;
firstName?: string;
lastName?: string;
mandataire?: string; //sometimes the first_name and last_name are found here, sometimes its the name of someone who manage the account
title?: string;
email?: string[];
company?: string;
contact: string;
address?: string[]; //string of country, city, state, zip, road, number, apt concat.
telHome?: string;
telOffice?: string;
telOffice_ext?: string;
cell?: string;
fax?: string;
landOwner: boolean;
commercial: boolean;
vip: boolean;
notes_client?: string;
terminateReason?: string;
terminateCie?: string;
terminateNote?: string;
terminateDate?: string;
mauvaisPayeur: boolean;
planName?: string;
delivery: Delivery[];
memo?: AccountMemo[];
termination?: TerminationStatus;
};
export class AccountMemo {
last_updated: number;
staff_id: number;
memo?: string;
memo: string;
};
export class TerminationStatus {
terminateReason?: string;
terminateCie?: string;
terminateNote?: string;
terminateDate?: string;
}

View File

@ -0,0 +1,26 @@
import { Address } from "src/customer-support/shared/shared-class.dto";
//A customer is linked to an Account and Delivery
export class Customer {
customerId?: number;
firstName?: string;
lastName?: string;
language?: string;
mandataire?: string; //sometimes the first_name and last_name are found here, sometimes its the name of someone who manage the account
contact?: string;
address?: Address; //string of country, city, state, zip, road, number, apt concat. Data is found in the Address class
email?: string[];
company?: string;
telHome?: string;
telOffice?: string;
telOffice_ext?: string;
cell?: string;
fax?: string;
landOwner: boolean;
commercial: boolean;
title?: string;
vip: boolean;
notesClient?: string;
mauvaisPayeur: boolean;
}

View File

@ -0,0 +1,22 @@
import { Address } from "cluster";
import { Account } from "src/customer-support/accounts/account.dto";
import { Product } from "src/customer-support/product/product.dto";
import { Tickets } from "src/customer-support/tickets/ticket.dto";
//A delivery represent an Address where product can be delivered.
//A delivery can be linked to a single Account and a single address
//A delivery can have 1 or more Product
export class Delivery {
address: Address;
account: Account[];
ticket: Tickets[];
product: Product[];
}
export class AccountDeliveryJunction {
accountId: Account;
deliveryId:Delivery;
ticket:Tickets[];
}

View File

@ -0,0 +1,14 @@
// A Device is linked to a Service
// A Device can be used as a "parent" or be a "child" of an other device
export class Device {
ip: string;
mac: string;
privateIp: string;
relayIp: string;
accessPoint: string;
techno: string;
link: string;
parentDevice?: Device;
childDevice?: Device;
}

View File

@ -0,0 +1,3 @@
export class Fibre {
}

View File

@ -0,0 +1,7 @@
//I question the need for a phone dto. Could be an enum since most columns repeat themselves in the product table.
//A phone is a type of product, not sure what would need to be in this class.
export class Phone {
}

View File

@ -0,0 +1,36 @@
import { Device } from "src/customer-support/devices/device.dto";
import { Service } from "src/customer-support/services/services.dto";
import { Comments } from "src/customer-support/shared/shared-class.dto";
import { Television } from "src/customer-support/television/television.dto";
export class Product {
description: string;
downloadSpeed?: number;
uploadSpeed?: number;
dayQuota: number;
nightQuota: number;
phoneNumber: string;
inventory: Inventory;
isPortalAvailable: boolean;
isCommercial: boolean;
isComboDiscountEligible: boolean;
categoryName: string;
note: Comments;
status: boolean;
stockKeepingUnit: string; // **sku**
name: string;
price: number;
soldUnit: number;
isAvailable: boolean;
televiesion?: Television;
service?: Service;
device?: Device;
}
export class Inventory {
followUp: boolean;
tag: string;
localisation: string;
alert: number;
listedTicketTech: boolean; //what is this for?
}

View File

@ -0,0 +1,22 @@
import { Device } from "src/customer-support/devices/device.dto";
import { Comments } from "src/customer-support/shared/shared-class.dto";
//A Service is a product
export class Service {
id: number;
deviceId: number;
type: string;
status: string;
paymentRecurrence: string;
createdAt: Date;
suspendedAt: Date;
lastBill: Date;
nextBill: Date;
uniqueCharge: boolean;
contractEnd: Date;
activeUntil: Date;
isHijacked: boolean;
comment: Comments;
device: Device[];
}

View File

@ -0,0 +1,20 @@
export class Comments {
comment: string;
isPublic: boolean;
createdAt: Date;
createdBy: string;
updatedAt: Date;
updatedBy: string;
}
export class Address {
door_number: number;
street: string;
city: string;
province: string;
postal_code: string;
latitude: string;
longitude: string;
createdAt: Date;
comment: Comments;
}

View File

@ -0,0 +1,27 @@
import { Customer } from "src/customer-support/customers/customer.dto";
import { Service } from "src/customer-support/services/services.dto";
import { Comments } from "src/customer-support/shared/shared-class.dto";
//Television is a product, can be "A la carte" or by package
export class Television {
service: Service;
channel?: Channels[];
package?: ChannelPackages;
}
export class Channels {
number: number;
name: string;
owner: string;
unitPrice: number;
unitSoldPrice: number;
bundlePrice: number;
bundleSoldPrice: number;
note: Comments;
}
export class ChannelPackages {
price: number;
isActive: boolean;
}

View File

@ -0,0 +1,25 @@
import { AccountDeliveryJunction } from "src/customer-support/deliveries/delivery.dto";
import { Comments } from "src/customer-support/shared/shared-class.dto";
export class Tickets {
id: number;
subject?: string;
departement: string;
status: string;
priority: string;
attachments?: string[];
accountDelivery: AccountDeliveryJunction;
comment?: Comments[];
followUp: FollowUp[];
}
export class FollowUp {
assignedTo: string;
followedBy?: string[];
createdAt: Date;
dueDate?: Date;
updatedAt: Date;
parentTicket?: Tickets;
childTicket?: Tickets;
}