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();