2024-04-29 15:09:36 +02:00

2184 lines
51 KiB
TypeScript

import { ECivility, ECustomerStatus, EFolderStatus, EOfficeStatus, Prisma, PrismaClient } from "@prisma/client";
import User, {
Address,
Contact,
Customer,
Deed,
DeedType,
DocumentType,
Office,
OfficeFolder,
OfficeRole,
Role,
Rule,
} from "le-coffre-resources/dist/SuperAdmin";
import "module-alias/register";
export default async function main() {
try {
const prisma = new PrismaClient();
const idNot3 = "rleenrenlnr";
const idNot4 = "ljfeflecnmd";
const idNot5 = "rflrefrjf";
const idNot6 = "er3ojfdlfnd";
const addresses: Address[] = [
{
address: "template",
city: "template",
zip_code: 0o00,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Rue Pierre Emillion",
city: "Pacé",
zip_code: 35740,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Rue Pierre Charles",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Rue Pierre Pologne",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Rue Pierre Marcel",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Rue Pierre Jacques",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Rue Pierre Pascal",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Rue Maxime Henry",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Rue Maxime Francis",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Avenue Paul Roger",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Avenue Paul Franck",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Avenue Paul Maréchal",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Avenue Marcel Denis",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Place Alexandre",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Place Alexandre Jacques",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Place Alexandre 2",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Rue du livre",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Place de la joie",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Rue Paul Henry",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
{
address: "Rue Marcelin",
city: "Rennes",
zip_code: 35000,
created_at: new Date(),
updated_at: new Date(),
},
];
const contacts: Contact[] = [
{
address: addresses[0],
first_name: "Angela",
last_name: "Dubois",
email: "angela.dubois@gmail.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.FEMALE,
},
{
address: addresses[1],
first_name: "Maxime",
last_name: "Lalo",
email: "maxime.lalo@smart-chain.fr",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.MALE,
},
{
address: addresses[2],
first_name: "Vincent",
last_name: "Alamelle",
email: "vincent.alamelle@smart-chain.fr",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.MALE,
},
{
address: addresses[3],
first_name: "Melissa",
last_name: "Desde",
email: "melissa.desde@smart-chain.fr",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.FEMALE,
},
{
address: addresses[4],
first_name: "Maxime",
last_name: "Leroy",
email: "maxime.leroy@hotmail.fr",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.MALE,
},
{
address: addresses[5],
first_name: "Paul",
last_name: "Dupont",
email: "paul.dupont@outlook.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.MALE,
},
{
address: addresses[6],
first_name: "Jean",
last_name: "Dubignot",
email: "jean.dubignot@gmail.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.FEMALE,
},
{
address: addresses[7],
first_name: "Vincent",
last_name: "Martin",
email: "vincent.martin@gmail.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.MALE,
},
{
address: addresses[8],
first_name: "Lucie",
last_name: "Chevalier",
email: "lucie.chevalier@outlook.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.FEMALE,
},
{
address: addresses[9],
first_name: "Sébastien",
last_name: "Dubois",
email: "sebastien.dubois@gmail.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.MALE,
},
{
address: addresses[10],
first_name: "Mathilde",
last_name: "Durand",
email: "mathilde.durand@gmail.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.FEMALE,
},
{
address: addresses[11],
first_name: "Antoine",
last_name: "Bernard",
email: "antoine.bernard@outlook.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.MALE,
},
{
address: addresses[12],
first_name: "Camille",
last_name: "Laurent",
email: "camille.laurent@gmail.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.FEMALE,
},
{
address: addresses[13],
first_name: "Julien",
last_name: "Mercier",
email: "julien.mercier@hotmail.fr",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.MALE,
},
{
address: addresses[14],
first_name: "Charlotte",
last_name: "Lefebvre",
email: "charlotte.lefebvre@gmail.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.FEMALE,
},
{
address: addresses[15],
first_name: "Caroline",
last_name: "Pallut",
email: "caroline.pallut@gmail.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.FEMALE,
},
{
address: addresses[16],
first_name: "Nadège",
last_name: "Gauchet",
email: "nedege.gauchet@outlook.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.FEMALE,
},
{
address: addresses[17],
first_name: "Matthieu",
last_name: "Bougeard",
email: "matthieu.bougeard@gmail.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.MALE,
},
{
address: addresses[18],
first_name: "Cécile",
last_name: "Celton",
email: "cecile.celton@outlook.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.FEMALE,
},
{
address: addresses[19],
first_name: "Gwendal",
last_name: "Texier",
email: "gwendal.texier@gmail.com",
phone_number: "+33785186013",
cell_phone_number: "+33785186013",
birthdate: null,
created_at: new Date(),
updated_at: new Date(),
civility: ECivility.MALE,
},
];
const offices: Office[] = [
{
idNot: "0000",
name: "Office Template",
crpcen: "0000",
address: addresses[0],
created_at: new Date(),
updated_at: new Date(),
office_status: EOfficeStatus.ACTIVATED,
},
];
const customers: Customer[] = [
{
contact: contacts[0],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[5],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[6],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[7],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[8],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[9],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[10],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[11],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[12],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[13],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[14],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[15],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[16],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[17],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[18],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
{
contact: contacts[19],
created_at: new Date(),
updated_at: new Date(),
status: ECustomerStatus.PENDING,
},
];
const rules: Rule[] = [
{
name: "GET users",
label: "Lecture des utilisateurs",
created_at: new Date(),
updated_at: new Date(),
namespace: "collaborator",
},
{
name: "GET offices",
label: "Afficher des offices",
created_at: new Date(),
updated_at: new Date(),
namespace: "collaborator",
},
{
name: "GET customers",
label: "Afficher des clients",
created_at: new Date(),
updated_at: new Date(),
namespace: "collaborator",
},
{
name: "GET deeds",
label: "Voir des types d'acte",
created_at: new Date(),
updated_at: new Date(),
namespace: "collaborator",
},
{
name: "GET deed-types",
label: "Lecture des types d'actes",
created_at: new Date(),
updated_at: new Date(),
namespace: "collaborator",
},
{
name: "GET documents",
label: "Afficher des documents",
created_at: new Date(),
updated_at: new Date(),
namespace: "collaborator",
},
{
name: "GET document-types",
label: "Lecture des types de documents",
created_at: new Date(),
updated_at: new Date(),
namespace: "collaborator",
},
{
name: "GET files",
label: "Lecture des fichiers",
created_at: new Date(),
updated_at: new Date(),
namespace: "collaborator",
},
{
name: "GET folders",
label: "Afficher les dossiers",
created_at: new Date(),
updated_at: new Date(),
namespace: "collaborator",
},
{
name: "GET roles",
label: "Afficher les rôles",
created_at: new Date(),
updated_at: new Date(),
namespace: "collaborator",
},
{
name: "GET rules",
label: "Afficher les droits",
created_at: new Date(),
updated_at: new Date(),
namespace: "collaborator",
},
{
name: "GET office-roles",
label: "Lecture des rôles d'office",
created_at: new Date(),
updated_at: new Date(),
namespace: "collaborator",
},
{
name: "POST deeds",
label: "Créer un template de type d'acte",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "PUT deeds",
label: "Modifier un type d'acte",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "DELETE deeds",
label: "Supprimer des types d'actes",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "POST folders",
label: "Créer un dossier",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "PUT folders",
label: "Modifier des dossiers",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "DELETE folders",
label: "Supprimer un dossier vide",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "POST documents",
label: "Demander des documents à un client",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "PUT documents",
label: "Valider des documents",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "DELETE documents",
label: "Supprimer un document demandé",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "POST customers",
label: "Créer des clients",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "PUT customers",
label: "Modifier des clients",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "DELETE customers",
label: "Supprimer un client",
created_at: new Date(),
updated_at: new Date(),
namespace: "super-admin",
},
{
name: "POST anchors",
label: "Ancrer un dossier",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "GET anchors",
label: "Vérifier l'ancrage un dossier",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "POST deed-types",
label: "Création des types d'actes",
created_at: new Date(),
updated_at: new Date(),
namespace: "admin",
},
{
name: "PUT deed-types",
label: "Modification des types d'actes",
created_at: new Date(),
updated_at: new Date(),
namespace: "admin",
},
{
name: "DELETE deed-types",
label: "Suppression des types d'actes",
created_at: new Date(),
updated_at: new Date(),
namespace: "admin",
},
{
name: "POST document-types",
label: "Création des types de documents",
created_at: new Date(),
updated_at: new Date(),
namespace: "admin",
},
{
name: "PUT document-types",
label: "Modification des types de documents",
created_at: new Date(),
updated_at: new Date(),
namespace: "admin",
},
{
name: "DELETE document-types",
label: "Suppression des types de documents",
created_at: new Date(),
updated_at: new Date(),
namespace: "admin",
},
{
name: "POST office-roles",
label: "Création des rôles d'office",
created_at: new Date(),
updated_at: new Date(),
namespace: "admin",
},
{
name: "PUT office-roles",
label: "Modification des rôles d'office",
created_at: new Date(),
updated_at: new Date(),
namespace: "admin",
},
{
name: "DELETE office-roles",
label: "Suppression des rôles d'office",
created_at: new Date(),
updated_at: new Date(),
namespace: "admin",
},
{
name: "PUT users",
label: "Modification des utilisateurs",
created_at: new Date(),
updated_at: new Date(),
namespace: "admin",
},
{
name: "DELETE office-roles",
label: "Suppression des rôles d'office",
created_at: new Date(),
updated_at: new Date(),
namespace: "super-admin",
},
{
name: "PUT offices",
label: "Modification des offices",
created_at: new Date(),
updated_at: new Date(),
namespace: "super-admin",
},
{
name: "PUT rib",
label: "Editer le RIB de l'office",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "GET rib",
label: "Lire le RIB de l'office",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "POST rib",
label: "Déposer le RIB de l'office",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "DELETE rib",
label: "Supprimer le RIB de l'office",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "GET subscriptions",
label: "Récupérer les abonnements",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "POST subscriptions",
label: "Inviter un collaborateur à l'abonnement",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "PUT subscriptions",
label: "Modifier l'abonnement",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "GET stripe",
label: "Gérer l'abonnement de l'office",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
{
name: "POST stripe",
label: "Payer un abonnement",
created_at: new Date(),
updated_at: new Date(),
namespace: "notary",
},
];
const rulesGroups = [
{
name: "Gestion des matrices d'actes et des documents",
created_at: new Date(),
updated_at: new Date(),
rules: [
"POST deeds",
"PUT deeds",
"DELETE deeds",
"GET document-types",
"DELETE deed-types",
"PUT deed-types",
"DELETE document-types",
"GET deed-types",
"POST document-types",
"POST deed-types",
"PUT document-types",
],
},
{
name: "Gestion de l'abonnement",
created_at: new Date(),
updated_at: new Date(),
rules: ["GET subscriptions", "POST subscriptions", "PUT subscriptions", "GET stripe", "POST stripe"],
},
{
name: "Intégration du RIB",
created_at: new Date(),
updated_at: new Date(),
rules: ["PUT rib", "GET rib", "POST rib", "DELETE rib"],
},
];
const collaboratorRules = rules.filter((rule) => rule.namespace === "collaborator");
const notaryRules = [...collaboratorRules, ...rules.filter((rule) => rule.namespace === "notary")];
const adminRules = [...notaryRules, ...rules.filter((rule) => rule.namespace === "admin")];
const superAdminRules = [...adminRules, ...rules.filter((rule) => rule.namespace === "super-admin")];
const roles: Role[] = [
{
name: "super-admin",
label: "Super administrateur",
created_at: new Date(),
updated_at: new Date(),
rules: superAdminRules,
},
{
name: "admin",
label: "Administrateur",
created_at: new Date(),
updated_at: new Date(),
rules: adminRules,
},
{
name: "notary",
label: "Notaire",
created_at: new Date(),
updated_at: new Date(),
rules: [],
},
{
name: "default",
label: "Utilisateur",
created_at: new Date(),
updated_at: new Date(),
rules: [],
},
];
const officeRoles: OfficeRole[] = [
{
name: "Notaire",
created_at: new Date(),
updated_at: new Date(),
office: offices[0]!,
rules: notaryRules,
},
{
name: "Collaborateur",
created_at: new Date(),
updated_at: new Date(),
office: offices[0]!,
rules: notaryRules,
},
];
const users: User[] = [
{
created_at: new Date(),
updated_at: new Date(),
idNot: idNot3,
contact: contacts[1],
office_membership: offices[0],
role: roles[1],
},
{
created_at: new Date(),
updated_at: new Date(),
idNot: idNot4,
contact: contacts[2],
office_membership: offices[0],
role: roles[2],
office_role: officeRoles[2],
},
{
created_at: new Date(),
updated_at: new Date(),
idNot: idNot5,
contact: contacts[3],
office_membership: offices[0],
role: roles[1],
office_role: officeRoles[3],
},
{
created_at: new Date(),
updated_at: new Date(),
idNot: idNot6,
contact: contacts[4],
office_membership: offices[0],
role: roles[3],
},
];
const documentTypes: DocumentType[] = [
{
archived_at: null,
name: "Carte Nationale d'Identité recto-verso",
office: offices[0],
private_description: "Document d'identité",
public_description: "Document d'identité",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Contrat de mariage",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Convention de PACS",
office: offices[0],
private_description: " ",
public_description: "Avec précision du régime",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Titre de propriété",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Cahier des charges du lotissement",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Règlement du lotissement",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Cahier de prescriptions architecturales",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Statuts de l'association syndicale libre",
office: offices[0],
private_description: " ",
public_description: "Avec nom et adresse du président",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Etat descriptif de division et règlement de copropriété",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Etat descriptif de division et règlement de copropriété modificatifs",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Carnet d'entretien",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Trois derniers PV D'AG",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Trois derniers relevés de charge",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Bail ou congé délivré",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Certificat d'assainissement",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Facture ou contrat d'electricité",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Facture ou contrat de gaz",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Loi carrez",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Etat parasitaire",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Amiante",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Facture des travaux",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Garanties décénales des entreprises",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "PV de réception des travaux",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Permis de construire et modificatifs",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Déclaration attestation l'achèvement des travaux",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Attestation de non opposition",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Assurance décenale",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Dommage ouvrage",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Dernière facture ramonage",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Liste du mobilier",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "RIB daté et signé",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Extrait KBIS et statuts de la société",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Document arpentage et plan de division",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Accord de prêt",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Offre de prêt",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Attestation dépôt de permis de construire",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Permis de construire",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Extrait acte de décès",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Fiche de renseignements d'états civils",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Donation entre epoux",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Testament",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Liste des banques avce un compte bancaire",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Contrat d'assurance-vie",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Liste des caisses versant une retraite ou une pension",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Dernière déclaration de revenus",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Avis d'imposition (revenus et ISF)",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Avis d'imposition (foncier et habitation)",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Liste des emprunts en cours",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Actes de donation",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Déclarations de dons faites aux impôts",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Actes de succession",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Actes de vente de biens",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Factures de travaux",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Bail de location",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Nom et adresse du Syndic",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Liste des autres biens",
office: offices[0],
private_description: " ",
public_description:
"Exemple: PEE, PER, parts de société, bijoux de valeur et oeuvres d'art, fonds de commerce, fonds artisanal, entreprise commerciale, exploitation agricole...",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Caution, Prestation compensatoire, Pension alimentaire",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Titre de propriété des biens",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Tableaux d'amortissement des prêts immobiliers",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Cartes grises et cotes ARGUS des véhicules",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Etat des avoirs bancaires",
office: offices[0],
private_description: " ",
public_description: "Joints ou individuels au jour de la séparation",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Avoirs mobiliers",
office: offices[0],
private_description: " ",
public_description:
"arrêtés à la date de la séparation (relevés de comptes épargne entreprise, épargne retraite, assurance-vie...)",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Livret de famille",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Dernières régularisations de charges",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Diagnostic de Performance Energétique (DPE)",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Avis d'imposition N-1",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Avis d'imposition N-2",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Contrat de travail",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Trois derniers bulletins de salaire",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Bilan comptable",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Trois dernières quittances de loyers ou attestation d'hébergement",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Taxe foncière",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Justificatif de domicile",
office: offices[0],
private_description: " ",
public_description: " ",
created_at: new Date(),
updated_at: new Date(),
},
{
name: "Autres documents",
archived_at: null,
public_description: "Autres documents",
private_description: "Autres documents",
office: offices[0],
created_at: new Date(),
updated_at: new Date(),
},
];
const deedTypes: DeedType[] = [
{
name: "Promesse de vente",
archived_at: null,
description: "Promesse de vente entre deux partis",
office: offices[0],
created_at: new Date(),
updated_at: new Date(),
document_types: [...documentTypes.slice(0, 31), documentTypes[66]!],
},
{
name: "Acte de vente",
archived_at: null,
description: "Acte de vente",
office: offices[0],
created_at: new Date(),
updated_at: new Date(),
document_types: documentTypes.slice(30, 36),
},
{
name: "Acte de succession",
archived_at: null,
description: "Acte de succession",
office: offices[0],
created_at: new Date(),
updated_at: new Date(),
document_types: [...documentTypes.slice(36, 56), documentTypes[62]!, documentTypes[30]!],
},
{
name: "Acte de divorce",
archived_at: null,
description: "Acte de divorce",
office: offices[0],
created_at: new Date(),
updated_at: new Date(),
document_types: [...documentTypes.slice(57, 62), documentTypes[30]!, documentTypes[0]!],
},
{
name: "Acte de donation",
archived_at: null,
description: "Acte de donation",
office: offices[0],
created_at: new Date(),
updated_at: new Date(),
document_types: [documentTypes[0]!, documentTypes[62]!, documentTypes[57]!],
},
{
name: "Bail d'habitation",
archived_at: null,
description: "Bail d'habitation",
office: offices[0],
created_at: new Date(),
updated_at: new Date(),
document_types: [documentTypes[0]!, documentTypes[30]!, documentTypes[57]!, ...documentTypes.slice(62)],
},
];
const deeds: Deed[] = [
{
deed_type: deedTypes[0],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[0],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[0],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[0],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[0],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[0],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[0],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[1],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[1],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[1],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[1],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[1],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[1],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[1],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[2],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[2],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[2],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[2],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[2],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[2],
created_at: new Date(),
updated_at: new Date(),
},
{
deed_type: deedTypes[2],
created_at: new Date(),
updated_at: new Date(),
},
];
const officeFolders: OfficeFolder[] = [
{
folder_number: "0001",
name: "Vente par Mme. Simon au profit de Mme. Lextrait",
deed: deeds[0],
status: EFolderStatus.LIVE,
created_at: new Date(),
updated_at: new Date(),
office: offices[0],
description: null,
archived_description: null,
},
{
folder_number: "0002",
name: "Donation des parts sociales de la société SARL FLORE",
deed: deeds[1],
status: EFolderStatus.LIVE,
created_at: new Date(),
updated_at: new Date(),
office: offices[0],
description: null,
archived_description: null,
},
{
folder_number: "0003",
name: "Vente par Mme. Lefebvre au profit de Mme. Mathieu",
deed: deeds[2],
status: EFolderStatus.LIVE,
created_at: new Date(),
updated_at: new Date(),
office: offices[0],
description: null,
archived_description: null,
},
{
folder_number: "0004",
name: "Vente par Mme. Chevalier au profit de M. Daveau",
deed: deeds[3],
status: EFolderStatus.LIVE,
created_at: new Date(),
updated_at: new Date(),
office: offices[0],
description: null,
archived_description: null,
},
{
folder_number: "0005",
name: "Vente par M. Lalo au profit de Mme. Pigale",
deed: deeds[4],
status: EFolderStatus.LIVE,
created_at: new Date(),
updated_at: new Date(),
office: offices[0],
description: null,
archived_description: null,
},
{
folder_number: "0006",
name: "Donation des parts sociales de la société SMART-TALENT",
deed: deeds[5],
status: EFolderStatus.LIVE,
created_at: new Date(),
updated_at: new Date(),
office: offices[0],
description: null,
archived_description: null,
},
{
folder_number: "0007",
name: "Vente par M. Girard au profit de M. Louis",
deed: deeds[6],
status: EFolderStatus.LIVE,
created_at: new Date(),
updated_at: new Date(),
office: offices[0],
description: null,
archived_description: null,
},
{
folder_number: "0008",
name: "Vente par Mme. Leclerc au profit de M. Louis",
deed: deeds[7],
status: EFolderStatus.LIVE,
created_at: new Date(),
updated_at: new Date(),
office: offices[0],
description: null,
archived_description: null,
},
{
folder_number: "0009",
name: "Vente par M. Lambert au profit de M. Holmes",
deed: deeds[8],
status: EFolderStatus.LIVE,
created_at: new Date(),
updated_at: new Date(),
office: offices[0],
description: null,
archived_description: null,
},
];
for (const office of offices) {
const officeCreated = await prisma.offices.create({
data: {
idNot: office.idNot!,
name: office.name,
crpcen: office.crpcen,
address: {
create: {
address: office.address!.address,
zip_code: office.address!.zip_code,
city: office.address!.city,
},
},
office_status: EOfficeStatus.ACTIVATED,
},
});
office.uid = officeCreated.uid;
}
for (const rule of rules) {
const ruleCreated = await prisma.rules.create({
data: {
name: rule.name,
label: rule.label,
namespace: rule.namespace,
},
});
rule.uid = ruleCreated.uid;
}
for (const role of roles) {
const roleCreated = await prisma.roles.create({
data: {
name: role.name,
label: role.label,
rules: {
connect: role.rules?.map((rule) => ({
uid: rule.uid!,
})),
},
},
});
role.uid = roleCreated.uid;
}
for (const ruleGroup of rulesGroups) {
await prisma.rulesGroups.create({
data: {
name: ruleGroup.name,
rules: {
connect: ruleGroup.rules?.map((rule) => ({
uid: rules.find((r) => r.name === rule)!.uid!,
})),
},
},
});
}
for (const officeRole of officeRoles) {
const officeRoleCreated = await prisma.officeRoles.create({
data: {
name: officeRole.name,
office: {
connect: {
uid: officeRole.office.uid,
},
},
rules: {
connect: officeRole.rules?.map((rule) => ({
uid: rule.uid!,
})),
},
},
});
officeRole.uid = officeRoleCreated.uid;
}
for (const user of users) {
const createArgs: Prisma.UsersCreateArgs = {
data: {
idNot: user.idNot,
office_membership: {
connectOrCreate: {
where: {
idNot: user.office_membership!.idNot,
},
create: {
idNot: user.office_membership!.idNot!,
name: user.office_membership!.name,
crpcen: user.office_membership!.crpcen,
address: {
create: {
address: user.office_membership!.address!.address,
zip_code: user.office_membership!.address!.zip_code,
city: user.office_membership!.address!.city,
},
},
},
},
},
contact: {
create: {
first_name: user.contact!.first_name,
last_name: user.contact!.last_name,
email: user.contact!.email,
phone_number: user.contact!.phone_number,
cell_phone_number: user.contact!.cell_phone_number,
civility: ECivility[user.contact!.civility as keyof typeof ECivility],
address: {},
},
},
role: {
connect: {
uid: user.role!.uid,
},
},
},
};
if (user.contact!.address) {
createArgs.data.contact!.create!.address!.create = {
address: user.contact!.address.address,
zip_code: user.contact!.address.zip_code,
city: user.contact!.address.city,
};
}
if (user.office_role) {
createArgs.data.office_role = {
connect: {
uid: user.office_role.uid,
},
};
}
const userCreated = await prisma.users.create(createArgs);
user.uid = userCreated.uid;
}
for (const customer of customers) {
const createArgs: Prisma.CustomersCreateArgs = {
data: {
status: ECustomerStatus.PENDING,
contact: {
create: {
first_name: customer.contact!.first_name,
last_name: customer.contact!.last_name,
email: customer.contact!.email,
phone_number: customer.contact!.phone_number,
cell_phone_number: customer.contact!.cell_phone_number,
civility: ECivility[customer.contact!.civility as keyof typeof ECivility],
address: {},
},
},
},
};
if (customer.contact?.address) {
createArgs.data.contact!.create!.address = {
create: {
address: customer.contact?.address?.address,
zip_code: customer.contact?.address?.zip_code,
city: customer.contact?.address?.city,
},
};
}
const customersCreated = await prisma.customers.create(createArgs);
customer.uid = customersCreated.uid;
}
for (const documentType of documentTypes) {
const documentTypeCreated = await prisma.documentTypes.create({
data: {
name: documentType.name,
public_description: documentType.public_description || "",
private_description: documentType.private_description,
office: {
connect: {
uid: documentType.office!.uid,
},
},
},
});
documentType.uid = documentTypeCreated.uid;
}
for (const deedType of deedTypes) {
const createArgs: Prisma.DeedTypesCreateArgs = {
data: {
name: deedType.name,
description: deedType.description || "",
office: {
connect: {
uid: deedType.office!.uid,
},
},
},
};
if (deedType.document_types) {
createArgs.data.document_types = {
connect: deedType.document_types.map((documentType) => ({
uid: documentType.uid,
})),
};
}
const deedTypeCreated = await prisma.deedTypes.create(createArgs);
deedType.uid = deedTypeCreated.uid;
}
for (const deed of deeds) {
const createArgs: Prisma.DeedsCreateArgs = {
data: {
deed_type: {
connect: {
uid: deed.deed_type!.uid,
},
},
},
};
const deedTypeWithDocumentTypes = await prisma.deedTypes.findUniqueOrThrow({
where: {
uid: deed.deed_type!.uid,
},
include: { document_types: true },
});
if (deedTypeWithDocumentTypes.document_types) {
createArgs.data.document_types = {
connect: deedTypeWithDocumentTypes.document_types.map((documentType) => ({
uid: documentType.uid,
})),
};
}
const deedCreated = await prisma.deeds.create(createArgs);
deed.uid = deedCreated.uid;
}
for (const officeFolder of officeFolders) {
const officeFolderCreated = await prisma.officeFolders.create({
data: {
folder_number: officeFolder.folder_number,
name: officeFolder.name,
description: officeFolder.description,
status: EFolderStatus.LIVE,
deed: {
connect: {
uid: officeFolder.deed?.uid,
},
},
office: {
connect: {
uid: officeFolder.office!.uid,
},
},
stakeholders: {
connect: officeFolder.stakeholders?.map((stakeholder) => ({
uid: stakeholder.uid!,
})),
},
},
});
officeFolder.uid = officeFolderCreated.uid;
}
console.log(">MOCK DATA - Seeding completed!");
} catch (error) {
console.error(error);
console.log("Data already seeded, skiping");
}
}
main();