From a5fc7b1de9271734ab3bc20ed7ebb79edae1c420 Mon Sep 17 00:00:00 2001 From: Matthieu Haineault Date: Thu, 19 Feb 2026 08:18:43 -0500 Subject: [PATCH] feat(ticket): added a route to get tickets using the email of the assigned employee or the ticket status --- .../prisma/client/mariadb/browser.ts | 2 +- .../generated/prisma/client/mariadb/client.ts | 2 +- .../prisma/client/mariadb/internal/class.ts | 2 +- .../mariadb/models/compta_ppa_file_id.ts | 2 +- src/app.module.ts | 4 +- src/common/mappers/email-id.mapper.ts | 2 + src/common/utils/date-utils.ts | 8 ++ .../accounts/account.controller.ts | 28 ---- .../accounts/account.module.ts | 11 -- .../services/account-create.service.ts | 6 - .../services/account-memo-update.service.ts | 6 - .../accounts/services/account-memo.service.ts | 29 ---- .../services/account-update.service.ts | 56 -------- .../accounts/services/account.service.ts | 128 ------------------ .../customer-support.module.ts | 8 +- .../customers/customer.controller.ts | 6 - .../customers/customer.module.ts | 8 -- .../customers/customer.service.ts | 6 - .../deliveries/delivery.controller.ts | 6 - .../deliveries/delivery.module.ts | 8 -- .../deliveries/delivery.service.ts | 6 - .../devices/device.controller.ts | 6 - src/customer-support/devices/device.module.ts | 8 -- .../devices/device.service.ts | 6 - src/customer-support/dtos/account.dto.ts | 13 -- src/customer-support/dtos/address.dto.ts | 16 --- src/customer-support/dtos/customer.dto.ts | 8 -- src/customer-support/dtos/delivery.dto.ts | 22 --- src/customer-support/dtos/device.dto.ts | 17 --- src/customer-support/dtos/fibre.dto.ts | 3 - src/customer-support/dtos/phone.dto.ts | 7 - src/customer-support/dtos/product.dto.ts | 36 ----- src/customer-support/dtos/services.dto.ts | 24 ---- src/customer-support/dtos/staff.dto.ts | 0 src/customer-support/dtos/television.dto.ts | 27 ---- src/customer-support/dtos/ticket.dto.ts | 21 --- .../fibre/fibre.controller.ts | 6 - src/customer-support/fibre/fibre.module.ts | 8 -- src/customer-support/fibre/fibre.service.ts | 6 - .../http-test-files/account-testing.http | 6 - .../phones/phone.controller.ts | 6 - src/customer-support/phones/phone.module.ts | 8 -- src/customer-support/phones/phone.service.ts | 6 - .../product/product.controller.ts | 6 - .../product/product.module.ts | 8 -- .../product/product.service.ts | 6 - .../services/services.controller.ts | 6 - .../services/services.module.ts | 8 -- .../services/services.service.ts | 6 - .../shared/helpers/boolean.helpers.ts | 62 ++++----- .../shared/shared-class.dto.ts | 20 --- .../staff/staff.controller.ts | 0 src/customer-support/staff/staff.module.ts | 0 src/customer-support/staff/staff.service.ts | 0 .../television/television.controller.ts | 8 -- .../television/television.module.ts | 8 -- .../television/television.service.ts | 7 - src/customer-support/tickets/dtos/note.ts | 45 ++++++ .../tickets/dtos/ticket-list.dto.ts | 14 ++ .../tickets/dtos/ticket.dto.ts | 65 +++++++++ .../tickets/ticket.controller.ts | 16 ++- .../tickets/ticket.service.ts | 80 ++++++++++- 62 files changed, 267 insertions(+), 692 deletions(-) delete mode 100644 src/customer-support/accounts/account.controller.ts delete mode 100644 src/customer-support/accounts/account.module.ts delete mode 100644 src/customer-support/accounts/services/account-create.service.ts delete mode 100644 src/customer-support/accounts/services/account-memo-update.service.ts delete mode 100644 src/customer-support/accounts/services/account-memo.service.ts delete mode 100644 src/customer-support/accounts/services/account-update.service.ts delete mode 100644 src/customer-support/accounts/services/account.service.ts delete mode 100644 src/customer-support/customers/customer.controller.ts delete mode 100644 src/customer-support/customers/customer.module.ts delete mode 100644 src/customer-support/customers/customer.service.ts delete mode 100644 src/customer-support/deliveries/delivery.controller.ts delete mode 100644 src/customer-support/deliveries/delivery.module.ts delete mode 100644 src/customer-support/deliveries/delivery.service.ts delete mode 100644 src/customer-support/devices/device.controller.ts delete mode 100644 src/customer-support/devices/device.module.ts delete mode 100644 src/customer-support/devices/device.service.ts delete mode 100644 src/customer-support/dtos/account.dto.ts delete mode 100644 src/customer-support/dtos/address.dto.ts delete mode 100644 src/customer-support/dtos/customer.dto.ts delete mode 100644 src/customer-support/dtos/delivery.dto.ts delete mode 100644 src/customer-support/dtos/device.dto.ts delete mode 100644 src/customer-support/dtos/fibre.dto.ts delete mode 100644 src/customer-support/dtos/phone.dto.ts delete mode 100644 src/customer-support/dtos/product.dto.ts delete mode 100644 src/customer-support/dtos/services.dto.ts delete mode 100644 src/customer-support/dtos/staff.dto.ts delete mode 100644 src/customer-support/dtos/television.dto.ts delete mode 100644 src/customer-support/dtos/ticket.dto.ts delete mode 100644 src/customer-support/fibre/fibre.controller.ts delete mode 100644 src/customer-support/fibre/fibre.module.ts delete mode 100644 src/customer-support/fibre/fibre.service.ts delete mode 100644 src/customer-support/http-test-files/account-testing.http delete mode 100644 src/customer-support/phones/phone.controller.ts delete mode 100644 src/customer-support/phones/phone.module.ts delete mode 100644 src/customer-support/phones/phone.service.ts delete mode 100644 src/customer-support/product/product.controller.ts delete mode 100644 src/customer-support/product/product.module.ts delete mode 100644 src/customer-support/product/product.service.ts delete mode 100644 src/customer-support/services/services.controller.ts delete mode 100644 src/customer-support/services/services.module.ts delete mode 100644 src/customer-support/services/services.service.ts delete mode 100644 src/customer-support/shared/shared-class.dto.ts delete mode 100644 src/customer-support/staff/staff.controller.ts delete mode 100644 src/customer-support/staff/staff.module.ts delete mode 100644 src/customer-support/staff/staff.service.ts delete mode 100644 src/customer-support/television/television.controller.ts delete mode 100644 src/customer-support/television/television.module.ts delete mode 100644 src/customer-support/television/television.service.ts create mode 100644 src/customer-support/tickets/dtos/note.ts create mode 100644 src/customer-support/tickets/dtos/ticket-list.dto.ts create mode 100644 src/customer-support/tickets/dtos/ticket.dto.ts diff --git a/prisma/mariadb/generated/prisma/client/mariadb/browser.ts b/prisma/mariadb/generated/prisma/client/mariadb/browser.ts index a651224..8281d1a 100644 --- a/prisma/mariadb/generated/prisma/client/mariadb/browser.ts +++ b/prisma/mariadb/generated/prisma/client/mariadb/browser.ts @@ -69,7 +69,7 @@ export type compta_journal_ecriture_detail_bk = Prisma.compta_journal_ecriture_d export type compta_periode = Prisma.compta_periodeModel /** * Model compta_ppa_file_id - * This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments + * */ export type compta_ppa_file_id = Prisma.compta_ppa_file_idModel /** diff --git a/prisma/mariadb/generated/prisma/client/mariadb/client.ts b/prisma/mariadb/generated/prisma/client/mariadb/client.ts index 659c8f1..eb69005 100644 --- a/prisma/mariadb/generated/prisma/client/mariadb/client.ts +++ b/prisma/mariadb/generated/prisma/client/mariadb/client.ts @@ -89,7 +89,7 @@ export type compta_journal_ecriture_detail_bk = Prisma.compta_journal_ecriture_d export type compta_periode = Prisma.compta_periodeModel /** * Model compta_ppa_file_id - * This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments + * */ export type compta_ppa_file_id = Prisma.compta_ppa_file_idModel /** diff --git a/prisma/mariadb/generated/prisma/client/mariadb/internal/class.ts b/prisma/mariadb/generated/prisma/client/mariadb/internal/class.ts index 72d0660..8ece68f 100644 --- a/prisma/mariadb/generated/prisma/client/mariadb/internal/class.ts +++ b/prisma/mariadb/generated/prisma/client/mariadb/internal/class.ts @@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = { "clientVersion": "7.3.0", "engineVersion": "9d6ad21cbbceab97458517b147a6a09ff43aa735", "activeProvider": "mysql", - "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"generated/prisma/client/mariadb\"\n}\n\ndatasource db {\n provider = \"mysql\"\n}\n\nmodel account {\n id BigInt @id @default(autoincrement())\n customer_id String? @db.VarChar(32) //variable string, composition varies a lot, used by customers to identify their account\n date_orig BigInt? //timestamp\n date_last BigInt? //timestamp\n date_expire BigInt? //not used\n language_id String @default(dbgenerated(\"(francais)\")) @db.VarChar(32) //either \"anglais\", \"francais\"\n country_id Int @default(124) //124 (canada), 450 (Madagascar) or 840 (Virgin island)\n currency_id Int? //not used\n username String? @db.VarChar(128)\n password String? @db.VarChar(128)\n group_id Int @default(6) @db.TinyInt //refers to the account_group table\n misc String? @db.VarChar(128) //comments of some sort\n status Int? //1-actif, 2-suspension,3- non paiement, 4- terminé, 5- recouvre, 6-creance\n first_name String? @db.VarChar(128)\n middle_name String? @db.VarChar(128) //not used\n last_name String? @db.VarChar(128)\n mandataire String? @db.VarChar(128) //sometimes the first_name and last_name are found here, sometimes its the name of someone who manage the account\n title String? @db.VarChar(128) //Mme, Mrs, Mr., M., \"\"\n email String? @db.VarChar(255)\n email_autre String? @db.VarChar(255) //second email\n company String? @db.VarChar(255) //name of the company account\n contact String @db.Text //name of the contact at the company or account contact\n address1 String? @db.VarChar(128)\n address2 String? @db.VarChar(128) //sometimes used to specify the unit, the suit, the camping lot or used as a note???\n city String? @db.VarChar(128)\n state String? @db.VarChar(32)\n zip String? @db.VarChar(16)\n tel_home String? @db.VarChar(16)\n tel_office String? @db.VarChar(16)\n tel_office_ext String? @db.VarChar(4)\n cell String? @db.VarChar(16)\n fax String? @db.VarChar(16)\n invoice_delivery Int @default(2) //1-email, 2-poste, 3-default\n land_owner Boolean @default(false) //tinyInt boolean\n frais Boolean @default(false) //tinyInt boolean\n ppa Boolean @default(false)\n ppa_all_invoice Int @default(0) @db.TinyInt\n ppa_name String? @db.VarChar(64)\n ppa_code String? @db.VarChar(255)\n ppa_branch String? @db.VarChar(255)\n ppa_account String? @db.VarChar(255)\n ppa_amount Decimal @default(0.00) @db.Decimal(6, 2)\n ppa_amount_buffer Float @default(30.00)\n ppa_all_tmp Int @default(0) @db.TinyInt\n ppa_fixed Boolean @default(false)\n commercial Boolean @default(false)\n vip Boolean @default(false)\n tax_group Int @default(1) @db.TinyInt\n data_check Boolean @default(false)\n created_by Int?\n notes_client String? @db.VarChar(256) //comments left by customer via the \"portail\"\n keyword String? @db.VarChar(512)\n terminate_reason String? @db.VarChar(32) //install,demenage, cie, autre, NULL\n terminate_cie String? @db.VarChar(32) // null, bell, autre, videotron, cogeco, deery, explirnet, sftl, haut-richelieu\n terminate_note String? @db.MediumText // comment on the termination of the account\n terminate_date String? @db.VarChar(16)\n call Boolean @default(false) //tinyInt boolean\n pub Boolean @default(true) //TinyInt boolean\n portal_client_log Boolean @default(false) //TinyInt boolean\n mauvais_payeur Boolean @default(false) //TinyInt boolean\n renew_phone Boolean @default(false) //TinyInt boolean\n ppa_cc Int @default(0) @db.TinyInt\n stripe_id String? @db.VarChar(32)\n\n @@index([customer_id], map: \"customer_id\")\n @@index([id, status], map: \"id\")\n @@index([status], map: \"status\")\n}\n\nmodel account_group {\n id Int @id @default(autoincrement()) @db.TinyInt //see group_id in account table for references\n date_orig BigInt?\n group_name String? @db.VarChar(64) //group name\n}\n\n// this table could be ignored ? see comment on memo column\nmodel account_memo {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n last_updated BigInt @default(0) @db.UnsignedBigInt\n staff_id BigInt?\n account_id BigInt?\n memo String? @db.VarChar(1024) //comment, seems to be a copy paste of a form, giving a bunch of infos on the account, should be queried instead of copied\n color String @default(dbgenerated(\"(000000)\")) @db.VarChar(6) //CSS\n bcolor String @default(dbgenerated(\"(E0E0E0)\")) @db.VarChar(6) //CSS\n border String @default(dbgenerated(\"(000000)\")) @db.VarChar(6) //CSS\n\n @@index([account_id], map: \"account_id\")\n @@index([staff_id], map: \"staff_id\")\n}\n\nmodel compta_comptes {\n id BigInt @id @default(autoincrement())\n category String? @db.VarChar(64)\n num_compte String? @db.VarChar(16)\n desc String? @db.MediumText\n}\n\nmodel compta_comptes_soldes {\n id BigInt @id @default(autoincrement())\n num_compte Int\n year Int\n amount Float @db.Float\n comment String @db.VarChar(64)\n type String @db.VarChar(3)\n}\n\nmodel compta_journal_ecriture {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n type String? @db.VarChar(4)\n num BigInt?\n customer_id String? @db.VarChar(32)\n full_name String? @db.VarChar(256)\n desc String? @db.MediumText\n mo String? @db.VarChar(4)\n em Int @default(0) @db.TinyInt\n\n @@index([customer_id], map: \"customer_id\")\n @@index([date_orig], map: \"date_orig\")\n @@index([num], map: \"num\")\n}\n\nmodel compta_journal_ecriture_bk {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n type String? @db.VarChar(4)\n num BigInt?\n customer_id String? @db.VarChar(32)\n full_name String? @db.VarChar(256)\n desc String? @db.MediumText\n mo String? @db.VarChar(4)\n em Int @default(0) @db.TinyInt\n\n @@index([customer_id], map: \"customer_id\")\n @@index([date_orig], map: \"date_orig\")\n @@index([num], map: \"num\")\n}\n\nmodel compta_journal_ecriture_detail {\n id BigInt @id @default(autoincrement())\n journal_id BigInt?\n num_compte BigInt?\n amount Float?\n action String? @db.VarChar(16)\n\n @@index([journal_id], map: \"journal_id\")\n}\n\nmodel compta_journal_ecriture_detail_bk {\n id BigInt @id @default(autoincrement())\n journal_id BigInt?\n num_compte BigInt?\n amount Float?\n action String? @db.VarChar(16)\n\n @@index([journal_id], map: \"journal_id\")\n}\n\nmodel compta_periode {\n month Int @id @default(7)\n}\n\n/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments\nmodel compta_ppa_file_id {\n last_id Int @id @default(1)\n}\n\nmodel compta_setup {\n setup_id Int @id @default(1)\n period_month Int @default(7)\n ppa_id Int @default(1)\n excedent_max Float @default(0)\n month_closed BigInt?\n pay_week_closed Int @db.UnsignedTinyInt\n attachment_ext String @db.MediumText\n netadmin_dispo Int @default(0) @db.UnsignedInt\n imap_token String? @db.Text\n}\n\nmodel credit_code {\n id Int @id @default(autoincrement())\n code String @db.VarChar(16)\n desc String @db.VarChar(256)\n}\n\nmodel tax {\n id Int @id @default(autoincrement())\n name String? @db.VarChar(128)\n description String? @db.VarChar(255)\n rate Float?\n}\n\nmodel tax_group {\n id Int @id @default(autoincrement())\n name String? @db.VarChar(128)\n description String? @db.VarChar(255)\n tax String? @db.VarChar(128)\n}\n\nmodel td_payable {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n ticket_id Int @default(0) @db.UnsignedInt\n invoice String @default(dbgenerated(\"()\")) @db.VarChar(32)\n date_invoice String @db.VarChar(20)\n fournisseur String? @default(dbgenerated(\"()\")) @db.VarChar(128)\n montant Decimal @default(0.00) @db.Decimal(15, 2)\n devise String @default(dbgenerated(\"(ca)\")) @db.VarChar(2)\n methode String? @default(dbgenerated(\"()\")) @db.VarChar(64)\n reference String? @default(dbgenerated(\"()\")) @db.VarChar(128)\n date_paiement String? @default(dbgenerated(\"()\")) @db.VarChar(20)\n releve String? @db.VarChar(128)\n\n @@index([ticket_id], map: \"ticket_id\")\n}\n\nmodel conso {\n id BigInt @id @default(autoincrement())\n ip_id String? @db.VarChar(16)\n date BigInt?\n total BigInt? @default(0)\n total_day BigInt? @default(0)\n total_night BigInt? @default(0)\n\n @@index([ip_id], map: \"ip_id\")\n}\n\nmodel conso_archive {\n id BigInt @id @default(autoincrement())\n ip_id String? @db.VarChar(16)\n date BigInt?\n total BigInt? @default(0)\n total_day BigInt? @default(0)\n total_night BigInt? @default(0)\n\n @@index([ip_id], map: \"ip_id\")\n}\n\nmodel conso_avis {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date BigInt\n account_id Int @db.UnsignedInt\n delivery_id Int @default(0) @db.UnsignedInt\n service_id Int @default(0) @db.UnsignedInt\n ip_id Int\n avis String @db.VarChar(32)\n}\n\nmodel conso_radius {\n id BigInt @id @default(autoincrement()) @db.UnsignedBigInt\n username String @db.VarChar(32)\n date String @db.VarChar(32)\n download String @db.Text\n upload String @db.Text\n nb_sess Int @default(0) @db.UnsignedInt\n\n @@index([date], map: \"date\")\n @@index([username], map: \"username\")\n}\n\nmodel conso_radius_daily {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n username String @db.VarChar(32)\n date String @db.VarChar(32)\n download_nuit String @db.Text\n upload_nuit String @db.Text\n download_jour String @db.Text\n upload_jour String @db.Text\n\n @@index([date], map: \"date\")\n @@index([username], map: \"username\")\n}\n\nmodel conso_radius_daily2 {\n id BigInt @id @default(autoincrement()) @db.UnsignedBigInt\n username String @db.VarChar(32)\n date String @db.VarChar(32)\n download_nuit String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n upload_nuit String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n download_jour String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n upload_jour String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n\n @@index([date], map: \"date\")\n @@index([username], map: \"username\")\n}\n\nmodel conso_radius_hourly {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n username String @db.VarChar(32)\n date String @db.VarChar(32)\n download String @db.Text\n upload String @db.Text\n\n @@index([date], map: \"date\")\n @@index([username], map: \"username\")\n}\n\nmodel conso_radius_monthly {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date String @db.VarChar(32)\n username String @db.VarChar(32)\n nuit String @db.Text\n jour String @db.Text\n\n @@index([date], map: \"date\")\n @@index([username], map: \"username\")\n}\n\nmodel conso_radius_monthly2 {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date String @db.VarChar(32)\n username String @db.VarChar(32)\n nuit String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n jour String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n\n @@index([date], map: \"date\")\n @@index([username], map: \"username\")\n}\n\nmodel delivery {\n id BigInt @id @default(autoincrement())\n account_id BigInt?\n name String @db.VarChar(32)\n comment String @db.VarChar(512)\n date_orig BigInt?\n address1 String? @db.VarChar(128)\n address2 String? @db.VarChar(128)\n city String? @db.VarChar(32)\n state String? @db.VarChar(32)\n zip String? @db.VarChar(16)\n longitude Decimal @db.Decimal(12, 7)\n latitude Decimal @db.Decimal(12, 7)\n tel_home String? @db.VarChar(16)\n tel_office String? @db.VarChar(16)\n tel_office_ext String? @db.VarChar(4)\n cell String? @db.VarChar(12)\n fax String? @db.VarChar(12)\n email String? @db.VarChar(255)\n quota_max_day BigInt @default(0) @db.UnsignedBigInt\n quota_max_night BigInt @default(0) @db.UnsignedBigInt\n contact String? @db.VarChar(128)\n expanded Int? @default(0) @db.TinyInt\n placemarks_id BigInt? @db.UnsignedBigInt\n epg_subid Int @default(0) @db.UnsignedInt\n\n @@index([account_id], map: \"account_id\")\n @@index([placemarks_id], map: \"placemarks_id\")\n}\n\nmodel delivery_history {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n date_orig BigInt @db.UnsignedBigInt\n address1 String @db.VarChar(128)\n address2 String @db.VarChar(128)\n city String @db.VarChar(128)\n state String @db.VarChar(32)\n zip String @db.VarChar(8)\n\n @@index([account_id], map: \"account_id\")\n}\n\nmodel device {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n category String @db.VarChar(64)\n name String @db.VarChar(128)\n manufacturier String? @db.VarChar(128)\n model String? @db.VarChar(128)\n sn String? @db.VarChar(128)\n mac String? @db.VarChar(32)\n manage String @db.VarChar(256)\n port String @default(dbgenerated(\"()\")) @db.VarChar(5)\n protocol String @default(dbgenerated(\"(https)\")) @db.VarChar(8)\n manage_cli String @db.VarChar(256)\n port_cli String @default(dbgenerated(\"()\")) @db.VarChar(5)\n protocol_cli String @db.VarChar(8)\n user String @db.VarChar(64)\n pass String @db.VarChar(128)\n parent Int @default(0) @db.UnsignedInt\n\n @@index([delivery_id], map: \"delivery_id\")\n @@index([sn], map: \"sn\")\n}\n\nmodel device_archive {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n category String @db.VarChar(64)\n name String @db.VarChar(128)\n manufacturier String? @db.VarChar(128)\n model String? @db.VarChar(128)\n sn String? @db.VarChar(128)\n mac String? @db.VarChar(32)\n manage String @db.VarChar(256)\n port String @default(dbgenerated(\"()\")) @db.VarChar(5)\n protocol String @default(dbgenerated(\"(https)\")) @db.VarChar(8)\n manage_cli String @db.VarChar(256)\n port_cli String @default(dbgenerated(\"()\")) @db.VarChar(5)\n protocol_cli String @db.VarChar(8)\n user String @db.VarChar(64)\n pass String @db.VarChar(128)\n parent Int @default(0) @db.UnsignedInt\n\n @@index([delivery_id], map: \"delivery_id\")\n @@index([sn], map: \"sn\")\n}\n\nmodel device_attr {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n device_id Int @db.UnsignedInt\n attr String @db.VarChar(128)\n value String @db.VarChar(128)\n\n @@index([device_id], map: \"device_id\")\n}\n\nmodel device_link {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n parent Int @db.UnsignedInt\n child Int @db.UnsignedInt\n}\n\nmodel device_template {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n nom String @db.VarChar(128)\n}\n\nmodel device_template_attr {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n template_id Int @db.UnsignedInt\n attr String @db.VarChar(128)\n default_val String @db.VarChar(128)\n}\n\nmodel product {\n id Int @id @default(autoincrement())\n date_orig BigInt?\n sku String? @db.VarChar(32)\n active Int? @db.TinyInt\n price Float?\n price_recurr_type Int? @db.TinyInt\n price_recurr_weekday Int?\n price_recurr_week Int?\n price_recurr_schedule Int? @db.TinyInt\n download_speed BigInt?\n upload_speed BigInt?\n night_package Int @default(0) @db.TinyInt\n quota_day BigInt? @db.UnsignedBigInt\n quota_night BigInt? @db.UnsignedBigInt\n category Int? @db.TinyInt\n uniq_charge Int @default(0) @db.TinyInt\n commercial Boolean @default(false)\n portal_hidden Boolean @default(false)\n inv_keep Boolean @default(false)\n inv_tag String? @db.VarChar(255)\n inv_threshold Int @default(0) @db.UnsignedInt\n inv_qte Int @default(0) @db.UnsignedInt\n emplacement String @default(dbgenerated(\"()\")) @db.VarChar(16)\n list_tech Int @default(0) @db.UnsignedTinyInt\n type Int @default(0) @db.UnsignedTinyInt\n combo_ready Int @default(0) @db.UnsignedTinyInt\n fibre_lineprofile String? @db.VarChar(8)\n fibre_serviceprofile String? @db.VarChar(8)\n\n @@index([sku], map: \"sku\")\n}\n\nmodel product_cat {\n id Int @id @default(autoincrement())\n name String? @db.VarChar(255)\n notes String? @db.VarChar(255)\n status Int? @db.TinyInt\n num_compte BigInt?\n combo_dispo Int @default(0) @db.UnsignedTinyInt\n}\n\nmodel product_format {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n name String? @db.VarChar(255)\n type Int? @db.TinyInt\n product_idx String? @db.MediumText\n description String? @db.MediumText\n}\n\nmodel product_fournisseur {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n product_id Int @db.UnsignedInt\n nom_fournisseur String @db.VarChar(255)\n prix_us Boolean @default(false)\n prix_achat Float @default(0.00)\n prix_livr String @default(dbgenerated(\"()\")) @db.VarChar(16)\n delais_livr String @default(dbgenerated(\"()\")) @db.VarChar(128)\n comment String @default(dbgenerated(\"()\")) @db.VarChar(128)\n\n @@index([product_id], map: \"product_id\")\n}\n\nmodel product_profile {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n product_id Int @db.UnsignedInt\n device_type String @db.VarChar(64)\n line_profile Int @db.UnsignedInt\n service_profile Int @db.UnsignedInt\n}\n\nmodel product_speciaux {\n id BigInt @id @default(autoincrement())\n product_zone_id BigInt\n product_id BigInt\n price Float?\n price_install Float?\n exp_timestamp BigInt?\n duree_contrat Int? @db.UnsignedTinyInt\n\n @@index([product_zone_id], map: \"product_zone_id\")\n}\n\nmodel product_translate {\n id Int @id @default(autoincrement())\n product_id Int?\n language_id String? @db.VarChar(16)\n name String? @db.VarChar(512)\n description_short String? @db.LongText\n description_full String? @db.LongText\n\n @@index([language_id], map: \"language_id\")\n @@index([product_id], map: \"product_id\")\n}\n\nmodel product_zone {\n id BigInt @id @default(autoincrement())\n zoneNumber Int @db.UnsignedInt\n description String? @db.VarChar(255)\n\n @@index([zoneNumber], map: \"zoneNumber\")\n}\n\nmodel product_zone_placemarks {\n id BigInt @id @default(autoincrement())\n product_zone_id BigInt @db.UnsignedBigInt\n placemarks_id BigInt @db.UnsignedBigInt\n\n @@index([placemarks_id], map: \"placemarks_id\")\n}\n\nmodel inventaire_log {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n prod_tag String @db.VarChar(255)\n staff_id Int @db.UnsignedInt\n action String @db.VarChar(1)\n qte Int @db.UnsignedInt\n timestamp String @db.VarChar(10)\n\n @@index([prod_tag], map: \"prod_tag\")\n}\n\nmodel phone {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n service_id Int @db.UnsignedInt\n phone_num String @db.VarChar(16)\n note String? @db.Text\n fournisseur String? @db.VarChar(64)\n}\n\nmodel phone_addr {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n phone String @db.VarChar(16)\n street_number String @db.VarChar(10)\n apt String @db.VarChar(30)\n street_name String @db.VarChar(84)\n city String @db.VarChar(38)\n state String @db.VarChar(2)\n zip String @db.VarChar(10)\n first_name String @db.VarChar(38)\n last_name String @db.VarChar(100)\n info String @db.VarChar(100)\n enhanced_capable phone_addr_enhanced_capable @default(dbgenerated(\"(Y)\"))\n code_cauca String? @db.VarChar(3)\n class_service String @default(dbgenerated(\"(RES)\")) @db.VarChar(3)\n}\n\nmodel phone_comwave {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id BigInt?\n service_id BigInt?\n requestId Int @unique(map: \"requestId\") @db.UnsignedInt\n phoneNumber String @db.VarChar(10)\n status String @default(dbgenerated(\"(P)\")) @db.VarChar(1)\n date String? @db.VarChar(10)\n reason String? @db.Text\n}\n\nmodel phone_note {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n phone String @unique(map: \"phone\") @db.VarChar(11)\n rate_center String? @db.VarChar(128)\n fournisseur String @default(dbgenerated(\"(comwave)\")) @db.VarChar(64)\n note String? @db.Text\n}\n\nmodel phone_provisioning {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n service_id Int @db.UnsignedInt\n phone String @db.VarChar(10)\n app String @db.VarChar(16)\n mac String @db.VarChar(16)\n password String @db.VarChar(32)\n internationnal String? @db.VarChar(6)\n date_orig BigInt @db.UnsignedBigInt\n date_update BigInt @db.UnsignedBigInt\n}\n\nmodel phonecall_channel {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n timestamp BigInt @unique(map: \"timestamp\") @db.UnsignedBigInt\n max_tinktell Int @default(0) @db.UnsignedTinyInt\n max_outgoing_thinktell Int @default(0) @db.UnsignedTinyInt\n max_comwave Int @default(0) @db.UnsignedTinyInt\n max_outgoing_comwave Int @default(0) @db.UnsignedTinyInt\n max_total Int @default(0) @db.UnsignedTinyInt\n}\n\nmodel phonecall_log_2025 {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n caller_id_name String @db.VarChar(64)\n caller_id_number String @db.VarChar(32)\n destination_number String @db.VarChar(32)\n start_stamp DateTime @db.DateTime(0)\n answer_stamp DateTime @db.DateTime(0)\n end_stamp DateTime @db.DateTime(0)\n duration Int\n billing Decimal @default(0.00000) @db.Decimal(15, 5)\n hangup_cause String @db.VarChar(32)\n uuid String @unique(map: \"uuid\") @db.VarChar(64)\n}\n\nmodel phonecall_log_2026 {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n caller_id_name String @db.VarChar(64)\n caller_id_number String @db.VarChar(32)\n destination_number String @db.VarChar(32)\n start_stamp DateTime @db.DateTime(0)\n answer_stamp DateTime @db.DateTime(0)\n end_stamp DateTime @db.DateTime(0)\n duration Int\n billing Decimal @default(0.00000) @db.Decimal(15, 5)\n hangup_cause String @db.VarChar(32)\n uuid String @unique(map: \"uuid\") @db.VarChar(64)\n}\n\nmodel voicemeup {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n date BigInt @db.UnsignedBigInt\n duration Int @db.UnsignedInt\n destination String @db.VarChar(16)\n country String @db.VarChar(256)\n state String? @db.VarChar(128)\n district String? @db.VarChar(128)\n amount Float\n uuid String? @db.VarChar(64)\n}\n\n/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.\nmodel babytel {\n date_time BigInt?\n record_type String? @db.VarChar(20)\n record_format_version Int?\n id String? @db.VarChar(24)\n rate_id String? @db.VarChar(20)\n cost Float? @db.Float\n calling_user String? @db.VarChar(24)\n called_user String? @db.VarChar(24)\n calling_domain String? @db.VarChar(24)\n called_domain String? @db.VarChar(24)\n destination String? @db.VarChar(24)\n duration_seconds String? @db.VarChar(24)\n call_start String? @db.VarChar(24)\n call_type String? @db.VarChar(24)\n call_direction String? @db.VarChar(24)\n test_call String? @db.VarChar(24)\n calling_number String? @db.VarChar(24)\n called_number_e164 String? @db.VarChar(24)\n billable_duration String? @db.VarChar(24)\n billed_duration_outbound_seconds String? @db.VarChar(24)\n reseller_cost Float? @db.Float\n master_account_id String? @db.VarChar(24)\n forwarded_to String? @db.VarChar(24)\n master_account_pk String? @db.VarChar(24)\n account_pk String? @db.VarChar(24)\n reseller_rate_id String? @db.VarChar(24)\n internal_information1 String? @db.VarChar(24)\n concurrents_calls String? @db.VarChar(24)\n external_id String? @db.VarChar(24)\n commission Float? @db.Float\n minute_plan_id String? @db.VarChar(24)\n internal_information2 String? @db.VarChar(24)\n internal_information3 String? @db.VarChar(24)\n billed_duration_inbound_seconds String? @db.VarChar(24)\n selected_destination String? @db.VarChar(24)\n internal_information4 String? @db.VarChar(24)\n internal_information5 String? @db.VarChar(24)\n cost_center String? @db.VarChar(24)\n subscriber_group String? @db.VarChar(24)\n\n @@ignore\n}\n\n/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments\nmodel pbx {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n service_id Int @db.UnsignedInt\n phone String @db.VarChar(10)\n name String? @db.VarChar(32)\n password String @db.VarChar(8)\n vm_password String @default(dbgenerated(\"(1234)\")) @db.VarChar(16)\n has_vm Int @default(1) @db.TinyInt\n vm_email String? @db.VarChar(64)\n keep_msg Int @default(0) @db.TinyInt\n vm_disk_quota Int @default(180) @db.UnsignedInt\n int_code String @db.VarChar(4)\n language String @default(dbgenerated(\"(fr)\")) @db.VarChar(2)\n call_911 String @db.VarChar(11)\n max_calls Int @default(2) @db.UnsignedTinyInt\n call_timeout Int @default(30) @db.UnsignedSmallInt\n user_context String @default(dbgenerated(\"(sip.targo.ca)\")) @db.VarChar(32)\n country_whitelist String @db.Text\n date_origin BigInt @db.UnsignedBigInt\n date_update BigInt @db.UnsignedBigInt\n update_by Int? @db.UnsignedInt\n\n @@index([phone], map: \"phone\")\n}\n\nmodel pbx_app {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n pbx_id Int @db.UnsignedInt\n username String @db.VarChar(16)\n mac String @db.VarChar(16)\n app String @default(dbgenerated(\"(ht502)\")) @db.VarChar(16)\n note String @db.Text\n date_origin BigInt @db.UnsignedBigInt\n date_update BigInt @db.UnsignedBigInt\n update_by Int? @db.UnsignedInt\n\n @@index([pbx_id], map: \"pbx_id\")\n}\n\nmodel pbx_com {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n service_id Int @db.UnsignedInt\n phone String @db.VarChar(10)\n name String @db.VarChar(32)\n failover String @db.VarChar(16)\n auth_method String @default(dbgenerated(\"(password)\")) @db.VarChar(8)\n password String @db.VarChar(8)\n ip String @db.VarChar(16)\n int_code String @db.VarChar(4)\n country_whitelist String @db.Text\n language String @db.VarChar(2)\n call_911 String @db.VarChar(16)\n max_calls Int @db.UnsignedTinyInt\n user_context String @db.VarChar(32)\n date_origin String @db.VarChar(16)\n date_update String @db.VarChar(16)\n update_by Int @db.UnsignedInt\n}\n\nmodel pbx_com_wl {\n id Int @id @default(autoincrement())\n phone String @unique(map: \"phone\") @db.VarChar(10)\n country_whitelist String @db.Text\n}\n\nmodel pbx_fax {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n number String @db.VarChar(10)\n email String @db.VarChar(128)\n description String? @db.VarChar(128)\n service_id Int @default(0) @db.UnsignedInt\n\n @@index([number], map: \"number\")\n}\n\nmodel payment {\n id BigInt @id @default(autoincrement())\n account_id BigInt?\n date_orig BigInt?\n amount Float?\n applied_amt Float?\n type String? @db.VarChar(25)\n memo String? @db.VarChar(512)\n reference String? @db.VarChar(128)\n excedent Int @default(0) @db.TinyInt\n correction Int @default(0) @db.TinyInt\n cr Int @default(0) @db.TinyInt\n uniqsess String? @db.VarChar(32)\n\n @@index([account_id], map: \"account_id\")\n @@index([date_orig], map: \"date_orig\")\n}\n\nmodel payment_item {\n id BigInt @id @default(autoincrement())\n payment_id BigInt?\n invoice_id BigInt?\n amount Float?\n date_orig BigInt?\n\n @@index([invoice_id], map: \"invoice_id\")\n @@index([payment_id], map: \"payment_id\")\n}\n\nmodel passwords_manager {\n id BigInt @id @default(autoincrement())\n title String @db.VarChar(64)\n login String @db.VarChar(255)\n pass String @db.Text\n url String? @db.VarChar(255)\n email String? @db.VarChar(128)\n phone String? @db.VarChar(32)\n category String? @db.VarChar(32)\n subcategory String? @db.VarChar(32)\n desc String? @db.MediumText\n notes String? @db.MediumText\n logs String? @db.MediumText\n date_orig BigInt\n date_last BigInt\n users_granted String? @db.MediumText\n group_granted String? @db.Text\n created_by BigInt\n keywords String? @db.MediumText\n}\n\nmodel passwords_manager_cat {\n id Int @id @default(autoincrement()) @db.TinyInt\n title String @db.VarChar(32)\n desc String? @db.VarChar(255)\n}\n\nmodel passwords_manager_group {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String @db.VarChar(32)\n users String? @db.Text\n}\n\nmodel notification {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n staff_id Int\n endpoint String @db.Text\n authToken String @db.Text\n publicKey String @db.Text\n contentEncoding String @default(dbgenerated(\"(aesgcm)\")) @db.VarChar(128)\n plateforme String? @db.VarChar(128)\n\n @@index([staff_id], map: \"staff_id\")\n}\n\nmodel notification_payload {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n notification_id Int @db.UnsignedInt\n payload String @db.Text\n timestamp DateTime @default(now()) @db.Timestamp(0)\n}\n\n/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.\nmodel country {\n id Int? @unique(map: \"IDS\")\n name_en String? @db.VarChar(128)\n name_fr String? @db.VarChar(128)\n description String? @db.VarChar(128)\n notes String? @db.VarChar(128)\n two_code String? @db.VarChar(16)\n three_code String? @db.VarChar(16)\n\n @@ignore\n}\n\nmodel municipalite {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n nom String @db.VarChar(64)\n code String @db.VarChar(4)\n administration String @db.VarChar(64)\n often_used Boolean @default(false)\n}\n\nmodel sommaire_porte {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n fibre_id Int @default(0) @db.UnsignedInt\n id_adresse String @db.VarChar(48)\n id_subvention String @db.VarChar(32)\n adresse_subvention String @db.VarChar(128)\n ville_subvention String @db.VarChar(128)\n latitude String @db.VarChar(32)\n longitude String @db.VarChar(32)\n contest_adresse Int @default(0) @db.UnsignedTinyInt\n new_adresse Int @default(0) @db.UnsignedTinyInt\n placemarks_id BigInt @db.UnsignedBigInt\n}\n\nmodel state {\n id Int @id @default(autoincrement()) @db.UnsignedTinyInt\n name_en String @db.VarChar(64)\n name_fr String @db.VarChar(64)\n abbrev String @db.VarChar(2)\n country String @db.VarChar(8)\n}\n\nmodel licence {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n nom String @db.VarChar(128)\n date String @db.VarChar(10)\n can_manage String @db.VarChar(64)\n comment String? @db.Text\n}\n\nmodel licence_key {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n licence_id Int @db.UnsignedInt\n licence_key String @db.Text\n date String @db.VarChar(10)\n date_expire String? @db.VarChar(10)\n comment String @db.Text\n\n @@index([licence_id], map: \"licence_id\")\n}\n\nmodel ip {\n id Int @id @default(autoincrement())\n service_id BigInt?\n ip String? @db.VarChar(32)\n prive String? @db.VarChar(32)\n ip_relais String? @db.VarChar(128)\n technology String? @db.VarChar(32)\n name_access_point String? @db.VarChar(64)\n mac String? @db.VarChar(32)\n web_link String? @db.VarChar(128)\n link_relais String? @db.VarChar(128)\n ip_conso Int @default(0) @db.TinyInt\n actif Int @default(1) @db.TinyInt\n comment String? @db.MediumText\n cidr String? @db.VarChar(32)\n last_updated DateTime @default(now()) @db.DateTime(0)\n\n @@index([ip], map: \"ip\")\n @@index([prive], map: \"prive\")\n @@index([service_id], map: \"service_id\")\n}\n\nmodel ip_admin {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n ip String @db.VarChar(20)\n comment String? @db.VarChar(128)\n}\n\nmodel ip_history {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n service_id Int @db.UnsignedInt\n ip String @db.VarChar(32)\n date BigInt @db.UnsignedBigInt\n}\n\nmodel ip_pp {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n ip_prive String @db.VarChar(32)\n ip_public String @db.VarChar(32)\n date BigInt @db.UnsignedBigInt\n ip_id String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n}\n\nmodel ip_static {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n ip String @unique(map: \"ip\") @db.VarChar(32)\n static Boolean @default(false)\n reverse String? @db.VarChar(128)\n}\n\nmodel ip_targo {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n ip String @db.VarChar(15)\n cidr Int @db.UnsignedTinyInt\n comment String? @db.VarChar(128)\n}\n\n/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments\nmodel invoice {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n process_status Int? @db.TinyInt\n billing_status Int? @db.TinyInt\n refund_status Int? @db.TinyInt\n print_status Int? @db.TinyInt\n account_id BigInt?\n total_amt Float?\n billed_amt Float?\n due_date BigInt?\n notes String? @db.MediumText\n template_message String? @db.MediumText\n email_status Int? @db.TinyInt\n working_order String? @db.VarChar(64)\n correction Int @default(0) @db.TinyInt\n ppa_charge Int @default(0) @db.TinyInt\n credit_code_id Int @default(0) @db.TinyInt\n\n @@index([account_id], map: \"account_id\")\n @@index([billing_status], map: \"billing_status\")\n @@index([date_orig], map: \"date_orig\")\n @@index([refund_status], map: \"refund_status\")\n}\n\n/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments\nmodel invoice_bk {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n process_status Int? @db.TinyInt\n billing_status Int? @db.TinyInt\n refund_status Int? @db.TinyInt\n print_status Int? @db.TinyInt\n account_id BigInt?\n total_amt Float?\n billed_amt Float?\n due_date BigInt?\n notes String? @db.MediumText\n template_message String? @db.MediumText\n email_status Int? @db.TinyInt\n working_order String? @db.VarChar(64)\n correction Int @default(0) @db.TinyInt\n ppa_charge Int @default(0) @db.TinyInt\n credit_code_id Int @default(0) @db.TinyInt\n\n @@index([account_id], map: \"account_id\")\n @@index([billing_status], map: \"billing_status\")\n @@index([date_orig], map: \"date_orig\")\n @@index([refund_status], map: \"refund_status\")\n}\n\nmodel invoice_call {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date BigInt @db.UnsignedBigInt\n number String @db.VarChar(10)\n amount Float\n}\n\nmodel invoice_item {\n id BigInt @id @default(autoincrement())\n service_id BigInt?\n invoice_id BigInt?\n sku String? @db.VarChar(128)\n quantity Float @default(0)\n product_name String? @db.VarChar(512)\n unitary_price Float?\n nosub Boolean @default(false)\n delivery_name String? @db.VarChar(32)\n\n @@index([invoice_id], map: \"invoice_id\")\n}\n\nmodel invoice_item_bk {\n id BigInt @id @default(autoincrement())\n service_id BigInt?\n invoice_id BigInt?\n sku String? @db.VarChar(128)\n quantity Float @default(0)\n product_name String? @db.VarChar(512)\n unitary_price Float?\n nosub Boolean @default(false)\n delivery_name String? @db.VarChar(32)\n\n @@index([invoice_id], map: \"invoice_id\")\n}\n\nmodel invoice_msg_template {\n id BigInt @id @default(autoincrement())\n name String? @db.VarChar(32)\n message String? @db.MediumText\n}\n\nmodel invoice_tax {\n id BigInt @id @default(autoincrement())\n invoice_id BigInt?\n tax_name String? @db.VarChar(128)\n tax_description String? @db.VarChar(128)\n tax_rate Float?\n amount Float?\n\n @@index([invoice_id], map: \"invoice_id\")\n}\n\nmodel invoice_tax_bk {\n id BigInt @id @default(autoincrement())\n invoice_id BigInt?\n tax_name String? @db.VarChar(128)\n tax_description String? @db.VarChar(128)\n tax_rate Float?\n amount Float?\n\n @@index([invoice_id], map: \"invoice_id\")\n}\n\n/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments\nmodel accord_paiement {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n date_accord BigInt\n date_echeance BigInt\n date_coupure BigInt @db.UnsignedBigInt\n raison_changement String? @db.Text\n montant Decimal @db.Decimal(10, 2)\n method Int @default(0) @db.UnsignedTinyInt\n ferie Boolean @default(false)\n note String? @db.Text\n status Int @default(-1) @db.TinyInt\n staff_id Int @default(1) @db.UnsignedInt\n date_create String @db.VarChar(16)\n\n @@index([account_id], map: \"account_id\")\n}\n\nmodel autologin {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n token String @db.VarChar(32)\n date String @db.VarChar(16)\n staff Int @db.UnsignedInt\n}\n\nmodel statement {\n id BigInt @id @default(autoincrement())\n date BigInt?\n type String? @db.VarChar(2)\n number BigInt?\n reference String? @db.MediumText\n amt Float?\n paid_amt Float?\n}\n\nmodel intranet_doc {\n id BigInt @id @default(autoincrement())\n account_id BigInt\n date BigInt\n title String @db.VarChar(128)\n msg String @db.MediumText\n attachment String @db.VarChar(256)\n unread_csv String @db.MediumText\n path_id Int @db.UnsignedInt\n priority_order Int @default(1)\n update_timestamp DateTime @default(now()) @db.Timestamp(0)\n\n @@index([account_id], map: \"account_id\")\n @@index([path_id], map: \"path_id\")\n}\n\nmodel intranet_doc_paths {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n description String @db.VarChar(256)\n parent_id Int? @db.UnsignedInt\n priority_order Int @default(1)\n}\n\nmodel intranet_doc_reply {\n id BigInt @id @default(autoincrement())\n feed_id BigInt\n date BigInt\n account_id BigInt\n msg String @db.MediumText\n attachment BigInt @default(0)\n update_timestamp DateTime @default(now()) @db.Timestamp(0)\n}\n\nmodel intranet_feed {\n id BigInt @id @default(autoincrement())\n account_id BigInt\n date BigInt\n title String @db.VarChar(128)\n msg String @db.MediumText\n attachment String @db.VarChar(256)\n unread_csv String @db.MediumText\n}\n\nmodel intranet_feed_reply {\n id BigInt @id @default(autoincrement())\n feed_id BigInt\n date BigInt\n account_id BigInt\n msg String @db.MediumText\n attachment BigInt\n}\n\nmodel intranet_techniciens {\n id BigInt @id @default(autoincrement())\n account_id BigInt\n date BigInt\n title String @db.VarChar(128)\n msg String @db.MediumText\n attachment String @db.VarChar(256)\n unread_csv String @db.MediumText\n}\n\nmodel intranet_techniciens_reply {\n id BigInt @id @default(autoincrement())\n feed_id BigInt\n date BigInt\n account_id BigInt\n msg String @db.MediumText\n attachment BigInt\n}\n\nmodel intranet_techno {\n id BigInt @id @default(autoincrement())\n account_id BigInt\n date BigInt\n title String @db.VarChar(128)\n msg String @db.MediumText\n attachment String @db.VarChar(256)\n unread_csv String @db.MediumText\n}\n\nmodel intranet_techno_reply {\n id BigInt @id @default(autoincrement())\n feed_id BigInt\n date BigInt\n account_id BigInt\n msg String @db.MediumText\n attachment BigInt\n}\n\nmodel fibre {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n terrain String @db.VarChar(16)\n rue String @db.VarChar(128)\n ville String @db.VarChar(128)\n zip String @default(dbgenerated(\"()\")) @db.VarChar(7)\n ontid Int? @db.UnsignedInt\n sn String? @db.VarChar(32)\n tech Int @default(2) @db.UnsignedSmallInt\n info_connect String @default(dbgenerated(\"(172.17.0.2)\")) @db.VarChar(64)\n frame Int? @db.UnsignedTinyInt\n slot Int? @db.UnsignedTinyInt\n port Int? @db.UnsignedTinyInt\n vlan_manage Int? @db.UnsignedInt\n vlan_internet Int? @db.UnsignedInt\n vlan_telephone Int? @db.UnsignedInt\n vlan_tele Int? @db.UnsignedInt\n manage_service_id Int? @db.UnsignedInt\n internet_service_id Int? @db.UnsignedInt\n telephone_service_id Int? @db.UnsignedInt\n tele_service_id Int? @db.UnsignedInt\n service_id Int? @db.UnsignedInt\n nb_drop Int @default(0) @db.UnsignedInt\n placemarks_id BigInt? @db.UnsignedBigInt\n appartements_id BigInt? @db.UnsignedBigInt\n latitude Float? @db.Float\n longitude Float? @db.Float\n boitier_pas_install Int? @db.UnsignedTinyInt\n description String? @db.VarChar(50)\n suite Int @default(0) @db.UnsignedTinyInt\n distance Int? @db.UnsignedInt\n nb_portees Int? @db.UnsignedTinyInt\n\n @@index([appartements_id, sn], map: \"appartements_id\")\n @@index([info_connect, appartements_id, sn, slot, port], map: \"info_connect\")\n @@index([placemarks_id, sn], map: \"placemarks_id\")\n @@index([service_id], map: \"service_id\")\n}\n\nmodel fibre_olt {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n tech Int @db.UnsignedSmallInt\n ip String @db.VarChar(64)\n description String @db.VarChar(128)\n}\n\nmodel fibre_service_port {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n last_service_id Int @db.UnsignedInt\n}\n\nmodel fibre_suivi {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n customer_id String? @db.VarChar(32)\n first_name String @db.VarChar(64)\n last_name String @db.VarChar(64)\n address String @db.VarChar(128)\n city String @db.VarChar(128)\n zip String @db.VarChar(7)\n phone String @db.VarChar(10)\n email String? @db.VarChar(64)\n longitude Decimal @db.Decimal(12, 7)\n latitude Decimal @db.Decimal(12, 7)\n called Int @default(-1) @db.TinyInt\n create_by Int @default(0) @db.UnsignedInt\n note String @db.Text\n}\n\nmodel fibre_tech {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n description String @db.VarChar(128)\n}\n\nmodel fibre_videotron {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date String @db.VarChar(16)\n download String @default(dbgenerated(\"(0)\")) @db.VarChar(128)\n upload String @default(dbgenerated(\"(0)\")) @db.VarChar(128)\n ethernet String @default(dbgenerated(\"()\")) @db.VarChar(64)\n interface String @default(dbgenerated(\"()\")) @db.VarChar(128)\n}\n\nmodel gantt {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @default(0) @db.UnsignedInt\n name String? @db.VarChar(128)\n gantt String @db.Text\n closed Int @default(0) @db.TinyInt\n}\n\nmodel gantt_template {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String? @db.VarChar(128)\n gantt String @db.Text\n}\n\nmodel project {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String @db.VarChar(128)\n status String @db.VarChar(16)\n desc String? @db.Text\n date_start BigInt? @db.UnsignedBigInt\n date_end BigInt? @db.UnsignedBigInt\n manager_name String? @db.VarChar(64)\n}\n\nmodel project_cmd {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n project_id Int @db.UnsignedInt\n date BigInt @db.UnsignedBigInt\n vendeur String? @db.VarChar(128)\n no_cmd String? @db.VarChar(64)\n po String? @db.VarChar(32)\n staff_id Int @default(4667) @db.UnsignedInt\n\n @@index([project_id], map: \"project_id\")\n}\n\nmodel project_cmd_item {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n cmd_id Int @db.UnsignedInt\n product_id Int @default(0) @db.UnsignedInt\n desc String @db.Text\n qte Float\n price Float\n usd Boolean @default(false)\n recu Int @default(0) @db.TinyInt\n qte_recu Float @default(0)\n date_recu String? @db.VarChar(64)\n comment String? @db.VarChar(128)\n eta String? @db.VarChar(10)\n status Int @default(0) @db.UnsignedTinyInt\n\n @@index([cmd_id], map: \"cmd_id\")\n @@index([product_id], map: \"product_id\")\n}\n\nmodel project_manager_cat {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n pos Int @db.UnsignedTinyInt\n name String @db.VarChar(32)\n color String @default(dbgenerated(\"(ffffff)\")) @db.VarChar(7)\n text_color String @default(dbgenerated(\"(#000000)\")) @db.VarChar(7)\n}\n\nmodel project_manager_checklist {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n task_id Int @db.UnsignedInt\n ticket_id Int @db.UnsignedInt\n desc String @db.VarChar(128)\n poids Int @default(1) @db.UnsignedTinyInt\n done Int @default(0) @db.TinyInt\n\n @@index([task_id], map: \"task_id\")\n}\n\nmodel project_manager_comment {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n task_id Int @db.UnsignedInt\n comment String @db.Text\n staff_id Int @db.UnsignedInt\n date String @db.VarChar(16)\n unread String @db.Text\n\n @@index([task_id], map: \"task_id\")\n}\n\nmodel project_manager_task {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n category_id Int @db.UnsignedInt\n pos Int @db.UnsignedTinyInt\n titre String @db.VarChar(255)\n color String @default(dbgenerated(\"(#ffffff)\")) @db.VarChar(7)\n text_color String @default(dbgenerated(\"(#000000)\")) @db.VarChar(7)\n desc String @db.Text\n ticket_id String? @db.VarChar(16)\n date_start String? @db.VarChar(16)\n date_deadline String? @db.VarChar(16)\n deadline_watch Int @default(1) @db.UnsignedTinyInt\n assign_staff String? @db.Text\n priority Int @default(0) @db.UnsignedTinyInt\n done Boolean @default(false)\n create_by Int @db.UnsignedInt\n date_creation String? @db.VarChar(16)\n date_update String? @db.VarChar(16)\n\n @@index([category_id], map: \"category_id\")\n}\n\nmodel service {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n date_suspended BigInt?\n date_next_invoice BigInt?\n date_last_invoice BigInt?\n delivery_id Int?\n device_id Int @default(0) @db.UnsignedInt\n product_id Int?\n comment String? @db.VarChar(255)\n payment_recurrence Int? @db.TinyInt\n status Int? @db.TinyInt\n hijack Int @default(0) @db.TinyInt\n hijack_price Float @default(0)\n hijack_desc String? @db.VarChar(512)\n hijack_download_speed BigInt?\n hijack_upload_speed BigInt?\n hijack_quota_day BigInt?\n hijack_quota_night BigInt?\n date_end_contract BigInt?\n actif_until BigInt?\n forfait_internet Int @default(0) @db.TinyInt\n radius_user String @db.VarChar(24)\n radius_pwd String @db.VarChar(16)\n radius_conso Boolean @default(false)\n\n @@index([date_orig], map: \"date_orig\")\n @@index([delivery_id], map: \"delivery_id\")\n @@index([device_id], map: \"device_id\")\n @@index([id, status], map: \"id\")\n @@index([product_id], map: \"product_id\")\n}\n\nmodel service_snapshot {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date BigInt @db.UnsignedBigInt\n account_id Int @db.UnsignedInt\n service_id Int @db.UnsignedInt\n quota_day BigInt @default(0) @db.UnsignedBigInt\n quota_night BigInt @default(0) @db.UnsignedBigInt\n\n @@index([account_id], map: \"account_id\")\n @@index([service_id], map: \"service_id\")\n}\n\nmodel soumission {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id BigInt\n name String @db.VarChar(64)\n po String? @db.VarChar(64)\n date String @db.VarChar(10)\n tax Int @db.UnsignedTinyInt\n materiel String? @db.LongText\n mensuel String? @db.LongText\n text String? @db.Text\n\n @@index([account_id], map: \"account_id\")\n}\n\nmodel soumission_template {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String @db.VarChar(64)\n materiel String @db.LongText\n mensuel String @db.LongText\n}\n\nmodel staff {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n status Int @db.TinyInt\n username String @unique(map: \"username\") @db.VarChar(32)\n password String @db.VarChar(128)\n vpn String @db.VarChar(64)\n first_name String @db.VarChar(64)\n last_name String @db.VarChar(64)\n email String @db.VarChar(64)\n ext String @db.VarChar(16)\n cell String @db.VarChar(16)\n gpin String? @db.VarChar(4)\n rights String @db.Text\n date_embauche String? @db.VarChar(20)\n fete String? @db.VarChar(16)\n supp String? @db.Text\n group_ad String @default(dbgenerated(\"()\")) @db.VarChar(64)\n dept_list String @db.Text\n notification String @db.Text\n darkmode Boolean @default(false)\n matricule_desjardins Int? @db.UnsignedInt\n compagnie_desjardins String? @db.VarChar(8)\n ldap_id Int?\n}\n\nmodel staff_dispo {\n id Int @id @default(autoincrement()) @db.TinyInt\n day_num Int @db.TinyInt\n staff_id Int?\n}\n\nmodel staff_supp {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n nom String @db.VarChar(64)\n staff_ids String @db.VarChar(128)\n}\n\nmodel tele_carte {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n delivery_id Int @unique(map: \"delivery_id\") @default(0) @db.UnsignedInt\n service_id Int @db.UnsignedInt\n channels String @db.Text\n}\n\nmodel tele_channel {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n proprio String @db.VarChar(128)\n poste String @db.VarChar(128)\n pack_min Int @default(0) @db.UnsignedTinyInt\n pack_redevance Decimal @default(0.00) @db.Decimal(5, 2)\n pack_prix_vendu Decimal @default(0.00) @db.Decimal(5, 2)\n carte_percentage Decimal @db.Decimal(5, 2)\n carte_redevance_min Decimal @db.Decimal(5, 2)\n carte_prix_vendu Decimal @db.Decimal(5, 2)\n monthly_min Decimal @default(0.00) @db.Decimal(5, 2)\n has_penetration_rate Int @default(0) @db.UnsignedTinyInt\n penetration_actuel Decimal @default(0.00) @db.Decimal(3, 2)\n is_commercial Int @default(0) @db.UnsignedTinyInt\n note String @db.Text\n epgId Int @default(0) @db.UnsignedInt\n uptele_no Int @db.UnsignedInt\n uptele_code String @db.VarChar(32)\n abbr String @db.VarChar(32)\n groupe_id Int @default(0) @db.UnsignedInt\n ccsa_packageID Int @db.UnsignedInt\n ccsa_desc String @db.VarChar(256)\n rapport_bell Int @default(0) @db.TinyInt\n}\n\nmodel tele_groupe {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n nom String @db.VarChar(128)\n small_desc String @db.VarChar(128)\n}\n\nmodel tele_network {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n network_name String @db.VarChar(128)\n fournisseur String @db.VarChar(128)\n}\n\nmodel tele_pack {\n id Int @id @default(autoincrement())\n product_id Int @db.UnsignedInt\n channels String @db.Text\n actif Boolean @default(true)\n ccsa_packageID Int @db.UnsignedInt\n ccsa_desc String @db.VarChar(256)\n rapport_bell Int @default(0) @db.TinyInt\n bell_name String? @db.VarChar(64)\n epgId Int? @db.UnsignedInt\n}\n\nmodel tele_penetration {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n id_channel Int @db.UnsignedInt\n percentage Decimal @db.Decimal(3, 2)\n prix Decimal @db.Decimal(10, 5)\n}\n\nmodel tele_sub_archive {\n id Int @id @default(autoincrement())\n date_archive String @db.VarChar(16)\n subs String @db.Text\n}\n\nmodel tele_wiz {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n ticket_id Int @db.UnsignedInt\n nb_stb Int @db.UnsignedTinyInt\n credit Int @db.UnsignedTinyInt\n fbase Int @db.UnsignedInt\n fthem String @db.Text\n}\n\nmodel tv_mac {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n service_id Int @db.UnsignedInt\n mac String @db.VarChar(12)\n}\n\nmodel ticket {\n id BigInt @id @default(autoincrement()) @db.UnsignedBigInt\n ost_id Int? @db.UnsignedInt\n parent BigInt @default(0)\n account_id BigInt?\n delivery_id BigInt @default(0)\n bon_id Int? @db.UnsignedInt\n subject String? @db.VarChar(256)\n dept_id Int?\n open_by Int @default(1)\n email_from String @db.VarChar(128)\n assign_to Int @default(0)\n status String @default(dbgenerated(\"(open)\")) @db.VarChar(32)\n due_date BigInt @default(0)\n due_time String @default(dbgenerated(\"(day)\")) @db.VarChar(8)\n date_create BigInt?\n last_update BigInt?\n date_closed String @default(dbgenerated(\"()\")) @db.VarChar(16)\n pending_to_open BigInt @default(0) @db.UnsignedBigInt\n waiting_for BigInt? @db.UnsignedBigInt\n lock_name String @db.VarChar(64)\n public Boolean? @default(false)\n priority Int @default(2) @db.TinyInt\n install_success Int @default(0) @db.TinyInt\n wizard String? @db.Text\n wizard_fibre String? @db.VarChar(64)\n important Int @default(0) @db.TinyInt\n followed_by String @db.Text\n participant String @db.Text\n update_timestamp DateTime @default(now()) @db.Timestamp(0)\n closed_by Int @default(0) @db.UnsignedInt\n\n @@index([account_id], map: \"account_id\")\n @@index([assign_to], map: \"assign_to\")\n @@index([dept_id], map: \"dept_id\")\n}\n\nmodel ticket_calendar_lock {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date_lock BigInt @default(0) @db.UnsignedBigInt\n dept_id Int @default(12) @db.UnsignedInt\n nb_install Int @default(0) @db.UnsignedSmallInt\n create_by Int @db.UnsignedInt\n update_by Int @db.UnsignedInt\n last_update DateTime @default(now()) @db.Timestamp(0)\n\n @@unique([date_lock, dept_id], map: \"date_dept\")\n}\n\nmodel ticket_calendar_staff_lock {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date BigInt\n staff_id Int @db.UnsignedInt\n}\n\nmodel ticket_conge {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n name String @db.VarChar(128)\n date BigInt @db.UnsignedBigInt\n desc String @db.VarChar(255)\n ticket_id Int? @db.UnsignedInt\n\n @@index([account_id], map: \"account_id\")\n}\n\nmodel ticket_dept {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n parent Int @default(0)\n name String @unique(map: \"name\") @default(dbgenerated(\"()\")) @db.VarChar(32)\n hasChild Int @default(0) @db.SmallInt\n email String @db.VarChar(64)\n manager_id Int @default(0) @db.UnsignedInt\n member_only Boolean @default(false)\n protected Boolean @default(false)\n default_staff Int @default(0) @db.UnsignedInt\n default_follow String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n}\n\nmodel ticket_msg {\n id BigInt @id @default(autoincrement()) @db.UnsignedBigInt\n ticket_id BigInt\n staff_id BigInt @default(0)\n msg String? @db.MediumText\n date_orig BigInt?\n unread_csv String @db.MediumText\n public Boolean? @default(false)\n important Int @default(0) @db.TinyInt\n update_timestamp DateTime @default(now()) @db.Timestamp(0)\n\n @@index([staff_id], map: \"staff_id\")\n @@index([ticket_id], map: \"ticket_id\")\n}\n\nmodel ticket_template {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String @db.VarChar(128)\n template String @db.Text\n}\n\n/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.\nmodel tmp {\n id Int @db.UnsignedInt\n prive String @db.VarChar(20)\n public String @db.VarChar(20)\n\n @@ignore\n}\n\nmodel tmp_vpn {\n id Int @id\n username String @db.VarChar(64)\n password String @db.VarChar(64)\n ad_done Boolean @default(false)\n tacacs Boolean @default(false)\n m Int @default(2000) @db.UnsignedInt\n}\n\nmodel bon_travail {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date BigInt? @db.UnsignedBigInt\n account_id Int @db.UnsignedInt\n tech1 Int? @db.UnsignedInt\n heure_arrive_t1 String? @db.VarChar(10)\n heure_depart_t1 String? @db.VarChar(10)\n tech2 Int? @db.UnsignedInt\n heure_arrive_t2 String? @db.VarChar(10)\n heure_depart_t2 String? @db.VarChar(10)\n note String? @db.Text\n subtotal Decimal? @db.Decimal(10, 2)\n tps Decimal? @db.Decimal(10, 2)\n tvq Decimal? @db.Decimal(10, 2)\n total Decimal? @db.Decimal(10, 2)\n}\n\nmodel bon_travail_item {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n bon_id Int @db.UnsignedInt\n product_id Int @db.UnsignedInt\n qte Int\n price Decimal @db.Decimal(10, 2)\n desc String @db.Text\n}\n\nmodel checklist_relais {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n site_id Int @unique(map: \"site_id\") @db.UnsignedInt\n site_name String? @db.VarChar(128)\n account_id Int @db.UnsignedInt\n priority Int @default(2) @db.UnsignedTinyInt\n done Int @default(0) @db.UnsignedTinyInt\n equipement String? @db.Text\n connecteur String? @db.Text\n grounding String? @db.Text\n surge_lightning String? @db.Text\n switch_poe String? @db.Text\n switch_giga_shield String? @db.Text\n batterie String? @db.Text\n solidity String? @db.Text\n redondance String? @db.Text\n antenne_58_360 String? @db.Text\n antenne_24_360 String? @db.Text\n rspro_maj String? @db.Text\n boite String? @db.Text\n cable String? @db.Text\n staros_ubnt String? @db.Text\n autre String? @db.Text\n}\n\n/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments\nmodel conference {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n room_id Int @db.UnsignedInt\n time_start String @db.VarChar(16)\n time_end String @db.VarChar(16)\n name String @db.VarChar(128)\n description String? @db.Text\n host Int @db.UnsignedInt\n participant String @db.Text\n}\n\nmodel conference_room {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String @db.VarChar(128)\n status Int @default(1) @db.TinyInt\n location String? @db.VarChar(128)\n description String? @db.Text\n}\n\nmodel fournisseur {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n nom String @db.VarChar(128)\n email String @db.VarChar(64)\n actif Boolean @default(true)\n}\n\nmodel notice_gui {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n staff_id Int @db.UnsignedInt\n message String @db.Text\n is_read Int @default(0)\n timestamp String @db.VarChar(10)\n}\n\nmodel promo {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String? @db.VarChar(64)\n desc String? @db.Text\n date_start BigInt? @db.UnsignedBigInt\n date_end BigInt? @db.UnsignedBigInt\n date_orig BigInt?\n visible_until BigInt?\n actif Int @default(0) @db.TinyInt\n}\n\nmodel stbs {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n mac String @unique(map: \"mac\") @db.VarChar(32)\n sn String @db.VarChar(32)\n targo String? @db.VarChar(16)\n}\n\nmodel tech_dispo {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date BigInt @unique(map: \"date\") @db.UnsignedBigInt\n tech Int? @db.UnsignedInt\n}\n\nenum phone_addr_enhanced_capable {\n Y\n N\n}\n\n/// ************** DEPRECATED ********************************************\nmodel debug {\n id BigInt @id @default(autoincrement())\n autor String? @db.VarChar(32)\n url String? @db.VarChar(128)\n date_last BigInt?\n desc String? @db.MediumText\n note4autor String? @db.MediumText\n note4dev String? @db.MediumText\n status String? @db.VarChar(64)\n}\n\nmodel carte_temps {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n week Int @db.UnsignedTinyInt\n year Int? @db.UnsignedInt\n date BigInt @db.UnsignedBigInt\n staff_id BigInt @db.UnsignedBigInt\n start_am BigInt? @db.UnsignedBigInt\n end_am BigInt? @db.UnsignedBigInt\n start_pm BigInt? @db.UnsignedBigInt\n end_pm BigInt? @db.UnsignedBigInt\n start_night BigInt? @db.UnsignedBigInt\n end_night BigInt? @db.UnsignedBigInt\n relais Float?\n comment String? @db.Text\n note_int String? @db.Text\n conge Int @default(0) @db.UnsignedTinyInt\n appr String? @db.VarChar(8)\n appr_dir String? @db.VarChar(8)\n\n @@index([staff_id], map: \"staff_id\")\n}\n\nmodel carte_temps_periode {\n id Int @id @default(autoincrement()) @db.UnsignedSmallInt\n debut String @db.VarChar(16)\n fin String @db.VarChar(16)\n paid String @db.VarChar(16)\n periode Int @db.UnsignedTinyInt\n annee Int @db.UnsignedSmallInt\n}\n\nmodel banque_heure_staff {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n staff_id Int @db.UnsignedInt\n week Int @db.UnsignedTinyInt\n year Int @db.UnsignedSmallInt\n sunday String? @db.VarChar(16)\n heure Float\n\n @@index([staff_id], map: \"staff_id\")\n}\n\nmodel hour_bank {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id BigInt @db.UnsignedBigInt\n remaining_time Int @default(0)\n expiration_date BigInt @default(0) @db.UnsignedBigInt\n note String? @db.MediumText\n recurrence Int @default(0) @db.UnsignedTinyInt\n reset_value Int @default(0) @db.UnsignedSmallInt\n\n @@index([account_id], map: \"account_id\")\n}\n\nmodel hour_bank_detail {\n id Int @id @default(autoincrement())\n hour_id Int\n staff_id BigInt? @db.UnsignedBigInt\n date_orig BigInt @db.UnsignedBigInt\n used_time Int @default(0) @db.SmallInt\n ticket_id BigInt? @db.UnsignedBigInt\n working_order String? @db.VarChar(16)\n detail String? @db.MediumText\n\n @@index([hour_id], map: \"hour_id\")\n}\n\nmodel test {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n text String @db.Text\n c2 Int @default(1)\n}\n\n//this table is for CSS class only, no other uses\nmodel account_memo_template {\n id Int @id @default(autoincrement())\n name String @db.VarChar(32)\n color String @db.VarChar(6)\n bcolor String @db.VarChar(6)\n border String @default(dbgenerated(\"(000000)\")) @db.VarChar(6)\n}\n\n//not used\nmodel notes {\n id Int @id @default(autoincrement())\n account_id Int @db.UnsignedInt\n notes String @db.MediumText\n}\n\n//NOT USED\nmodel email {\n id Int @id @default(autoincrement())\n account_id BigInt?\n email String? @db.VarChar(128)\n password String? @db.VarChar(128)\n}\n\n//not relevant to ticket module\nmodel client_pwd {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n date BigInt @db.UnsignedBigInt\n uid String @db.VarChar(32)\n used Boolean @default(false)\n}\n\n//NO USES FOR TICKETING PURPOSES\nmodel account_profile {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n profile_id String @db.VarChar(64)\n address_id String @db.VarChar(64)\n card_id String @db.VarChar(64)\n token String @db.VarChar(32)\n initial_transaction String @db.VarChar(128)\n}\n\n//not relevant to ticket module\nmodel deposit_slip {\n id Int @id @default(autoincrement())\n customer_id String? @db.VarChar(32)\n name String? @db.VarChar(512)\n amount Float @default(0)\n type String @db.VarChar(32)\n desc String? @db.VarChar(255)\n date BigInt? @db.UnsignedBigInt\n}\n\n//this table display suspended account\nmodel account_suspension {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @unique(map: \"account_id\") @db.UnsignedInt\n date_start BigInt @db.UnsignedBigInt\n date_end BigInt @db.UnsignedBigInt\n note String @db.VarChar(128)\n}\n", + "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"generated/prisma/client/mariadb\"\n}\n\ndatasource db {\n provider = \"mysql\"\n}\n\nmodel account {\n id BigInt @id @default(autoincrement())\n customer_id String? @db.VarChar(32) //variable string, composition varies a lot, used by customers to identify their account\n date_orig BigInt? //timestamp\n date_last BigInt? //timestamp\n date_expire BigInt? //not used\n language_id String @default(dbgenerated(\"(francais)\")) @db.VarChar(32) //either \"anglais\", \"francais\"\n country_id Int @default(124) //124 (canada), 450 (Madagascar) or 840 (Virgin island)\n currency_id Int? //not used\n username String? @db.VarChar(128)\n password String? @db.VarChar(128)\n group_id Int @default(6) @db.TinyInt //refers to the account_group table\n misc String? @db.VarChar(128) //comments of some sort\n status Int? //1-actif, 2-suspension,3- non paiement, 4- terminé, 5- recouvre, 6-creance\n first_name String? @db.VarChar(128)\n middle_name String? @db.VarChar(128) //not used\n last_name String? @db.VarChar(128)\n mandataire String? @db.VarChar(128) //sometimes the first_name and last_name are found here, sometimes its the name of someone who manage the account\n title String? @db.VarChar(128) //Mme, Mrs, Mr., M., \"\"\n email String? @db.VarChar(255)\n email_autre String? @db.VarChar(255) //second email\n company String? @db.VarChar(255) //name of the company account\n contact String @db.Text //name of the contact at the company or account contact\n address1 String? @db.VarChar(128)\n address2 String? @db.VarChar(128) //sometimes used to specify the unit, the suit, the camping lot or used as a note???\n city String? @db.VarChar(128)\n state String? @db.VarChar(32)\n zip String? @db.VarChar(16)\n tel_home String? @db.VarChar(16)\n tel_office String? @db.VarChar(16)\n tel_office_ext String? @db.VarChar(4)\n cell String? @db.VarChar(16)\n fax String? @db.VarChar(16)\n invoice_delivery Int @default(2) //1-email, 2-poste, 3-default\n land_owner Boolean @default(false) //tinyInt boolean\n frais Boolean @default(false) //tinyInt boolean\n ppa Boolean @default(false)\n ppa_all_invoice Int @default(0) @db.TinyInt\n ppa_name String? @db.VarChar(64)\n ppa_code String? @db.VarChar(255)\n ppa_branch String? @db.VarChar(255)\n ppa_account String? @db.VarChar(255)\n ppa_amount Decimal @default(0.00) @db.Decimal(6, 2)\n ppa_amount_buffer Float @default(30.00)\n ppa_all_tmp Int @default(0) @db.TinyInt\n ppa_fixed Boolean @default(false)\n commercial Boolean @default(false)\n vip Boolean @default(false)\n tax_group Int @default(1) @db.TinyInt\n data_check Boolean @default(false)\n created_by Int?\n notes_client String? @db.VarChar(256) //comments left by customer via the \"portail\"\n keyword String? @db.VarChar(512)\n terminate_reason String? @db.VarChar(32) //install,demenage, cie, autre, NULL\n terminate_cie String? @db.VarChar(32) // null, bell, autre, videotron, cogeco, deery, explirnet, sftl, haut-richelieu\n terminate_note String? @db.MediumText // comment on the termination of the account\n terminate_date String? @db.VarChar(16)\n call Boolean @default(false) //tinyInt boolean\n pub Boolean @default(true) //TinyInt boolean\n portal_client_log Boolean @default(false) //TinyInt boolean\n mauvais_payeur Boolean @default(false) //TinyInt boolean\n renew_phone Boolean @default(false) //TinyInt boolean\n ppa_cc Int @default(0) @db.TinyInt\n stripe_id String? @db.VarChar(32)\n\n @@index([customer_id], map: \"customer_id\")\n @@index([id, status], map: \"id\")\n @@index([status], map: \"status\")\n}\n\nmodel account_group {\n id Int @id @default(autoincrement()) @db.TinyInt //see group_id in account table for references\n date_orig BigInt?\n group_name String? @db.VarChar(64) //group name\n}\n\n// this table could be ignored ? see comment on memo column\nmodel account_memo {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n last_updated BigInt @default(0) @db.UnsignedBigInt\n staff_id BigInt?\n account_id BigInt?\n memo String? @db.VarChar(1024) //comment, seems to be a copy paste of a form, giving a bunch of infos on the account, should be queried instead of copied\n color String @default(dbgenerated(\"(000000)\")) @db.VarChar(6) //CSS\n bcolor String @default(dbgenerated(\"(E0E0E0)\")) @db.VarChar(6) //CSS\n border String @default(dbgenerated(\"(000000)\")) @db.VarChar(6) //CSS\n\n @@index([account_id], map: \"account_id\")\n @@index([staff_id], map: \"staff_id\")\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel compta_comptes {\n id BigInt @id @default(autoincrement())\n category String? @db.VarChar(64)\n num_compte String? @db.VarChar(16)\n desc String? @db.MediumText\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel compta_comptes_soldes {\n id BigInt @id @default(autoincrement())\n num_compte Int\n year Int\n amount Float @db.Float\n comment String @db.VarChar(64)\n type String @db.VarChar(3)\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel compta_journal_ecriture {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n type String? @db.VarChar(4)\n num BigInt?\n customer_id String? @db.VarChar(32)\n full_name String? @db.VarChar(256)\n desc String? @db.MediumText\n mo String? @db.VarChar(4)\n em Int @default(0) @db.TinyInt\n\n @@index([customer_id], map: \"customer_id\")\n @@index([date_orig], map: \"date_orig\")\n @@index([num], map: \"num\")\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel compta_journal_ecriture_bk {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n type String? @db.VarChar(4)\n num BigInt?\n customer_id String? @db.VarChar(32)\n full_name String? @db.VarChar(256)\n desc String? @db.MediumText\n mo String? @db.VarChar(4)\n em Int @default(0) @db.TinyInt\n\n @@index([customer_id], map: \"customer_id\")\n @@index([date_orig], map: \"date_orig\")\n @@index([num], map: \"num\")\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel compta_journal_ecriture_detail {\n id BigInt @id @default(autoincrement())\n journal_id BigInt?\n num_compte BigInt?\n amount Float?\n action String? @db.VarChar(16)\n\n @@index([journal_id], map: \"journal_id\")\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel compta_journal_ecriture_detail_bk {\n id BigInt @id @default(autoincrement())\n journal_id BigInt?\n num_compte BigInt?\n amount Float?\n action String? @db.VarChar(16)\n\n @@index([journal_id], map: \"journal_id\")\n}\n\nmodel compta_periode {\n month Int @id @default(7)\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel compta_ppa_file_id {\n last_id Int @id @default(1)\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel compta_setup {\n setup_id Int @id @default(1)\n period_month Int @default(7)\n ppa_id Int @default(1)\n excedent_max Float @default(0)\n month_closed BigInt?\n pay_week_closed Int @db.UnsignedTinyInt\n attachment_ext String @db.MediumText\n netadmin_dispo Int @default(0) @db.UnsignedInt\n imap_token String? @db.Text\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel credit_code {\n id Int @id @default(autoincrement())\n code String @db.VarChar(16)\n desc String @db.VarChar(256)\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel tax {\n id Int @id @default(autoincrement())\n name String? @db.VarChar(128)\n description String? @db.VarChar(255)\n rate Float?\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel tax_group {\n id Int @id @default(autoincrement())\n name String? @db.VarChar(128)\n description String? @db.VarChar(255)\n tax String? @db.VarChar(128)\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel td_payable {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n ticket_id Int @default(0) @db.UnsignedInt\n invoice String @default(dbgenerated(\"()\")) @db.VarChar(32)\n date_invoice String @db.VarChar(20)\n fournisseur String? @default(dbgenerated(\"()\")) @db.VarChar(128)\n montant Decimal @default(0.00) @db.Decimal(15, 2)\n devise String @default(dbgenerated(\"(ca)\")) @db.VarChar(2)\n methode String? @default(dbgenerated(\"()\")) @db.VarChar(64)\n reference String? @default(dbgenerated(\"()\")) @db.VarChar(128)\n date_paiement String? @default(dbgenerated(\"()\")) @db.VarChar(20)\n releve String? @db.VarChar(128)\n\n @@index([ticket_id], map: \"ticket_id\")\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel conso {\n id BigInt @id @default(autoincrement())\n ip_id String? @db.VarChar(16)\n date BigInt?\n total BigInt? @default(0)\n total_day BigInt? @default(0)\n total_night BigInt? @default(0)\n\n @@index([ip_id], map: \"ip_id\")\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel conso_archive {\n id BigInt @id @default(autoincrement())\n ip_id String? @db.VarChar(16)\n date BigInt?\n total BigInt? @default(0)\n total_day BigInt? @default(0)\n total_night BigInt? @default(0)\n\n @@index([ip_id], map: \"ip_id\")\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel conso_avis {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date BigInt\n account_id Int @db.UnsignedInt\n delivery_id Int @default(0) @db.UnsignedInt\n service_id Int @default(0) @db.UnsignedInt\n ip_id Int\n avis String @db.VarChar(32)\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel conso_radius {\n id BigInt @id @default(autoincrement()) @db.UnsignedBigInt\n username String @db.VarChar(32)\n date String @db.VarChar(32)\n download String @db.Text\n upload String @db.Text\n nb_sess Int @default(0) @db.UnsignedInt\n\n @@index([date], map: \"date\")\n @@index([username], map: \"username\")\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel conso_radius_daily {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n username String @db.VarChar(32)\n date String @db.VarChar(32)\n download_nuit String @db.Text\n upload_nuit String @db.Text\n download_jour String @db.Text\n upload_jour String @db.Text\n\n @@index([date], map: \"date\")\n @@index([username], map: \"username\")\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel conso_radius_daily2 {\n id BigInt @id @default(autoincrement()) @db.UnsignedBigInt\n username String @db.VarChar(32)\n date String @db.VarChar(32)\n download_nuit String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n upload_nuit String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n download_jour String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n upload_jour String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n\n @@index([date], map: \"date\")\n @@index([username], map: \"username\")\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel conso_radius_hourly {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n username String @db.VarChar(32)\n date String @db.VarChar(32)\n download String @db.Text\n upload String @db.Text\n\n @@index([date], map: \"date\")\n @@index([username], map: \"username\")\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel conso_radius_monthly {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date String @db.VarChar(32)\n username String @db.VarChar(32)\n nuit String @db.Text\n jour String @db.Text\n\n @@index([date], map: \"date\")\n @@index([username], map: \"username\")\n}\n\n//NOT USED BY THE TICKET MODULE *********************\nmodel conso_radius_monthly2 {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date String @db.VarChar(32)\n username String @db.VarChar(32)\n nuit String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n jour String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n\n @@index([date], map: \"date\")\n @@index([username], map: \"username\")\n}\n\nmodel delivery {\n id BigInt @id @default(autoincrement())\n account_id BigInt?\n name String @db.VarChar(32)\n comment String @db.VarChar(512)\n date_orig BigInt?\n address1 String? @db.VarChar(128)\n address2 String? @db.VarChar(128)\n city String? @db.VarChar(32)\n state String? @db.VarChar(32)\n zip String? @db.VarChar(16)\n longitude Decimal @db.Decimal(12, 7)\n latitude Decimal @db.Decimal(12, 7)\n tel_home String? @db.VarChar(16)\n tel_office String? @db.VarChar(16)\n tel_office_ext String? @db.VarChar(4)\n cell String? @db.VarChar(12)\n fax String? @db.VarChar(12)\n email String? @db.VarChar(255)\n quota_max_day BigInt @default(0) @db.UnsignedBigInt\n quota_max_night BigInt @default(0) @db.UnsignedBigInt\n contact String? @db.VarChar(128)\n expanded Int? @default(0) @db.TinyInt\n placemarks_id BigInt? @db.UnsignedBigInt\n epg_subid Int @default(0) @db.UnsignedInt\n\n @@index([account_id], map: \"account_id\")\n @@index([placemarks_id], map: \"placemarks_id\")\n}\n\nmodel delivery_history {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n date_orig BigInt @db.UnsignedBigInt\n address1 String @db.VarChar(128)\n address2 String @db.VarChar(128)\n city String @db.VarChar(128)\n state String @db.VarChar(32)\n zip String @db.VarChar(8)\n\n @@index([account_id], map: \"account_id\")\n}\n\nmodel device {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n category String @db.VarChar(64)\n name String @db.VarChar(128)\n manufacturier String? @db.VarChar(128)\n model String? @db.VarChar(128)\n sn String? @db.VarChar(128)\n mac String? @db.VarChar(32)\n manage String @db.VarChar(256)\n port String @default(dbgenerated(\"()\")) @db.VarChar(5)\n protocol String @default(dbgenerated(\"(https)\")) @db.VarChar(8)\n manage_cli String @db.VarChar(256)\n port_cli String @default(dbgenerated(\"()\")) @db.VarChar(5)\n protocol_cli String @db.VarChar(8)\n user String @db.VarChar(64)\n pass String @db.VarChar(128)\n parent Int @default(0) @db.UnsignedInt\n\n @@index([delivery_id], map: \"delivery_id\")\n @@index([sn], map: \"sn\")\n}\n\nmodel device_archive {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n category String @db.VarChar(64)\n name String @db.VarChar(128)\n manufacturier String? @db.VarChar(128)\n model String? @db.VarChar(128)\n sn String? @db.VarChar(128)\n mac String? @db.VarChar(32)\n manage String @db.VarChar(256)\n port String @default(dbgenerated(\"()\")) @db.VarChar(5)\n protocol String @default(dbgenerated(\"(https)\")) @db.VarChar(8)\n manage_cli String @db.VarChar(256)\n port_cli String @default(dbgenerated(\"()\")) @db.VarChar(5)\n protocol_cli String @db.VarChar(8)\n user String @db.VarChar(64)\n pass String @db.VarChar(128)\n parent Int @default(0) @db.UnsignedInt\n\n @@index([delivery_id], map: \"delivery_id\")\n @@index([sn], map: \"sn\")\n}\n\nmodel device_attr {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n device_id Int @db.UnsignedInt\n attr String @db.VarChar(128)\n value String @db.VarChar(128)\n\n @@index([device_id], map: \"device_id\")\n}\n\nmodel device_link {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n parent Int @db.UnsignedInt\n child Int @db.UnsignedInt\n}\n\nmodel device_template {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n nom String @db.VarChar(128)\n}\n\nmodel device_template_attr {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n template_id Int @db.UnsignedInt\n attr String @db.VarChar(128)\n default_val String @db.VarChar(128)\n}\n\nmodel product {\n id Int @id @default(autoincrement())\n date_orig BigInt?\n sku String? @db.VarChar(32)\n active Int? @db.TinyInt\n price Float?\n price_recurr_type Int? @db.TinyInt\n price_recurr_weekday Int?\n price_recurr_week Int?\n price_recurr_schedule Int? @db.TinyInt\n download_speed BigInt?\n upload_speed BigInt?\n night_package Int @default(0) @db.TinyInt\n quota_day BigInt? @db.UnsignedBigInt\n quota_night BigInt? @db.UnsignedBigInt\n category Int? @db.TinyInt\n uniq_charge Int @default(0) @db.TinyInt\n commercial Boolean @default(false)\n portal_hidden Boolean @default(false)\n inv_keep Boolean @default(false)\n inv_tag String? @db.VarChar(255)\n inv_threshold Int @default(0) @db.UnsignedInt\n inv_qte Int @default(0) @db.UnsignedInt\n emplacement String @default(dbgenerated(\"()\")) @db.VarChar(16)\n list_tech Int @default(0) @db.UnsignedTinyInt\n type Int @default(0) @db.UnsignedTinyInt\n combo_ready Int @default(0) @db.UnsignedTinyInt\n fibre_lineprofile String? @db.VarChar(8)\n fibre_serviceprofile String? @db.VarChar(8)\n\n @@index([sku], map: \"sku\")\n}\n\nmodel product_cat {\n id Int @id @default(autoincrement())\n name String? @db.VarChar(255)\n notes String? @db.VarChar(255)\n status Int? @db.TinyInt\n num_compte BigInt?\n combo_dispo Int @default(0) @db.UnsignedTinyInt\n}\n\nmodel product_format {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n name String? @db.VarChar(255)\n type Int? @db.TinyInt\n product_idx String? @db.MediumText\n description String? @db.MediumText\n}\n\nmodel product_fournisseur {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n product_id Int @db.UnsignedInt\n nom_fournisseur String @db.VarChar(255)\n prix_us Boolean @default(false)\n prix_achat Float @default(0.00)\n prix_livr String @default(dbgenerated(\"()\")) @db.VarChar(16)\n delais_livr String @default(dbgenerated(\"()\")) @db.VarChar(128)\n comment String @default(dbgenerated(\"()\")) @db.VarChar(128)\n\n @@index([product_id], map: \"product_id\")\n}\n\nmodel product_profile {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n product_id Int @db.UnsignedInt\n device_type String @db.VarChar(64)\n line_profile Int @db.UnsignedInt\n service_profile Int @db.UnsignedInt\n}\n\nmodel product_speciaux {\n id BigInt @id @default(autoincrement())\n product_zone_id BigInt\n product_id BigInt\n price Float?\n price_install Float?\n exp_timestamp BigInt?\n duree_contrat Int? @db.UnsignedTinyInt\n\n @@index([product_zone_id], map: \"product_zone_id\")\n}\n\nmodel product_translate {\n id Int @id @default(autoincrement())\n product_id Int?\n language_id String? @db.VarChar(16)\n name String? @db.VarChar(512)\n description_short String? @db.LongText\n description_full String? @db.LongText\n\n @@index([language_id], map: \"language_id\")\n @@index([product_id], map: \"product_id\")\n}\n\nmodel product_zone {\n id BigInt @id @default(autoincrement())\n zoneNumber Int @db.UnsignedInt\n description String? @db.VarChar(255)\n\n @@index([zoneNumber], map: \"zoneNumber\")\n}\n\nmodel product_zone_placemarks {\n id BigInt @id @default(autoincrement())\n product_zone_id BigInt @db.UnsignedBigInt\n placemarks_id BigInt @db.UnsignedBigInt\n\n @@index([placemarks_id], map: \"placemarks_id\")\n}\n\nmodel inventaire_log {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n prod_tag String @db.VarChar(255)\n staff_id Int @db.UnsignedInt\n action String @db.VarChar(1)\n qte Int @db.UnsignedInt\n timestamp String @db.VarChar(10)\n\n @@index([prod_tag], map: \"prod_tag\")\n}\n\nmodel phone {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n service_id Int @db.UnsignedInt\n phone_num String @db.VarChar(16)\n note String? @db.Text\n fournisseur String? @db.VarChar(64)\n}\n\nmodel phone_addr {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n phone String @db.VarChar(16)\n street_number String @db.VarChar(10)\n apt String @db.VarChar(30)\n street_name String @db.VarChar(84)\n city String @db.VarChar(38)\n state String @db.VarChar(2)\n zip String @db.VarChar(10)\n first_name String @db.VarChar(38)\n last_name String @db.VarChar(100)\n info String @db.VarChar(100)\n enhanced_capable phone_addr_enhanced_capable @default(dbgenerated(\"(Y)\"))\n code_cauca String? @db.VarChar(3)\n class_service String @default(dbgenerated(\"(RES)\")) @db.VarChar(3)\n}\n\nmodel phone_comwave {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id BigInt?\n service_id BigInt?\n requestId Int @unique(map: \"requestId\") @db.UnsignedInt\n phoneNumber String @db.VarChar(10)\n status String @default(dbgenerated(\"(P)\")) @db.VarChar(1)\n date String? @db.VarChar(10)\n reason String? @db.Text\n}\n\nmodel phone_note {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n phone String @unique(map: \"phone\") @db.VarChar(11)\n rate_center String? @db.VarChar(128)\n fournisseur String @default(dbgenerated(\"(comwave)\")) @db.VarChar(64)\n note String? @db.Text\n}\n\nmodel phone_provisioning {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n service_id Int @db.UnsignedInt\n phone String @db.VarChar(10)\n app String @db.VarChar(16)\n mac String @db.VarChar(16)\n password String @db.VarChar(32)\n internationnal String? @db.VarChar(6)\n date_orig BigInt @db.UnsignedBigInt\n date_update BigInt @db.UnsignedBigInt\n}\n\nmodel phonecall_channel {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n timestamp BigInt @unique(map: \"timestamp\") @db.UnsignedBigInt\n max_tinktell Int @default(0) @db.UnsignedTinyInt\n max_outgoing_thinktell Int @default(0) @db.UnsignedTinyInt\n max_comwave Int @default(0) @db.UnsignedTinyInt\n max_outgoing_comwave Int @default(0) @db.UnsignedTinyInt\n max_total Int @default(0) @db.UnsignedTinyInt\n}\n\nmodel phonecall_log_2025 {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n caller_id_name String @db.VarChar(64)\n caller_id_number String @db.VarChar(32)\n destination_number String @db.VarChar(32)\n start_stamp DateTime @db.DateTime(0)\n answer_stamp DateTime @db.DateTime(0)\n end_stamp DateTime @db.DateTime(0)\n duration Int\n billing Decimal @default(0.00000) @db.Decimal(15, 5)\n hangup_cause String @db.VarChar(32)\n uuid String @unique(map: \"uuid\") @db.VarChar(64)\n}\n\nmodel phonecall_log_2026 {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n caller_id_name String @db.VarChar(64)\n caller_id_number String @db.VarChar(32)\n destination_number String @db.VarChar(32)\n start_stamp DateTime @db.DateTime(0)\n answer_stamp DateTime @db.DateTime(0)\n end_stamp DateTime @db.DateTime(0)\n duration Int\n billing Decimal @default(0.00000) @db.Decimal(15, 5)\n hangup_cause String @db.VarChar(32)\n uuid String @unique(map: \"uuid\") @db.VarChar(64)\n}\n\nmodel voicemeup {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n date BigInt @db.UnsignedBigInt\n duration Int @db.UnsignedInt\n destination String @db.VarChar(16)\n country String @db.VarChar(256)\n state String? @db.VarChar(128)\n district String? @db.VarChar(128)\n amount Float\n uuid String? @db.VarChar(64)\n}\n\n/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.\nmodel babytel {\n date_time BigInt?\n record_type String? @db.VarChar(20)\n record_format_version Int?\n id String? @db.VarChar(24)\n rate_id String? @db.VarChar(20)\n cost Float? @db.Float\n calling_user String? @db.VarChar(24)\n called_user String? @db.VarChar(24)\n calling_domain String? @db.VarChar(24)\n called_domain String? @db.VarChar(24)\n destination String? @db.VarChar(24)\n duration_seconds String? @db.VarChar(24)\n call_start String? @db.VarChar(24)\n call_type String? @db.VarChar(24)\n call_direction String? @db.VarChar(24)\n test_call String? @db.VarChar(24)\n calling_number String? @db.VarChar(24)\n called_number_e164 String? @db.VarChar(24)\n billable_duration String? @db.VarChar(24)\n billed_duration_outbound_seconds String? @db.VarChar(24)\n reseller_cost Float? @db.Float\n master_account_id String? @db.VarChar(24)\n forwarded_to String? @db.VarChar(24)\n master_account_pk String? @db.VarChar(24)\n account_pk String? @db.VarChar(24)\n reseller_rate_id String? @db.VarChar(24)\n internal_information1 String? @db.VarChar(24)\n concurrents_calls String? @db.VarChar(24)\n external_id String? @db.VarChar(24)\n commission Float? @db.Float\n minute_plan_id String? @db.VarChar(24)\n internal_information2 String? @db.VarChar(24)\n internal_information3 String? @db.VarChar(24)\n billed_duration_inbound_seconds String? @db.VarChar(24)\n selected_destination String? @db.VarChar(24)\n internal_information4 String? @db.VarChar(24)\n internal_information5 String? @db.VarChar(24)\n cost_center String? @db.VarChar(24)\n subscriber_group String? @db.VarChar(24)\n\n @@ignore\n}\n\n/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments\nmodel pbx {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n service_id Int @db.UnsignedInt\n phone String @db.VarChar(10)\n name String? @db.VarChar(32)\n password String @db.VarChar(8)\n vm_password String @default(dbgenerated(\"(1234)\")) @db.VarChar(16)\n has_vm Int @default(1) @db.TinyInt\n vm_email String? @db.VarChar(64)\n keep_msg Int @default(0) @db.TinyInt\n vm_disk_quota Int @default(180) @db.UnsignedInt\n int_code String @db.VarChar(4)\n language String @default(dbgenerated(\"(fr)\")) @db.VarChar(2)\n call_911 String @db.VarChar(11)\n max_calls Int @default(2) @db.UnsignedTinyInt\n call_timeout Int @default(30) @db.UnsignedSmallInt\n user_context String @default(dbgenerated(\"(sip.targo.ca)\")) @db.VarChar(32)\n country_whitelist String @db.Text\n date_origin BigInt @db.UnsignedBigInt\n date_update BigInt @db.UnsignedBigInt\n update_by Int? @db.UnsignedInt\n\n @@index([phone], map: \"phone\")\n}\n\nmodel pbx_app {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n pbx_id Int @db.UnsignedInt\n username String @db.VarChar(16)\n mac String @db.VarChar(16)\n app String @default(dbgenerated(\"(ht502)\")) @db.VarChar(16)\n note String @db.Text\n date_origin BigInt @db.UnsignedBigInt\n date_update BigInt @db.UnsignedBigInt\n update_by Int? @db.UnsignedInt\n\n @@index([pbx_id], map: \"pbx_id\")\n}\n\nmodel pbx_com {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n service_id Int @db.UnsignedInt\n phone String @db.VarChar(10)\n name String @db.VarChar(32)\n failover String @db.VarChar(16)\n auth_method String @default(dbgenerated(\"(password)\")) @db.VarChar(8)\n password String @db.VarChar(8)\n ip String @db.VarChar(16)\n int_code String @db.VarChar(4)\n country_whitelist String @db.Text\n language String @db.VarChar(2)\n call_911 String @db.VarChar(16)\n max_calls Int @db.UnsignedTinyInt\n user_context String @db.VarChar(32)\n date_origin String @db.VarChar(16)\n date_update String @db.VarChar(16)\n update_by Int @db.UnsignedInt\n}\n\nmodel pbx_com_wl {\n id Int @id @default(autoincrement())\n phone String @unique(map: \"phone\") @db.VarChar(10)\n country_whitelist String @db.Text\n}\n\nmodel pbx_fax {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n number String @db.VarChar(10)\n email String @db.VarChar(128)\n description String? @db.VarChar(128)\n service_id Int @default(0) @db.UnsignedInt\n\n @@index([number], map: \"number\")\n}\n\nmodel payment {\n id BigInt @id @default(autoincrement())\n account_id BigInt?\n date_orig BigInt?\n amount Float?\n applied_amt Float?\n type String? @db.VarChar(25)\n memo String? @db.VarChar(512)\n reference String? @db.VarChar(128)\n excedent Int @default(0) @db.TinyInt\n correction Int @default(0) @db.TinyInt\n cr Int @default(0) @db.TinyInt\n uniqsess String? @db.VarChar(32)\n\n @@index([account_id], map: \"account_id\")\n @@index([date_orig], map: \"date_orig\")\n}\n\nmodel payment_item {\n id BigInt @id @default(autoincrement())\n payment_id BigInt?\n invoice_id BigInt?\n amount Float?\n date_orig BigInt?\n\n @@index([invoice_id], map: \"invoice_id\")\n @@index([payment_id], map: \"payment_id\")\n}\n\nmodel passwords_manager {\n id BigInt @id @default(autoincrement())\n title String @db.VarChar(64)\n login String @db.VarChar(255)\n pass String @db.Text\n url String? @db.VarChar(255)\n email String? @db.VarChar(128)\n phone String? @db.VarChar(32)\n category String? @db.VarChar(32)\n subcategory String? @db.VarChar(32)\n desc String? @db.MediumText\n notes String? @db.MediumText\n logs String? @db.MediumText\n date_orig BigInt\n date_last BigInt\n users_granted String? @db.MediumText\n group_granted String? @db.Text\n created_by BigInt\n keywords String? @db.MediumText\n}\n\nmodel passwords_manager_cat {\n id Int @id @default(autoincrement()) @db.TinyInt\n title String @db.VarChar(32)\n desc String? @db.VarChar(255)\n}\n\nmodel passwords_manager_group {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String @db.VarChar(32)\n users String? @db.Text\n}\n\nmodel notification {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n staff_id Int\n endpoint String @db.Text\n authToken String @db.Text\n publicKey String @db.Text\n contentEncoding String @default(dbgenerated(\"(aesgcm)\")) @db.VarChar(128)\n plateforme String? @db.VarChar(128)\n\n @@index([staff_id], map: \"staff_id\")\n}\n\nmodel notification_payload {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n notification_id Int @db.UnsignedInt\n payload String @db.Text\n timestamp DateTime @default(now()) @db.Timestamp(0)\n}\n\n/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.\nmodel country {\n id Int? @unique(map: \"IDS\")\n name_en String? @db.VarChar(128)\n name_fr String? @db.VarChar(128)\n description String? @db.VarChar(128)\n notes String? @db.VarChar(128)\n two_code String? @db.VarChar(16)\n three_code String? @db.VarChar(16)\n\n @@ignore\n}\n\nmodel municipalite {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n nom String @db.VarChar(64)\n code String @db.VarChar(4)\n administration String @db.VarChar(64)\n often_used Boolean @default(false)\n}\n\nmodel sommaire_porte {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n fibre_id Int @default(0) @db.UnsignedInt\n id_adresse String @db.VarChar(48)\n id_subvention String @db.VarChar(32)\n adresse_subvention String @db.VarChar(128)\n ville_subvention String @db.VarChar(128)\n latitude String @db.VarChar(32)\n longitude String @db.VarChar(32)\n contest_adresse Int @default(0) @db.UnsignedTinyInt\n new_adresse Int @default(0) @db.UnsignedTinyInt\n placemarks_id BigInt @db.UnsignedBigInt\n}\n\nmodel state {\n id Int @id @default(autoincrement()) @db.UnsignedTinyInt\n name_en String @db.VarChar(64)\n name_fr String @db.VarChar(64)\n abbrev String @db.VarChar(2)\n country String @db.VarChar(8)\n}\n\nmodel licence {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n nom String @db.VarChar(128)\n date String @db.VarChar(10)\n can_manage String @db.VarChar(64)\n comment String? @db.Text\n}\n\nmodel licence_key {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n licence_id Int @db.UnsignedInt\n licence_key String @db.Text\n date String @db.VarChar(10)\n date_expire String? @db.VarChar(10)\n comment String @db.Text\n\n @@index([licence_id], map: \"licence_id\")\n}\n\nmodel ip {\n id Int @id @default(autoincrement())\n service_id BigInt?\n ip String? @db.VarChar(32)\n prive String? @db.VarChar(32)\n ip_relais String? @db.VarChar(128)\n technology String? @db.VarChar(32)\n name_access_point String? @db.VarChar(64)\n mac String? @db.VarChar(32)\n web_link String? @db.VarChar(128)\n link_relais String? @db.VarChar(128)\n ip_conso Int @default(0) @db.TinyInt\n actif Int @default(1) @db.TinyInt\n comment String? @db.MediumText\n cidr String? @db.VarChar(32)\n last_updated DateTime @default(now()) @db.DateTime(0)\n\n @@index([ip], map: \"ip\")\n @@index([prive], map: \"prive\")\n @@index([service_id], map: \"service_id\")\n}\n\nmodel ip_admin {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n ip String @db.VarChar(20)\n comment String? @db.VarChar(128)\n}\n\nmodel ip_history {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n service_id Int @db.UnsignedInt\n ip String @db.VarChar(32)\n date BigInt @db.UnsignedBigInt\n}\n\nmodel ip_pp {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n ip_prive String @db.VarChar(32)\n ip_public String @db.VarChar(32)\n date BigInt @db.UnsignedBigInt\n ip_id String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n}\n\nmodel ip_static {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n ip String @unique(map: \"ip\") @db.VarChar(32)\n static Boolean @default(false)\n reverse String? @db.VarChar(128)\n}\n\nmodel ip_targo {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n ip String @db.VarChar(15)\n cidr Int @db.UnsignedTinyInt\n comment String? @db.VarChar(128)\n}\n\n/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments\nmodel invoice {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n process_status Int? @db.TinyInt\n billing_status Int? @db.TinyInt\n refund_status Int? @db.TinyInt\n print_status Int? @db.TinyInt\n account_id BigInt?\n total_amt Float?\n billed_amt Float?\n due_date BigInt?\n notes String? @db.MediumText\n template_message String? @db.MediumText\n email_status Int? @db.TinyInt\n working_order String? @db.VarChar(64)\n correction Int @default(0) @db.TinyInt\n ppa_charge Int @default(0) @db.TinyInt\n credit_code_id Int @default(0) @db.TinyInt\n\n @@index([account_id], map: \"account_id\")\n @@index([billing_status], map: \"billing_status\")\n @@index([date_orig], map: \"date_orig\")\n @@index([refund_status], map: \"refund_status\")\n}\n\n/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments\nmodel invoice_bk {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n process_status Int? @db.TinyInt\n billing_status Int? @db.TinyInt\n refund_status Int? @db.TinyInt\n print_status Int? @db.TinyInt\n account_id BigInt?\n total_amt Float?\n billed_amt Float?\n due_date BigInt?\n notes String? @db.MediumText\n template_message String? @db.MediumText\n email_status Int? @db.TinyInt\n working_order String? @db.VarChar(64)\n correction Int @default(0) @db.TinyInt\n ppa_charge Int @default(0) @db.TinyInt\n credit_code_id Int @default(0) @db.TinyInt\n\n @@index([account_id], map: \"account_id\")\n @@index([billing_status], map: \"billing_status\")\n @@index([date_orig], map: \"date_orig\")\n @@index([refund_status], map: \"refund_status\")\n}\n\nmodel invoice_call {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date BigInt @db.UnsignedBigInt\n number String @db.VarChar(10)\n amount Float\n}\n\nmodel invoice_item {\n id BigInt @id @default(autoincrement())\n service_id BigInt?\n invoice_id BigInt?\n sku String? @db.VarChar(128)\n quantity Float @default(0)\n product_name String? @db.VarChar(512)\n unitary_price Float?\n nosub Boolean @default(false)\n delivery_name String? @db.VarChar(32)\n\n @@index([invoice_id], map: \"invoice_id\")\n}\n\nmodel invoice_item_bk {\n id BigInt @id @default(autoincrement())\n service_id BigInt?\n invoice_id BigInt?\n sku String? @db.VarChar(128)\n quantity Float @default(0)\n product_name String? @db.VarChar(512)\n unitary_price Float?\n nosub Boolean @default(false)\n delivery_name String? @db.VarChar(32)\n\n @@index([invoice_id], map: \"invoice_id\")\n}\n\nmodel invoice_msg_template {\n id BigInt @id @default(autoincrement())\n name String? @db.VarChar(32)\n message String? @db.MediumText\n}\n\nmodel invoice_tax {\n id BigInt @id @default(autoincrement())\n invoice_id BigInt?\n tax_name String? @db.VarChar(128)\n tax_description String? @db.VarChar(128)\n tax_rate Float?\n amount Float?\n\n @@index([invoice_id], map: \"invoice_id\")\n}\n\nmodel invoice_tax_bk {\n id BigInt @id @default(autoincrement())\n invoice_id BigInt?\n tax_name String? @db.VarChar(128)\n tax_description String? @db.VarChar(128)\n tax_rate Float?\n amount Float?\n\n @@index([invoice_id], map: \"invoice_id\")\n}\n\n/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments\nmodel accord_paiement {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n date_accord BigInt\n date_echeance BigInt\n date_coupure BigInt @db.UnsignedBigInt\n raison_changement String? @db.Text\n montant Decimal @db.Decimal(10, 2)\n method Int @default(0) @db.UnsignedTinyInt\n ferie Boolean @default(false)\n note String? @db.Text\n status Int @default(-1) @db.TinyInt\n staff_id Int @default(1) @db.UnsignedInt\n date_create String @db.VarChar(16)\n\n @@index([account_id], map: \"account_id\")\n}\n\nmodel autologin {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n token String @db.VarChar(32)\n date String @db.VarChar(16)\n staff Int @db.UnsignedInt\n}\n\nmodel statement {\n id BigInt @id @default(autoincrement())\n date BigInt?\n type String? @db.VarChar(2)\n number BigInt?\n reference String? @db.MediumText\n amt Float?\n paid_amt Float?\n}\n\nmodel intranet_doc {\n id BigInt @id @default(autoincrement())\n account_id BigInt\n date BigInt\n title String @db.VarChar(128)\n msg String @db.MediumText\n attachment String @db.VarChar(256)\n unread_csv String @db.MediumText\n path_id Int @db.UnsignedInt\n priority_order Int @default(1)\n update_timestamp DateTime @default(now()) @db.Timestamp(0)\n\n @@index([account_id], map: \"account_id\")\n @@index([path_id], map: \"path_id\")\n}\n\nmodel intranet_doc_paths {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n description String @db.VarChar(256)\n parent_id Int? @db.UnsignedInt\n priority_order Int @default(1)\n}\n\nmodel intranet_doc_reply {\n id BigInt @id @default(autoincrement())\n feed_id BigInt\n date BigInt\n account_id BigInt\n msg String @db.MediumText\n attachment BigInt @default(0)\n update_timestamp DateTime @default(now()) @db.Timestamp(0)\n}\n\nmodel intranet_feed {\n id BigInt @id @default(autoincrement())\n account_id BigInt\n date BigInt\n title String @db.VarChar(128)\n msg String @db.MediumText\n attachment String @db.VarChar(256)\n unread_csv String @db.MediumText\n}\n\nmodel intranet_feed_reply {\n id BigInt @id @default(autoincrement())\n feed_id BigInt\n date BigInt\n account_id BigInt\n msg String @db.MediumText\n attachment BigInt\n}\n\nmodel intranet_techniciens {\n id BigInt @id @default(autoincrement())\n account_id BigInt\n date BigInt\n title String @db.VarChar(128)\n msg String @db.MediumText\n attachment String @db.VarChar(256)\n unread_csv String @db.MediumText\n}\n\nmodel intranet_techniciens_reply {\n id BigInt @id @default(autoincrement())\n feed_id BigInt\n date BigInt\n account_id BigInt\n msg String @db.MediumText\n attachment BigInt\n}\n\nmodel intranet_techno {\n id BigInt @id @default(autoincrement())\n account_id BigInt\n date BigInt\n title String @db.VarChar(128)\n msg String @db.MediumText\n attachment String @db.VarChar(256)\n unread_csv String @db.MediumText\n}\n\nmodel intranet_techno_reply {\n id BigInt @id @default(autoincrement())\n feed_id BigInt\n date BigInt\n account_id BigInt\n msg String @db.MediumText\n attachment BigInt\n}\n\nmodel fibre {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n terrain String @db.VarChar(16)\n rue String @db.VarChar(128)\n ville String @db.VarChar(128)\n zip String @default(dbgenerated(\"()\")) @db.VarChar(7)\n ontid Int? @db.UnsignedInt\n sn String? @db.VarChar(32)\n tech Int @default(2) @db.UnsignedSmallInt\n info_connect String @default(dbgenerated(\"(172.17.0.2)\")) @db.VarChar(64)\n frame Int? @db.UnsignedTinyInt\n slot Int? @db.UnsignedTinyInt\n port Int? @db.UnsignedTinyInt\n vlan_manage Int? @db.UnsignedInt\n vlan_internet Int? @db.UnsignedInt\n vlan_telephone Int? @db.UnsignedInt\n vlan_tele Int? @db.UnsignedInt\n manage_service_id Int? @db.UnsignedInt\n internet_service_id Int? @db.UnsignedInt\n telephone_service_id Int? @db.UnsignedInt\n tele_service_id Int? @db.UnsignedInt\n service_id Int? @db.UnsignedInt\n nb_drop Int @default(0) @db.UnsignedInt\n placemarks_id BigInt? @db.UnsignedBigInt\n appartements_id BigInt? @db.UnsignedBigInt\n latitude Float? @db.Float\n longitude Float? @db.Float\n boitier_pas_install Int? @db.UnsignedTinyInt\n description String? @db.VarChar(50)\n suite Int @default(0) @db.UnsignedTinyInt\n distance Int? @db.UnsignedInt\n nb_portees Int? @db.UnsignedTinyInt\n\n @@index([appartements_id, sn], map: \"appartements_id\")\n @@index([info_connect, appartements_id, sn, slot, port], map: \"info_connect\")\n @@index([placemarks_id, sn], map: \"placemarks_id\")\n @@index([service_id], map: \"service_id\")\n}\n\nmodel fibre_olt {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n tech Int @db.UnsignedSmallInt\n ip String @db.VarChar(64)\n description String @db.VarChar(128)\n}\n\nmodel fibre_service_port {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n last_service_id Int @db.UnsignedInt\n}\n\nmodel fibre_suivi {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n customer_id String? @db.VarChar(32)\n first_name String @db.VarChar(64)\n last_name String @db.VarChar(64)\n address String @db.VarChar(128)\n city String @db.VarChar(128)\n zip String @db.VarChar(7)\n phone String @db.VarChar(10)\n email String? @db.VarChar(64)\n longitude Decimal @db.Decimal(12, 7)\n latitude Decimal @db.Decimal(12, 7)\n called Int @default(-1) @db.TinyInt\n create_by Int @default(0) @db.UnsignedInt\n note String @db.Text\n}\n\nmodel fibre_tech {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n description String @db.VarChar(128)\n}\n\nmodel fibre_videotron {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date String @db.VarChar(16)\n download String @default(dbgenerated(\"(0)\")) @db.VarChar(128)\n upload String @default(dbgenerated(\"(0)\")) @db.VarChar(128)\n ethernet String @default(dbgenerated(\"()\")) @db.VarChar(64)\n interface String @default(dbgenerated(\"()\")) @db.VarChar(128)\n}\n\nmodel gantt {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @default(0) @db.UnsignedInt\n name String? @db.VarChar(128)\n gantt String @db.Text\n closed Int @default(0) @db.TinyInt\n}\n\nmodel gantt_template {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String? @db.VarChar(128)\n gantt String @db.Text\n}\n\nmodel project {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String @db.VarChar(128)\n status String @db.VarChar(16)\n desc String? @db.Text\n date_start BigInt? @db.UnsignedBigInt\n date_end BigInt? @db.UnsignedBigInt\n manager_name String? @db.VarChar(64)\n}\n\nmodel project_cmd {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n project_id Int @db.UnsignedInt\n date BigInt @db.UnsignedBigInt\n vendeur String? @db.VarChar(128)\n no_cmd String? @db.VarChar(64)\n po String? @db.VarChar(32)\n staff_id Int @default(4667) @db.UnsignedInt\n\n @@index([project_id], map: \"project_id\")\n}\n\nmodel project_cmd_item {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n cmd_id Int @db.UnsignedInt\n product_id Int @default(0) @db.UnsignedInt\n desc String @db.Text\n qte Float\n price Float\n usd Boolean @default(false)\n recu Int @default(0) @db.TinyInt\n qte_recu Float @default(0)\n date_recu String? @db.VarChar(64)\n comment String? @db.VarChar(128)\n eta String? @db.VarChar(10)\n status Int @default(0) @db.UnsignedTinyInt\n\n @@index([cmd_id], map: \"cmd_id\")\n @@index([product_id], map: \"product_id\")\n}\n\nmodel project_manager_cat {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n pos Int @db.UnsignedTinyInt\n name String @db.VarChar(32)\n color String @default(dbgenerated(\"(ffffff)\")) @db.VarChar(7)\n text_color String @default(dbgenerated(\"(#000000)\")) @db.VarChar(7)\n}\n\nmodel project_manager_checklist {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n task_id Int @db.UnsignedInt\n ticket_id Int @db.UnsignedInt\n desc String @db.VarChar(128)\n poids Int @default(1) @db.UnsignedTinyInt\n done Int @default(0) @db.TinyInt\n\n @@index([task_id], map: \"task_id\")\n}\n\nmodel project_manager_comment {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n task_id Int @db.UnsignedInt\n comment String @db.Text\n staff_id Int @db.UnsignedInt\n date String @db.VarChar(16)\n unread String @db.Text\n\n @@index([task_id], map: \"task_id\")\n}\n\nmodel project_manager_task {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n category_id Int @db.UnsignedInt\n pos Int @db.UnsignedTinyInt\n titre String @db.VarChar(255)\n color String @default(dbgenerated(\"(#ffffff)\")) @db.VarChar(7)\n text_color String @default(dbgenerated(\"(#000000)\")) @db.VarChar(7)\n desc String @db.Text\n ticket_id String? @db.VarChar(16)\n date_start String? @db.VarChar(16)\n date_deadline String? @db.VarChar(16)\n deadline_watch Int @default(1) @db.UnsignedTinyInt\n assign_staff String? @db.Text\n priority Int @default(0) @db.UnsignedTinyInt\n done Boolean @default(false)\n create_by Int @db.UnsignedInt\n date_creation String? @db.VarChar(16)\n date_update String? @db.VarChar(16)\n\n @@index([category_id], map: \"category_id\")\n}\n\nmodel service {\n id BigInt @id @default(autoincrement())\n date_orig BigInt?\n date_suspended BigInt?\n date_next_invoice BigInt?\n date_last_invoice BigInt?\n delivery_id Int?\n device_id Int @default(0) @db.UnsignedInt\n product_id Int?\n comment String? @db.VarChar(255)\n payment_recurrence Int? @db.TinyInt\n status Int? @db.TinyInt\n hijack Int @default(0) @db.TinyInt\n hijack_price Float @default(0)\n hijack_desc String? @db.VarChar(512)\n hijack_download_speed BigInt?\n hijack_upload_speed BigInt?\n hijack_quota_day BigInt?\n hijack_quota_night BigInt?\n date_end_contract BigInt?\n actif_until BigInt?\n forfait_internet Int @default(0) @db.TinyInt\n radius_user String @db.VarChar(24)\n radius_pwd String @db.VarChar(16)\n radius_conso Boolean @default(false)\n\n @@index([date_orig], map: \"date_orig\")\n @@index([delivery_id], map: \"delivery_id\")\n @@index([device_id], map: \"device_id\")\n @@index([id, status], map: \"id\")\n @@index([product_id], map: \"product_id\")\n}\n\nmodel service_snapshot {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date BigInt @db.UnsignedBigInt\n account_id Int @db.UnsignedInt\n service_id Int @db.UnsignedInt\n quota_day BigInt @default(0) @db.UnsignedBigInt\n quota_night BigInt @default(0) @db.UnsignedBigInt\n\n @@index([account_id], map: \"account_id\")\n @@index([service_id], map: \"service_id\")\n}\n\nmodel soumission {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id BigInt\n name String @db.VarChar(64)\n po String? @db.VarChar(64)\n date String @db.VarChar(10)\n tax Int @db.UnsignedTinyInt\n materiel String? @db.LongText\n mensuel String? @db.LongText\n text String? @db.Text\n\n @@index([account_id], map: \"account_id\")\n}\n\nmodel soumission_template {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String @db.VarChar(64)\n materiel String @db.LongText\n mensuel String @db.LongText\n}\n\nmodel staff {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n status Int @db.TinyInt\n username String @unique(map: \"username\") @db.VarChar(32)\n password String @db.VarChar(128)\n vpn String @db.VarChar(64)\n first_name String @db.VarChar(64)\n last_name String @db.VarChar(64)\n email String @db.VarChar(64)\n ext String @db.VarChar(16)\n cell String @db.VarChar(16)\n gpin String? @db.VarChar(4)\n rights String @db.Text\n date_embauche String? @db.VarChar(20)\n fete String? @db.VarChar(16)\n supp String? @db.Text\n group_ad String @default(dbgenerated(\"()\")) @db.VarChar(64)\n dept_list String @db.Text\n notification String @db.Text\n darkmode Boolean @default(false)\n matricule_desjardins Int? @db.UnsignedInt\n compagnie_desjardins String? @db.VarChar(8)\n ldap_id Int?\n}\n\nmodel staff_dispo {\n id Int @id @default(autoincrement()) @db.TinyInt\n day_num Int @db.TinyInt\n staff_id Int?\n}\n\nmodel staff_supp {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n nom String @db.VarChar(64)\n staff_ids String @db.VarChar(128)\n}\n\nmodel tele_carte {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n delivery_id Int @unique(map: \"delivery_id\") @default(0) @db.UnsignedInt\n service_id Int @db.UnsignedInt\n channels String @db.Text\n}\n\nmodel tele_channel {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n proprio String @db.VarChar(128)\n poste String @db.VarChar(128)\n pack_min Int @default(0) @db.UnsignedTinyInt\n pack_redevance Decimal @default(0.00) @db.Decimal(5, 2)\n pack_prix_vendu Decimal @default(0.00) @db.Decimal(5, 2)\n carte_percentage Decimal @db.Decimal(5, 2)\n carte_redevance_min Decimal @db.Decimal(5, 2)\n carte_prix_vendu Decimal @db.Decimal(5, 2)\n monthly_min Decimal @default(0.00) @db.Decimal(5, 2)\n has_penetration_rate Int @default(0) @db.UnsignedTinyInt\n penetration_actuel Decimal @default(0.00) @db.Decimal(3, 2)\n is_commercial Int @default(0) @db.UnsignedTinyInt\n note String @db.Text\n epgId Int @default(0) @db.UnsignedInt\n uptele_no Int @db.UnsignedInt\n uptele_code String @db.VarChar(32)\n abbr String @db.VarChar(32)\n groupe_id Int @default(0) @db.UnsignedInt\n ccsa_packageID Int @db.UnsignedInt\n ccsa_desc String @db.VarChar(256)\n rapport_bell Int @default(0) @db.TinyInt\n}\n\nmodel tele_groupe {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n nom String @db.VarChar(128)\n small_desc String @db.VarChar(128)\n}\n\nmodel tele_network {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n network_name String @db.VarChar(128)\n fournisseur String @db.VarChar(128)\n}\n\nmodel tele_pack {\n id Int @id @default(autoincrement())\n product_id Int @db.UnsignedInt\n channels String @db.Text\n actif Boolean @default(true)\n ccsa_packageID Int @db.UnsignedInt\n ccsa_desc String @db.VarChar(256)\n rapport_bell Int @default(0) @db.TinyInt\n bell_name String? @db.VarChar(64)\n epgId Int? @db.UnsignedInt\n}\n\nmodel tele_penetration {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n id_channel Int @db.UnsignedInt\n percentage Decimal @db.Decimal(3, 2)\n prix Decimal @db.Decimal(10, 5)\n}\n\nmodel tele_sub_archive {\n id Int @id @default(autoincrement())\n date_archive String @db.VarChar(16)\n subs String @db.Text\n}\n\nmodel tele_wiz {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n delivery_id Int @db.UnsignedInt\n ticket_id Int @db.UnsignedInt\n nb_stb Int @db.UnsignedTinyInt\n credit Int @db.UnsignedTinyInt\n fbase Int @db.UnsignedInt\n fthem String @db.Text\n}\n\nmodel tv_mac {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n service_id Int @db.UnsignedInt\n mac String @db.VarChar(12)\n}\n\nmodel ticket {\n id BigInt @id @default(autoincrement()) @db.UnsignedBigInt\n ost_id Int? @db.UnsignedInt\n parent BigInt @default(0)\n account_id BigInt?\n delivery_id BigInt @default(0)\n bon_id Int? @db.UnsignedInt\n subject String? @db.VarChar(256)\n dept_id Int?\n open_by Int @default(1)\n email_from String @db.VarChar(128)\n assign_to Int @default(0)\n status String @default(dbgenerated(\"(open)\")) @db.VarChar(32)\n due_date BigInt @default(0)\n due_time String @default(dbgenerated(\"(day)\")) @db.VarChar(8)\n date_create BigInt?\n last_update BigInt?\n date_closed String @default(dbgenerated(\"()\")) @db.VarChar(16)\n pending_to_open BigInt @default(0) @db.UnsignedBigInt\n waiting_for BigInt? @db.UnsignedBigInt\n lock_name String @db.VarChar(64)\n public Boolean? @default(false)\n priority Int @default(2) @db.TinyInt\n install_success Int @default(0) @db.TinyInt\n wizard String? @db.Text\n wizard_fibre String? @db.VarChar(64)\n important Int @default(0) @db.TinyInt\n followed_by String @db.Text\n participant String @db.Text\n update_timestamp DateTime @default(now()) @db.Timestamp(0)\n closed_by Int @default(0) @db.UnsignedInt\n\n @@index([account_id], map: \"account_id\")\n @@index([assign_to], map: \"assign_to\")\n @@index([dept_id], map: \"dept_id\")\n}\n\nmodel ticket_calendar_lock {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date_lock BigInt @default(0) @db.UnsignedBigInt\n dept_id Int @default(12) @db.UnsignedInt\n nb_install Int @default(0) @db.UnsignedSmallInt\n create_by Int @db.UnsignedInt\n update_by Int @db.UnsignedInt\n last_update DateTime @default(now()) @db.Timestamp(0)\n\n @@unique([date_lock, dept_id], map: \"date_dept\")\n}\n\nmodel ticket_calendar_staff_lock {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date BigInt\n staff_id Int @db.UnsignedInt\n}\n\nmodel ticket_conge {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n name String @db.VarChar(128)\n date BigInt @db.UnsignedBigInt\n desc String @db.VarChar(255)\n ticket_id Int? @db.UnsignedInt\n\n @@index([account_id], map: \"account_id\")\n}\n\nmodel ticket_dept {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n parent Int @default(0)\n name String @unique(map: \"name\") @default(dbgenerated(\"()\")) @db.VarChar(32)\n hasChild Int @default(0) @db.SmallInt\n email String @db.VarChar(64)\n manager_id Int @default(0) @db.UnsignedInt\n member_only Boolean @default(false)\n protected Boolean @default(false)\n default_staff Int @default(0) @db.UnsignedInt\n default_follow String @default(dbgenerated(\"(0)\")) @db.VarChar(64)\n}\n\nmodel ticket_msg {\n id BigInt @id @default(autoincrement()) @db.UnsignedBigInt\n ticket_id BigInt\n staff_id BigInt @default(0)\n msg String? @db.MediumText\n date_orig BigInt?\n unread_csv String @db.MediumText\n public Boolean? @default(false)\n important Int @default(0) @db.TinyInt\n update_timestamp DateTime @default(now()) @db.Timestamp(0)\n\n @@index([staff_id], map: \"staff_id\")\n @@index([ticket_id], map: \"ticket_id\")\n}\n\nmodel ticket_template {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String @db.VarChar(128)\n template String @db.Text\n}\n\n/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.\nmodel tmp {\n id Int @db.UnsignedInt\n prive String @db.VarChar(20)\n public String @db.VarChar(20)\n\n @@ignore\n}\n\nmodel tmp_vpn {\n id Int @id\n username String @db.VarChar(64)\n password String @db.VarChar(64)\n ad_done Boolean @default(false)\n tacacs Boolean @default(false)\n m Int @default(2000) @db.UnsignedInt\n}\n\nmodel bon_travail {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date BigInt? @db.UnsignedBigInt\n account_id Int @db.UnsignedInt\n tech1 Int? @db.UnsignedInt\n heure_arrive_t1 String? @db.VarChar(10)\n heure_depart_t1 String? @db.VarChar(10)\n tech2 Int? @db.UnsignedInt\n heure_arrive_t2 String? @db.VarChar(10)\n heure_depart_t2 String? @db.VarChar(10)\n note String? @db.Text\n subtotal Decimal? @db.Decimal(10, 2)\n tps Decimal? @db.Decimal(10, 2)\n tvq Decimal? @db.Decimal(10, 2)\n total Decimal? @db.Decimal(10, 2)\n}\n\nmodel bon_travail_item {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n bon_id Int @db.UnsignedInt\n product_id Int @db.UnsignedInt\n qte Int\n price Decimal @db.Decimal(10, 2)\n desc String @db.Text\n}\n\nmodel checklist_relais {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n site_id Int @unique(map: \"site_id\") @db.UnsignedInt\n site_name String? @db.VarChar(128)\n account_id Int @db.UnsignedInt\n priority Int @default(2) @db.UnsignedTinyInt\n done Int @default(0) @db.UnsignedTinyInt\n equipement String? @db.Text\n connecteur String? @db.Text\n grounding String? @db.Text\n surge_lightning String? @db.Text\n switch_poe String? @db.Text\n switch_giga_shield String? @db.Text\n batterie String? @db.Text\n solidity String? @db.Text\n redondance String? @db.Text\n antenne_58_360 String? @db.Text\n antenne_24_360 String? @db.Text\n rspro_maj String? @db.Text\n boite String? @db.Text\n cable String? @db.Text\n staros_ubnt String? @db.Text\n autre String? @db.Text\n}\n\n/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments\nmodel conference {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n room_id Int @db.UnsignedInt\n time_start String @db.VarChar(16)\n time_end String @db.VarChar(16)\n name String @db.VarChar(128)\n description String? @db.Text\n host Int @db.UnsignedInt\n participant String @db.Text\n}\n\nmodel conference_room {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String @db.VarChar(128)\n status Int @default(1) @db.TinyInt\n location String? @db.VarChar(128)\n description String? @db.Text\n}\n\nmodel fournisseur {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n nom String @db.VarChar(128)\n email String @db.VarChar(64)\n actif Boolean @default(true)\n}\n\nmodel notice_gui {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n staff_id Int @db.UnsignedInt\n message String @db.Text\n is_read Int @default(0)\n timestamp String @db.VarChar(10)\n}\n\nmodel promo {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n name String? @db.VarChar(64)\n desc String? @db.Text\n date_start BigInt? @db.UnsignedBigInt\n date_end BigInt? @db.UnsignedBigInt\n date_orig BigInt?\n visible_until BigInt?\n actif Int @default(0) @db.TinyInt\n}\n\nmodel stbs {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n mac String @unique(map: \"mac\") @db.VarChar(32)\n sn String @db.VarChar(32)\n targo String? @db.VarChar(16)\n}\n\nmodel tech_dispo {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n date BigInt @unique(map: \"date\") @db.UnsignedBigInt\n tech Int? @db.UnsignedInt\n}\n\nenum phone_addr_enhanced_capable {\n Y\n N\n}\n\n/// ************** DEPRECATED ********************************************\nmodel debug {\n id BigInt @id @default(autoincrement())\n autor String? @db.VarChar(32)\n url String? @db.VarChar(128)\n date_last BigInt?\n desc String? @db.MediumText\n note4autor String? @db.MediumText\n note4dev String? @db.MediumText\n status String? @db.VarChar(64)\n}\n\nmodel carte_temps {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n week Int @db.UnsignedTinyInt\n year Int? @db.UnsignedInt\n date BigInt @db.UnsignedBigInt\n staff_id BigInt @db.UnsignedBigInt\n start_am BigInt? @db.UnsignedBigInt\n end_am BigInt? @db.UnsignedBigInt\n start_pm BigInt? @db.UnsignedBigInt\n end_pm BigInt? @db.UnsignedBigInt\n start_night BigInt? @db.UnsignedBigInt\n end_night BigInt? @db.UnsignedBigInt\n relais Float?\n comment String? @db.Text\n note_int String? @db.Text\n conge Int @default(0) @db.UnsignedTinyInt\n appr String? @db.VarChar(8)\n appr_dir String? @db.VarChar(8)\n\n @@index([staff_id], map: \"staff_id\")\n}\n\nmodel carte_temps_periode {\n id Int @id @default(autoincrement()) @db.UnsignedSmallInt\n debut String @db.VarChar(16)\n fin String @db.VarChar(16)\n paid String @db.VarChar(16)\n periode Int @db.UnsignedTinyInt\n annee Int @db.UnsignedSmallInt\n}\n\nmodel banque_heure_staff {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n staff_id Int @db.UnsignedInt\n week Int @db.UnsignedTinyInt\n year Int @db.UnsignedSmallInt\n sunday String? @db.VarChar(16)\n heure Float\n\n @@index([staff_id], map: \"staff_id\")\n}\n\nmodel hour_bank {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id BigInt @db.UnsignedBigInt\n remaining_time Int @default(0)\n expiration_date BigInt @default(0) @db.UnsignedBigInt\n note String? @db.MediumText\n recurrence Int @default(0) @db.UnsignedTinyInt\n reset_value Int @default(0) @db.UnsignedSmallInt\n\n @@index([account_id], map: \"account_id\")\n}\n\nmodel hour_bank_detail {\n id Int @id @default(autoincrement())\n hour_id Int\n staff_id BigInt? @db.UnsignedBigInt\n date_orig BigInt @db.UnsignedBigInt\n used_time Int @default(0) @db.SmallInt\n ticket_id BigInt? @db.UnsignedBigInt\n working_order String? @db.VarChar(16)\n detail String? @db.MediumText\n\n @@index([hour_id], map: \"hour_id\")\n}\n\nmodel test {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n text String @db.Text\n c2 Int @default(1)\n}\n\n//this table is for CSS class only, no other uses\nmodel account_memo_template {\n id Int @id @default(autoincrement())\n name String @db.VarChar(32)\n color String @db.VarChar(6)\n bcolor String @db.VarChar(6)\n border String @default(dbgenerated(\"(000000)\")) @db.VarChar(6)\n}\n\n//not used\nmodel notes {\n id Int @id @default(autoincrement())\n account_id Int @db.UnsignedInt\n notes String @db.MediumText\n}\n\n//NOT USED\nmodel email {\n id Int @id @default(autoincrement())\n account_id BigInt?\n email String? @db.VarChar(128)\n password String? @db.VarChar(128)\n}\n\n//not relevant to ticket module\nmodel client_pwd {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n date BigInt @db.UnsignedBigInt\n uid String @db.VarChar(32)\n used Boolean @default(false)\n}\n\n//NO USES FOR TICKETING PURPOSES\nmodel account_profile {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @db.UnsignedInt\n profile_id String @db.VarChar(64)\n address_id String @db.VarChar(64)\n card_id String @db.VarChar(64)\n token String @db.VarChar(32)\n initial_transaction String @db.VarChar(128)\n}\n\n//not relevant to ticket module\nmodel deposit_slip {\n id Int @id @default(autoincrement())\n customer_id String? @db.VarChar(32)\n name String? @db.VarChar(512)\n amount Float @default(0)\n type String @db.VarChar(32)\n desc String? @db.VarChar(255)\n date BigInt? @db.UnsignedBigInt\n}\n\n//this table display suspended account\nmodel account_suspension {\n id Int @id @default(autoincrement()) @db.UnsignedInt\n account_id Int @unique(map: \"account_id\") @db.UnsignedInt\n date_start BigInt @db.UnsignedBigInt\n date_end BigInt @db.UnsignedBigInt\n note String @db.VarChar(128)\n}\n", "runtimeDataModel": { "models": {}, "enums": {}, diff --git a/prisma/mariadb/generated/prisma/client/mariadb/models/compta_ppa_file_id.ts b/prisma/mariadb/generated/prisma/client/mariadb/models/compta_ppa_file_id.ts index 3d09db2..8d8baac 100644 --- a/prisma/mariadb/generated/prisma/client/mariadb/models/compta_ppa_file_id.ts +++ b/prisma/mariadb/generated/prisma/client/mariadb/models/compta_ppa_file_id.ts @@ -14,7 +14,7 @@ import type * as Prisma from "../internal/prismaNamespace" /** * Model compta_ppa_file_id - * This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments + * */ export type compta_ppa_file_idModel = runtime.Types.Result.DefaultSelection diff --git a/src/app.module.ts b/src/app.module.ts index f75b786..fd455bd 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -14,11 +14,10 @@ import { IdentityAndAccountModule } from 'src/identity-and-account/identity-and- import { ChatbotModule } from 'src/chatbot/chatbot.module'; import { PrismaMariadbModule } from 'prisma/mariadb/prisma-mariadb.module'; import { PrismaLegacyModule } from 'prisma/prisma-legacy/prisma-legacy.module'; -import { AccountModule } from 'src/customer-support/accounts/account.module'; +import { CustomerSupportModule } from 'src/customer-support/customer-support.module'; @Module({ imports: [ - AccountModule, AuthenticationModule, ConfigModule.forRoot({ isGlobal: true }), ScheduleModule.forRoot(), //cronjobs @@ -29,6 +28,7 @@ import { AccountModule } from 'src/customer-support/accounts/account.module'; TimeAndAttendanceModule, IdentityAndAccountModule, ChatbotModule, + CustomerSupportModule, ], controllers: [AppController], providers: [ diff --git a/src/common/mappers/email-id.mapper.ts b/src/common/mappers/email-id.mapper.ts index 7628d84..14f7a9f 100644 --- a/src/common/mappers/email-id.mapper.ts +++ b/src/common/mappers/email-id.mapper.ts @@ -34,4 +34,6 @@ export class EmailToIdResolver { if (!user) return { success: false, error: `EMPLOYEE_NOT_FOUND` }; return { success: true, data: user.id }; } + + readonly findFullNameByEmail } \ No newline at end of file diff --git a/src/common/utils/date-utils.ts b/src/common/utils/date-utils.ts index de2addb..ae9d1ce 100644 --- a/src/common/utils/date-utils.ts +++ b/src/common/utils/date-utils.ts @@ -155,4 +155,12 @@ export const addHourstoDateString = (start_time: string, hours: number): string const hh = String(end.getUTCHours()).padStart(2, '0'); const mm = String(end.getUTCMinutes()).padStart(2, '0'); return `${hh}:${mm}:00`; +} + +export const timestampToStringDate = (timestamp: number): string => { + const date = new Date(timestamp); + const dd = date.getDate().toString().padStart(2, '0'); + const mm = (date.getMonth() + 1).toString().padStart(2, '0'); + const yyyy = date.getFullYear(); + return `${dd}-${mm}-${yyyy}`; } \ No newline at end of file diff --git a/src/customer-support/accounts/account.controller.ts b/src/customer-support/accounts/account.controller.ts deleted file mode 100644 index 8fc97ee..0000000 --- a/src/customer-support/accounts/account.controller.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Controller, Get, Param } from "@nestjs/common"; -import { AccountMemoService } from "src/customer-support/accounts/services/account-memo.service"; -import { AccountService } from "src/customer-support/accounts/services/account.service"; - - -@Controller('accounts') -export class AccountController { - constructor( - private readonly accountService: AccountService, - private readonly memoService: AccountMemoService, - ) { } - - @Get() - findAllAccounts() { - return this.accountService.findAllAccounts(); - } - - @Get('account/:id') - findAccountById(@Param('accountId') accountId: number) { - return this.accountService.findAccountById(accountId); - } - - @Get(':id') - findMemosByAccountId(@Param('accountId') accountId: number) { - return this.memoService.findMemosByAccountId(accountId); - } - -} \ No newline at end of file diff --git a/src/customer-support/accounts/account.module.ts b/src/customer-support/accounts/account.module.ts deleted file mode 100644 index 1dd3e7b..0000000 --- a/src/customer-support/accounts/account.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Module } from "@nestjs/common"; -import { PrismaMariaDbService } from "prisma/mariadb/prisma-mariadb.service"; -import { AccountController } from "src/customer-support/accounts/account.controller"; -import { AccountMemoService } from "src/customer-support/accounts/services/account-memo.service"; -import { AccountService } from "src/customer-support/accounts/services/account.service"; - - -@Module({ - controllers: [ AccountController ], - providers: [ AccountService, PrismaMariaDbService, AccountMemoService ], -}) export class AccountModule { }; \ No newline at end of file diff --git a/src/customer-support/accounts/services/account-create.service.ts b/src/customer-support/accounts/services/account-create.service.ts deleted file mode 100644 index 75db581..0000000 --- a/src/customer-support/accounts/services/account-create.service.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Injectable } from "@nestjs/common"; - -@Injectable() -export class AccountCreateService { - -} \ No newline at end of file diff --git a/src/customer-support/accounts/services/account-memo-update.service.ts b/src/customer-support/accounts/services/account-memo-update.service.ts deleted file mode 100644 index eae8577..0000000 --- a/src/customer-support/accounts/services/account-memo-update.service.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Injectable } from "@nestjs/common"; - -@Injectable() -export class AccountMemoUpdateService { - -} \ No newline at end of file diff --git a/src/customer-support/accounts/services/account-memo.service.ts b/src/customer-support/accounts/services/account-memo.service.ts deleted file mode 100644 index ef110be..0000000 --- a/src/customer-support/accounts/services/account-memo.service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Injectable } from "@nestjs/common"; -import { PrismaMariaDbService } from "prisma/mariadb/prisma-mariadb.service"; -import { Result } from "src/common/errors/result-error.factory"; -import { AccountMemo } from "src/customer-support/dtos/account.dto"; - -@Injectable() -export class AccountMemoService { - constructor(private readonly prismaMariaDb: PrismaMariaDbService) { } - - findMemosByAccountId = async (accountId: number): Promise> => { - const listOfMemos: AccountMemo[] = []; - - const rawListOfMemos = await this.prismaMariaDb.account_memo.findMany({ - where: { id: accountId }, - select: { last_updated: true, staff_id: true, memo: true }, - }); - if (!rawListOfMemos) return { success: false, error: 'MEMOS_NOT_FOUND' }; - - for (const memo of rawListOfMemos) { - listOfMemos.push({ - last_updated: Number(memo.last_updated), - staff_id: Number(memo.staff_id), - memo: memo.memo ? memo.memo : '', - }); - } - return { success: true, data: listOfMemos } - } - -} \ No newline at end of file diff --git a/src/customer-support/accounts/services/account-update.service.ts b/src/customer-support/accounts/services/account-update.service.ts deleted file mode 100644 index 6db2e15..0000000 --- a/src/customer-support/accounts/services/account-update.service.ts +++ /dev/null @@ -1,56 +0,0 @@ -// import { Injectable } from "@nestjs/common"; -// import { PrismaMariaDbService } from "prisma/mariadb/prisma-mariadb.service"; -// import { Result } from "src/common/errors/result-error.factory"; -// import { Account } from "src/customer-support/accounts/account.dto"; - -// @Injectable() -// export class AccountUpdateService { -// constructor(private readonly prisma: PrismaMariaDbService) { } - -// async updateAccount(account: Account): Promise> { - -// const oldAccountInfos = await this.prisma.account.findUnique({ -// where: { id: account.id }, -// }); -// if (!oldAccountInfos) return { success: false, error: 'ACCOUNT_NOT_FOUND' }; - -// await this.prisma.account.update({ -// where: { id: oldAccountInfos.id }, -// data: { -// customer_id: account.customerId, -// language_id: account.language, -// username: account.username, -// password: account.password, -// group_id: account.groupId, -// status: account.status, -// first_name: account.firstName, -// last_name: account.lastName, -// mandataire: account.mandataire, -// title: account.title, -// email: account.email, -// company: account.company, -// contact: account.contact, -// address1: account.address, -// address2: account.address, -// tel_home: account.telHome, -// tel_office: account.telOffice, -// tel_office_ext: account.telOffice_ext, -// cell: account.cell, -// fax: account.fax, -// land_owner: account.landOwner, -// commercial: account.commercial, -// vip: account.vip, -// notes_client: account.notes_client, -// terminate_reason: account.terminateReason, -// terminate_cie: account.terminateCie, -// terminate_date: account.terminateDate, -// terminate_note: account.terminateNote, -// mauvais_payeur: account.mauvaisPayeur, -// }, -// }); - - - - -// } -// } \ No newline at end of file diff --git a/src/customer-support/accounts/services/account.service.ts b/src/customer-support/accounts/services/account.service.ts deleted file mode 100644 index e542de7..0000000 --- a/src/customer-support/accounts/services/account.service.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { Injectable } from "@nestjs/common"; -import { PrismaMariaDbService } from "prisma/mariadb/prisma-mariadb.service"; -import { Result } from "src/common/errors/result-error.factory"; -import { Account } from "src/customer-support/dtos/account.dto"; - - -@Injectable() -export class AccountService { - constructor(private readonly prismaMariaDb: PrismaMariaDbService) { } - - findAllAccounts = async (): Promise> => { - const listOfAccounts: Account[] = []; - - const rawListOfAccounts = await this.prismaMariaDb.account.findMany({}); - if (!rawListOfAccounts) return { success: false, error: 'ACCOUNTS_NOT_FOUND' } - try { - - for (const account of rawListOfAccounts) { - const emailList: string[] = [ - account.email ? account.email : '', - account.email_autre ? account.email_autre : '', - ]; - - const addressList: string[] = [ - account.address1 ? account.address1 : '', - account.address2 ? account.address2 : '', - account.city ? account.city : '', - account.state ? account.state : '', - account.zip ? account.zip : '', - account.country_id.toString(), - ]; - - listOfAccounts.push({ - id: Number(account.id), - customerId: account.customer_id ? account.customer_id : '', - language: account.language_id, - username: account.username ? account.username : '', - password: account.password ? account.password : '', - groupId: account.group_id ? account.group_id : 0, - status: account.status ? account.status : 0, - firstName: account.first_name ? account.first_name : '', - lastName: account.last_name ? account.last_name : '', - mandataire: account.mandataire ? account.mandataire : '', - title: account.title ? account.title : '', - email: emailList, - company: account.company ? account.company : '', - contact: account.contact, - address: addressList, - telHome: account.tel_home ? account.tel_home : '', - telOffice: account.tel_office ? account.tel_office : '', - telOffice_ext: account.tel_office_ext ? account.tel_office_ext : '', - cell: account.cell ? account.cell : '', - fax: account.fax ? account.fax : '', - landOwner: account.land_owner, - commercial: account.commercial, - vip: account.vip, - notes_client: account.notes_client ? account.notes_client : '', - terminateReason: account.terminate_reason ? account.terminate_reason : '', - terminateCie: account.terminate_cie ? account.terminate_cie : '', - terminateNote: account.terminate_note ? account.terminate_note : '', - terminateDate: account.terminate_date ? account.terminate_date : '', - mauvaisPayeur: account.mauvais_payeur, - }); - } - console.log(listOfAccounts); - return { success: true, data: listOfAccounts }; - - } catch (error) { - return { success: false, error: error + " \n An error occured during retrieving the list of accounts" } - } - } - - findAccountById = async (accountId: number): Promise> => { - - const rawAccount = await this.prismaMariaDb.account.findUnique({ - where: { id: accountId } - }); - if (!rawAccount) return { success: false, error: 'ACCOUNT_NOT_FOUND' } - - const emailList: string[] = [ - rawAccount.email ? rawAccount.email : '', - rawAccount.email_autre ? rawAccount.email_autre : '', - ]; - - const addressList: string[] = [ - rawAccount.address1 ? rawAccount.address1 : '', - rawAccount.address2 ? rawAccount.address2 : '', - rawAccount.city ? rawAccount.city : '', - rawAccount.state ? rawAccount.state : '', - rawAccount.zip ? rawAccount.zip : '', - rawAccount.country_id.toString(), - ]; - - const account: Account = { - id: Number(rawAccount.id), - customerId: rawAccount.customer_id ? rawAccount.customer_id : '', - language: rawAccount.language_id, - username: rawAccount.username ? rawAccount.username : '', - password: rawAccount.password ? rawAccount.password : '', - groupId: rawAccount.group_id ? rawAccount.group_id : 0, - status: rawAccount.status ? rawAccount.status : 0, - firstName: rawAccount.first_name ? rawAccount.first_name : '', - lastName: rawAccount.last_name ? rawAccount.last_name : '', - mandataire: rawAccount.mandataire ? rawAccount.mandataire : '', - title: rawAccount.title ? rawAccount.title : '', - email: emailList, - company: rawAccount.company ? rawAccount.company : '', - contact: rawAccount.contact, - address: addressList, - telHome: rawAccount.tel_home ? rawAccount.tel_home : '', - telOffice: rawAccount.tel_office ? rawAccount.tel_office : '', - telOffice_ext: rawAccount.tel_office_ext ? rawAccount.tel_office_ext : '', - cell: rawAccount.cell ? rawAccount.cell : '', - fax: rawAccount.fax ? rawAccount.fax : '', - landOwner: rawAccount.land_owner, - commercial: rawAccount.commercial, - vip: rawAccount.vip, - notes_client: rawAccount.notes_client ? rawAccount.notes_client : '', - terminateReason: rawAccount.terminate_reason ? rawAccount.terminate_reason : '', - terminateCie: rawAccount.terminate_cie ? rawAccount.terminate_cie : '', - terminateNote: rawAccount.terminate_note ? rawAccount.terminate_note : '', - terminateDate: rawAccount.terminate_date ? rawAccount.terminate_date : '', - mauvaisPayeur: rawAccount.mauvais_payeur, - } - - return { success: true, data: account }; - } -} diff --git a/src/customer-support/customer-support.module.ts b/src/customer-support/customer-support.module.ts index 930aee1..8a495cf 100644 --- a/src/customer-support/customer-support.module.ts +++ b/src/customer-support/customer-support.module.ts @@ -1,8 +1,10 @@ import { Module } from "@nestjs/common"; +import { TicketController } from "src/customer-support/tickets/ticket.controller"; +import { TicketService } from "src/customer-support/tickets/ticket.service"; @Module({ imports: [], - controllers: [], - providers: [], + controllers: [TicketController], + providers: [TicketService], exports: [], -}) export class CustomerSupportModule {} \ No newline at end of file +}) export class CustomerSupportModule { } \ No newline at end of file diff --git a/src/customer-support/customers/customer.controller.ts b/src/customer-support/customers/customer.controller.ts deleted file mode 100644 index ebd71b0..0000000 --- a/src/customer-support/customers/customer.controller.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Controller } from "@nestjs/common"; - -@Controller() -export class CustomerController { - -} \ No newline at end of file diff --git a/src/customer-support/customers/customer.module.ts b/src/customer-support/customers/customer.module.ts deleted file mode 100644 index 541b7b6..0000000 --- a/src/customer-support/customers/customer.module.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Module } from "@nestjs/common"; -import { CustomerController } from "src/customer-support/customers/customer.controller"; -import { CustomerService } from "src/customer-support/customers/customer.service"; - -@Module({ - imports: [CustomerService], - providers: [CustomerController], -}) export class CustomerModule { } \ No newline at end of file diff --git a/src/customer-support/customers/customer.service.ts b/src/customer-support/customers/customer.service.ts deleted file mode 100644 index 6a26f64..0000000 --- a/src/customer-support/customers/customer.service.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Injectable } from "@nestjs/common"; - -@Injectable() -export class CustomerService { - -} \ No newline at end of file diff --git a/src/customer-support/deliveries/delivery.controller.ts b/src/customer-support/deliveries/delivery.controller.ts deleted file mode 100644 index a8e2139..0000000 --- a/src/customer-support/deliveries/delivery.controller.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Controller } from "@nestjs/common"; - -@Controller() -export class DeliveryController { - -} \ No newline at end of file diff --git a/src/customer-support/deliveries/delivery.module.ts b/src/customer-support/deliveries/delivery.module.ts deleted file mode 100644 index ca4c3e8..0000000 --- a/src/customer-support/deliveries/delivery.module.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Module } from "@nestjs/common"; -import { DeliveryController } from "src/customer-support/deliveries/delivery.controller"; -import { DeliveryService } from "src/customer-support/deliveries/delivery.service"; - -@Module({ - imports: [DeliveryService], - providers: [DeliveryController], -}) export class DeliveryModule { } \ No newline at end of file diff --git a/src/customer-support/deliveries/delivery.service.ts b/src/customer-support/deliveries/delivery.service.ts deleted file mode 100644 index 39845cb..0000000 --- a/src/customer-support/deliveries/delivery.service.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Injectable } from "@nestjs/common"; - -@Injectable() -export class DeliveryService { - -} \ No newline at end of file diff --git a/src/customer-support/devices/device.controller.ts b/src/customer-support/devices/device.controller.ts deleted file mode 100644 index bf94bd9..0000000 --- a/src/customer-support/devices/device.controller.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Controller } from "@nestjs/common"; - -@Controller() -export class DeviceController { - -} \ No newline at end of file diff --git a/src/customer-support/devices/device.module.ts b/src/customer-support/devices/device.module.ts deleted file mode 100644 index 0a82e0b..0000000 --- a/src/customer-support/devices/device.module.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Module } from "@nestjs/common"; -import { DeviceController } from "src/customer-support/devices/device.controller"; -import { DeviceService } from "src/customer-support/devices/device.service"; - -@Module({ - imports: [DeviceService], - providers: [DeviceController] -}) export class DeviceModule { } \ No newline at end of file diff --git a/src/customer-support/devices/device.service.ts b/src/customer-support/devices/device.service.ts deleted file mode 100644 index cb49cf2..0000000 --- a/src/customer-support/devices/device.service.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Injectable } from "@nestjs/common"; - -@Injectable() -export class DeviceService { - -} \ No newline at end of file diff --git a/src/customer-support/dtos/account.dto.ts b/src/customer-support/dtos/account.dto.ts deleted file mode 100644 index 2623910..0000000 --- a/src/customer-support/dtos/account.dto.ts +++ /dev/null @@ -1,13 +0,0 @@ -export class Account { - id: string; - account_number: string; - primary_contact_id: string; - secondary_contacts_id: string[]; - addresses: string[]; - primary_address: string; - billingRecurrence: string; - billingDayOfMonth: number; - nextBillingDate: string; - created_date: Date; - status: string; -} \ No newline at end of file diff --git a/src/customer-support/dtos/address.dto.ts b/src/customer-support/dtos/address.dto.ts deleted file mode 100644 index a54ea50..0000000 --- a/src/customer-support/dtos/address.dto.ts +++ /dev/null @@ -1,16 +0,0 @@ -export class Address { - id: string; - account_id: string; - civic_number: string; - street: string; - suite: string; - city: string; - province: string; - country: string; - postal_code: string; - constacts: string[]; - devices: string[]; - services: string[]; - technicalTickets: number[]; - is_primary: boolean; -} \ No newline at end of file diff --git a/src/customer-support/dtos/customer.dto.ts b/src/customer-support/dtos/customer.dto.ts deleted file mode 100644 index 131bb87..0000000 --- a/src/customer-support/dtos/customer.dto.ts +++ /dev/null @@ -1,8 +0,0 @@ -export class Customer { - id:string; - first_name:string; - last_name:string; - email:string; - phone:string; - primary_contact:boolean; -} \ No newline at end of file diff --git a/src/customer-support/dtos/delivery.dto.ts b/src/customer-support/dtos/delivery.dto.ts deleted file mode 100644 index 2312984..0000000 --- a/src/customer-support/dtos/delivery.dto.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Address } from "cluster"; -import { Account } from "src/customer-support/dtos/account.dto"; -import { Product } from "src/customer-support/dtos/product.dto"; -import { Tickets } from "src/customer-support/dtos/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[]; -} \ No newline at end of file diff --git a/src/customer-support/dtos/device.dto.ts b/src/customer-support/dtos/device.dto.ts deleted file mode 100644 index b47a09f..0000000 --- a/src/customer-support/dtos/device.dto.ts +++ /dev/null @@ -1,17 +0,0 @@ -// 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 { - id: string; - name:string; - status:string; - address_id: string; - category:string; - model:string; - sn:string; - speed:string; - price:string; - description:string; - tag:string; - photo:string; -} \ No newline at end of file diff --git a/src/customer-support/dtos/fibre.dto.ts b/src/customer-support/dtos/fibre.dto.ts deleted file mode 100644 index 5906dea..0000000 --- a/src/customer-support/dtos/fibre.dto.ts +++ /dev/null @@ -1,3 +0,0 @@ -export class Fibre { - -} \ No newline at end of file diff --git a/src/customer-support/dtos/phone.dto.ts b/src/customer-support/dtos/phone.dto.ts deleted file mode 100644 index fb04bff..0000000 --- a/src/customer-support/dtos/phone.dto.ts +++ /dev/null @@ -1,7 +0,0 @@ - -//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 { - -} \ No newline at end of file diff --git a/src/customer-support/dtos/product.dto.ts b/src/customer-support/dtos/product.dto.ts deleted file mode 100644 index 76df9b2..0000000 --- a/src/customer-support/dtos/product.dto.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Device } from "src/customer-support/dtos/device.dto"; -import { Service } from "src/customer-support/dtos/services.dto"; -import { Comments } from "src/customer-support/shared/shared-class.dto"; -import { Television } from "src/customer-support/dtos/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? -} diff --git a/src/customer-support/dtos/services.dto.ts b/src/customer-support/dtos/services.dto.ts deleted file mode 100644 index c148053..0000000 --- a/src/customer-support/dtos/services.dto.ts +++ /dev/null @@ -1,24 +0,0 @@ -//A Service is a product - -export class Service { - id: string; - accountId: string; - address_id: string; - serviceFromCatalogId: string; - name: string; - type: string; - activatedAt: string; - date_of_suspension: any[]; - date_of_reactivation: any[]; -} - -export class OfferedService { - id: string; - code: string; - name: string; - description: string; - standardPrice: number; - category:string; - status:string; - effectiveDate:string; -} \ No newline at end of file diff --git a/src/customer-support/dtos/staff.dto.ts b/src/customer-support/dtos/staff.dto.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/customer-support/dtos/television.dto.ts b/src/customer-support/dtos/television.dto.ts deleted file mode 100644 index ea70837..0000000 --- a/src/customer-support/dtos/television.dto.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Customer } from "src/customer-support/dtos/customer.dto"; -import { Service } from "src/customer-support/dtos/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; -} \ No newline at end of file diff --git a/src/customer-support/dtos/ticket.dto.ts b/src/customer-support/dtos/ticket.dto.ts deleted file mode 100644 index d88d472..0000000 --- a/src/customer-support/dtos/ticket.dto.ts +++ /dev/null @@ -1,21 +0,0 @@ -//matches frontend needs -export class Tickets { - id: number; - address_id: string; - customer_id: string; - status: string; - type: string; - short_description: string; - employee_assigned: string; - full_description: string; - assistant: string; - departement: string; - created_by: string; - creation_date: Date; - last_update: Date; - assigned_date: Date; - ticketSuperType: string; - attached: string[]; -} - - diff --git a/src/customer-support/fibre/fibre.controller.ts b/src/customer-support/fibre/fibre.controller.ts deleted file mode 100644 index 9222885..0000000 --- a/src/customer-support/fibre/fibre.controller.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Controller } from "@nestjs/common"; - -@Controller() -export class FibreController { - -} \ No newline at end of file diff --git a/src/customer-support/fibre/fibre.module.ts b/src/customer-support/fibre/fibre.module.ts deleted file mode 100644 index 92c5c7d..0000000 --- a/src/customer-support/fibre/fibre.module.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Module } from "@nestjs/common"; -import { FibreController } from "src/customer-support/fibre/fibre.controller"; -import { FibreService } from "src/customer-support/fibre/fibre.service"; - -@Module({ - imports: [FibreService], - providers: [FibreController], -}) export class FibreModule { } \ No newline at end of file diff --git a/src/customer-support/fibre/fibre.service.ts b/src/customer-support/fibre/fibre.service.ts deleted file mode 100644 index 6b52031..0000000 --- a/src/customer-support/fibre/fibre.service.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Injectable } from "@nestjs/common"; - -@Injectable() -export class FibreService { - -} \ No newline at end of file diff --git a/src/customer-support/http-test-files/account-testing.http b/src/customer-support/http-test-files/account-testing.http deleted file mode 100644 index 7ada5af..0000000 --- a/src/customer-support/http-test-files/account-testing.http +++ /dev/null @@ -1,6 +0,0 @@ -# GET http://localhost:3000/accounts - -# GET http://localhost:3000/accounts/6912 - - -GET http://localhost:3000/accounts/account/6912 \ No newline at end of file diff --git a/src/customer-support/phones/phone.controller.ts b/src/customer-support/phones/phone.controller.ts deleted file mode 100644 index 4dd8260..0000000 --- a/src/customer-support/phones/phone.controller.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Controller } from "@nestjs/common"; - -@Controller() -export class PhoneController { - -} \ No newline at end of file diff --git a/src/customer-support/phones/phone.module.ts b/src/customer-support/phones/phone.module.ts deleted file mode 100644 index fd20914..0000000 --- a/src/customer-support/phones/phone.module.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Module } from "@nestjs/common"; -import { PhoneController } from "src/customer-support/phones/phone.controller"; -import { PhoneService } from "src/customer-support/phones/phone.service"; - -@Module({ - imports: [PhoneService], - providers: [PhoneController], -}) export class PhoneModule { } \ No newline at end of file diff --git a/src/customer-support/phones/phone.service.ts b/src/customer-support/phones/phone.service.ts deleted file mode 100644 index b707747..0000000 --- a/src/customer-support/phones/phone.service.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Injectable } from "@nestjs/common"; - -@Injectable() -export class PhoneService { - -} \ No newline at end of file diff --git a/src/customer-support/product/product.controller.ts b/src/customer-support/product/product.controller.ts deleted file mode 100644 index 822135c..0000000 --- a/src/customer-support/product/product.controller.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Controller } from "@nestjs/common"; - -@Controller() -export class ProductController { - -} \ No newline at end of file diff --git a/src/customer-support/product/product.module.ts b/src/customer-support/product/product.module.ts deleted file mode 100644 index 4fdd7f0..0000000 --- a/src/customer-support/product/product.module.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Module } from "@nestjs/common"; -import { ProductController } from "src/customer-support/product/product.controller"; -import { ProductService } from "src/customer-support/product/product.service"; - -@Module({ - imports: [ProductService], - providers: [ProductController], -}) export class ProductModule { } \ No newline at end of file diff --git a/src/customer-support/product/product.service.ts b/src/customer-support/product/product.service.ts deleted file mode 100644 index e9b0b60..0000000 --- a/src/customer-support/product/product.service.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Injectable } from "@nestjs/common"; - -@Injectable() -export class ProductService { - - } \ No newline at end of file diff --git a/src/customer-support/services/services.controller.ts b/src/customer-support/services/services.controller.ts deleted file mode 100644 index 4b2cfe5..0000000 --- a/src/customer-support/services/services.controller.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Controller } from "@nestjs/common"; - -@Controller() -export class ServiceController{ - -} \ No newline at end of file diff --git a/src/customer-support/services/services.module.ts b/src/customer-support/services/services.module.ts deleted file mode 100644 index 0d582c9..0000000 --- a/src/customer-support/services/services.module.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Module } from "@nestjs/common"; -import { ServiceController } from "src/customer-support/services/services.controller"; -import { ServiceService } from "src/customer-support/services/services.service"; - -@Module({ - imports: [ServiceService], - providers: [ServiceController], -}) export class ServiceModule { } \ No newline at end of file diff --git a/src/customer-support/services/services.service.ts b/src/customer-support/services/services.service.ts deleted file mode 100644 index 255730f..0000000 --- a/src/customer-support/services/services.service.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Injectable } from "@nestjs/common"; - -@Injectable() -export class ServiceService { - -} \ No newline at end of file diff --git a/src/customer-support/shared/helpers/boolean.helpers.ts b/src/customer-support/shared/helpers/boolean.helpers.ts index 3950a56..8b9c595 100644 --- a/src/customer-support/shared/helpers/boolean.helpers.ts +++ b/src/customer-support/shared/helpers/boolean.helpers.ts @@ -1,38 +1,38 @@ -//This file is used to store function that help translate MariaDB data to Typescript manipulation requirements for the type "boolean". +// //This file is used to store function that help translate MariaDB data to Typescript manipulation requirements for the type "boolean". -import { PhoneAddrEnhancedCapable } from "src/customer-support/dtos/phone.dto"; +// import { PhoneAddrEnhancedCapable } from "src/customer-support/dtos/phone.dto"; -//From MariaDB to Frontend -export const fromTinyIntToBoolean = async (tinyInt: number): Promise => { - let booleanValue = true; - if ((tinyInt = 0) || (tinyInt = -1)) return booleanValue = false; - return booleanValue; -} +// //From MariaDB to Frontend +// export const fromTinyIntToBoolean = async (tinyInt: number): Promise => { +// let booleanValue = true; +// if ((tinyInt = 0) || (tinyInt = -1)) return booleanValue = false; +// return booleanValue; +// } -//From Frontend to MariaDB TinyInt boolean 1 - 0 -export const fromBooleanToTinyInt = async (boolean: boolean): Promise => { - return boolean ? 1 : 0; -} +// //From Frontend to MariaDB TinyInt boolean 1 - 0 +// export const fromBooleanToTinyInt = async (boolean: boolean): Promise => { +// return boolean ? 1 : 0; +// } -//From Frontend to MariaDB TinyInt boolean -1 - 1 -export const fromBooleanToTinyIntNegative = async (boolean: boolean): Promise => { - return boolean ? 1 : -1; -} +// //From Frontend to MariaDB TinyInt boolean -1 - 1 +// export const fromBooleanToTinyIntNegative = async (boolean: boolean): Promise => { +// return boolean ? 1 : -1; +// } -//From MariaDB to Frontend String boolean yes - no / Y - N / etc... -export const fromStringToBoolean = async (string: string): Promise => { - let booleanValue = true; - let stringValue = string.toLowerCase(); - if ((stringValue = "n") || (stringValue = "no") || (stringValue = "non")) { - return booleanValue = false; - } - return booleanValue; -} +// //From MariaDB to Frontend String boolean yes - no / Y - N / etc... +// export const fromStringToBoolean = async (string: string): Promise => { +// let booleanValue = true; +// let stringValue = string.toLowerCase(); +// if ((stringValue = "n") || (stringValue = "no") || (stringValue = "non")) { +// return booleanValue = false; +// } +// return booleanValue; +// } -export const fromBooleanToEnum = async (boolean: boolean): Promise => { - return boolean ? PhoneAddrEnhancedCapable.Y : PhoneAddrEnhancedCapable.N; -} +// export const fromBooleanToEnum = async (boolean: boolean): Promise => { +// return boolean ? PhoneAddrEnhancedCapable.Y : PhoneAddrEnhancedCapable.N; +// } -export const fromEnumToBoolean = async (enumValue: PhoneAddrEnhancedCapable): Promise => { - return enumValue ? true : false; -} \ No newline at end of file +// export const fromEnumToBoolean = async (enumValue: PhoneAddrEnhancedCapable): Promise => { +// return enumValue ? true : false; +// } \ No newline at end of file diff --git a/src/customer-support/shared/shared-class.dto.ts b/src/customer-support/shared/shared-class.dto.ts deleted file mode 100644 index 81b9035..0000000 --- a/src/customer-support/shared/shared-class.dto.ts +++ /dev/null @@ -1,20 +0,0 @@ -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; -} \ No newline at end of file diff --git a/src/customer-support/staff/staff.controller.ts b/src/customer-support/staff/staff.controller.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/customer-support/staff/staff.module.ts b/src/customer-support/staff/staff.module.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/customer-support/staff/staff.service.ts b/src/customer-support/staff/staff.service.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/customer-support/television/television.controller.ts b/src/customer-support/television/television.controller.ts deleted file mode 100644 index ec4c15b..0000000 --- a/src/customer-support/television/television.controller.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Controller } from "@nestjs/common"; - -@Controller() -export class TelevisionController { - - - -} \ No newline at end of file diff --git a/src/customer-support/television/television.module.ts b/src/customer-support/television/television.module.ts deleted file mode 100644 index 0376bf5..0000000 --- a/src/customer-support/television/television.module.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Module } from "@nestjs/common"; -import { TelevisionController } from "src/customer-support/television/television.controller"; -import { TelevisionService } from "src/customer-support/television/television.service"; - -@Module({ - imports: [TelevisionService], - providers: [TelevisionController], -}) export class TelevisionModule { } \ No newline at end of file diff --git a/src/customer-support/television/television.service.ts b/src/customer-support/television/television.service.ts deleted file mode 100644 index 758db41..0000000 --- a/src/customer-support/television/television.service.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Injectable } from "@nestjs/common"; - -@Injectable() -export class TelevisionService { - - -} \ No newline at end of file diff --git a/src/customer-support/tickets/dtos/note.ts b/src/customer-support/tickets/dtos/note.ts new file mode 100644 index 0000000..bff4586 --- /dev/null +++ b/src/customer-support/tickets/dtos/note.ts @@ -0,0 +1,45 @@ + +/* +To allow me to get all infos needed to display in the ticket list page i need to access these informations and how to get it : + + -> ticket_id: + - ticket table: + using the account ids and delivery ids, i can : + i need first name and last name for contacts, i will use the account_ids to query the account table + i need to find the service_id, i need the product_id to query the service table. + + -> status: + -ticket table : the status is here. + + -> assign_to: + - ticket table : + displays a staff_id: + I need to query the staff table, using the email to get the id of the employee, its email, its first and last name, + + -> deliveryAddress: + - ticket table: the account_id is here. + - delivery table: i can get the address here, using the account_id. + + -> product_type: + - ticket table : using the account_id : + i can query the delivery table: + -delivery table: + get delivery id linked to the account id + i can query the service table + - service table: + delivery_id to get the product_id and device_id + - product table: + using the product_id, i can get the type here + -> department: + - ticket table: + i can get the dept_id here + - ticket_dept : + using the dept_id from the ticket table, i can get the name here. + -> parentTicketId: + - ticket table: + i can get the parent here. + -> dueDate, updatedAt, completedAt: + - ticket table: + i can get the due_date, last_update, Date_closed here. + +*/ \ No newline at end of file diff --git a/src/customer-support/tickets/dtos/ticket-list.dto.ts b/src/customer-support/tickets/dtos/ticket-list.dto.ts new file mode 100644 index 0000000..0a2e63e --- /dev/null +++ b/src/customer-support/tickets/dtos/ticket-list.dto.ts @@ -0,0 +1,14 @@ +import { IsInt, IsOptional, IsString } from "class-validator"; + +export class TicketListItem { + @IsInt() id: number; + @IsString() status: string; + @IsString() @IsOptional() assignedTo: string; + @IsString() deliveryAddress: string; + @IsString() subject: string; + @IsString() department: string; + @IsInt() @IsOptional() parentTicketId: number; + @IsString() dueDate: string;; + @IsString() updatedAt: string; + @IsString() completedAt: string; +} \ No newline at end of file diff --git a/src/customer-support/tickets/dtos/ticket.dto.ts b/src/customer-support/tickets/dtos/ticket.dto.ts new file mode 100644 index 0000000..760d7b4 --- /dev/null +++ b/src/customer-support/tickets/dtos/ticket.dto.ts @@ -0,0 +1,65 @@ +import { Type } from "class-transformer"; +import { IsBoolean, IsInt, IsOptional, IsString } from "class-validator"; + +export class Ticket { + @IsInt() id: number; + @IsString() createdAt: string; + @Type(() => DeliveryAddress) deliveryAddress: DeliveryAddress; + @Type(() => Message) message: Message[]; + @Type(() => Service) service: Service[]; + @Type(() => Device) device: Device[]; + @Type(() => Contact) contact: Contact[]; + @Type(() => TicketHistory) TicketHistory: TicketHistory; +} + +export class DeliveryAddress { + @IsString() address: string; + @IsString() department: string; + @IsString() shortDescription: string; + @IsString() description: string; +} + +export class Message { + @IsString() attachment: string; + @IsString() comment: string; + @IsString() createdBy: string; + @IsString() createdAt: string; +} + +export class Service { + @IsString() serviceType: string; + @IsString() shortDescription: string; + @Type(() => Number) price: number; + @IsBoolean() status: boolean; +} + +export class Device { + @IsString() name: string; + @IsString() model: string; + @IsString() category: string; + @IsString() sku: string; + @IsString() sn: string; + @IsString() gponSn: string; + @IsString() @IsOptional() mac?: string; + @IsString() @IsOptional() wifiPass?: string; + @IsString() @IsOptional() tag?: string; + @IsString() room: string; + @Type(() => Number) price: number; + @IsString() @IsOptional() speed?: string; + @IsString() description: string; +} + +export class Contact { + @IsString() FirstName: string; + @IsString() LastName: string; + @IsString() @IsOptional() telHome?: string; + @IsString() @IsOptional() telOffice?: string; + @IsString() @IsOptional() telOfficeExt?: string; + @IsString() @IsOptional() cell?: string; + @IsString() @IsOptional() fax?: string; + @IsString() email: string; +} + +export class TicketHistory { + @Type(() => Ticket) ticket: Ticket[]; +} \ No newline at end of file diff --git a/src/customer-support/tickets/ticket.controller.ts b/src/customer-support/tickets/ticket.controller.ts index cba6e95..187d293 100644 --- a/src/customer-support/tickets/ticket.controller.ts +++ b/src/customer-support/tickets/ticket.controller.ts @@ -1,11 +1,21 @@ -import { Controller } from "@nestjs/common"; +import { Controller, Get, Param } from "@nestjs/common"; +import { ModuleAccessAllowed } from "src/common/decorators/modules-guard.decorators"; +import { Result } from "src/common/errors/result-error.factory"; +import { TicketListItem } from "src/customer-support/tickets/dtos/ticket-list.dto"; import { TicketService } from "src/customer-support/tickets/ticket.service"; - -@Controller() +@Controller('tickets') export class TicketController { constructor(private readonly getService: TicketService) { } + @Get(':email/:status') + @ModuleAccessAllowed() + async findTicketByFilters( + @Param('status') status: string, + @Param('email') email?: string, + ): Promise> { + return await this.getService.getListOfAllTicketByFilters(status, email); + } } \ No newline at end of file diff --git a/src/customer-support/tickets/ticket.service.ts b/src/customer-support/tickets/ticket.service.ts index f32e628..5a6d5a4 100644 --- a/src/customer-support/tickets/ticket.service.ts +++ b/src/customer-support/tickets/ticket.service.ts @@ -1,9 +1,85 @@ import { Injectable } from "@nestjs/common"; +import { Result } from "src/common/errors/result-error.factory"; import { PrismaMariaDbService } from "prisma/mariadb/prisma-mariadb.service"; +import { TicketListItem } from "src/customer-support/tickets/dtos/ticket-list.dto"; +import { timestampToStringDate } from "src/common/utils/date-utils"; + @Injectable() export class TicketService { - constructor(private readonly prisma: PrismaMariaDbService) { } + constructor( + private readonly prisma: PrismaMariaDbService, + ) { } + getListOfAllTicketByFilters = async (status: string, email?: string): Promise> => { + //fetch + const staffId = await this.prisma.staff.findFirst({ + where: { email }, + select: { + id: true, + first_name: true, + last_name: true, + email: true, + } + }); + if (!staffId) return { success: false, error: 'EMPLOYEE_NOT_FOUND' } -} \ No newline at end of file + //fetch the data for the following columns : ID, SUBJECT, STATUS, DÉPEND DU TICKET, DATE ASSIGNÉE, DERNIÈRE MISE À JOUR, DATE COMPLÉTÉE + const assignedTickets = await this.prisma.ticket.findMany({ + where: { assign_to: staffId.id, status }, + select: { + id: true, + delivery_id: true, // to fetch the address in the delivery table + status: true, // status column + dept_id: true, // to fetch the name of the department in the ticket_dept table + parent: true, // dépend du ticket column + due_date: true, // date assignée column + last_update: true, // dernière mise à jour column + date_closed: true, // date complétée column + subject: true, // type column + }, + }); + if (!assignedTickets) return { success: false, error: 'TICKETS_NOT_FOUND' }; + + let ticketListItem: TicketListItem[] = []; + + //fetch the data for the remaining columns: ADRESSE, DEPARTMENT + for (const ticket of assignedTickets) { + + //Address column + const delivery = await this.prisma.delivery.findUnique({ + where: { id: ticket.delivery_id }, + select: { address1: true, id: true, }, + }); + if (!delivery) return { success: false, error: 'ADDRESS_NOT_FOUND' }; + + //department column + const department = await this.prisma.ticket_dept.findUnique({ + where: { id: ticket.dept_id! }, + select: { name: true }, + }); + if (!department) return { success: false, error: 'DEPARTMENT_NOT_FOUND' }; + + //translate timestamp to Date string format + const dueDate = timestampToStringDate(Number(ticket.due_date)); + const updatedAt = timestampToStringDate(Number(ticket.last_update)) + const completedAt = timestampToStringDate(Number(ticket.date_closed)); + + //build a ticket for the ticket list + ticketListItem.push({ + id: Number(ticket.id), + subject: ticket.subject ? ticket.subject : '', + status: ticket.status, + assignedTo: '', + deliveryAddress: delivery.address1!, + department: department.name, + parentTicketId: Number(ticket.parent) ? Number(ticket.parent) : 0, + dueDate: dueDate, + updatedAt: updatedAt, + completedAt: completedAt, + }); + } + + return { success: true, data: ticketListItem } + } +}