# frozen_string_literal: true # This file fills the database with some initial data. # Some of them are just some placeholders to prevent having an empty palce when starting fab-manager first. # Other data are required default values, for various settings. load Rails.root.join('db/seeds/statistics.rb') load Rails.root.join('db/seeds/notification_types.rb') if Group.count.zero? Group.create!([ { name: 'standard, association', slug: 'standard' }, { name: "étudiant, - de 25 ans, enseignant, demandeur d'emploi", slug: 'student' }, { name: 'artisan, commerçant, chercheur, auto-entrepreneur', slug: 'merchant' }, { name: 'PME, PMI, SARL, SA', slug: 'business' } ]) end # Create the default admin if none exists yet if Role.where(name: 'admin').joins(:users).count.zero? admin = User.new(username: 'admin', email: ENV.fetch('ADMIN_EMAIL', nil), password: ENV.fetch('ADMIN_PASSWORD', nil), password_confirmation: Rails.application.secrets.admin_password, group_id: Group.first.id, profile_attributes: { first_name: 'admin', last_name: 'admin', phone: '0123456789' }, statistic_profile_attributes: { gender: true, birthday: Date.current }) admin.add_role 'admin' admin.save! end load Rails.root.join('db/seeds/settings.rb') if Component.count.zero? Component.create!([ { name: 'Silicone' }, { name: 'Vinyle' }, { name: 'Bois Contre plaqué' }, { name: 'Bois Medium' }, { name: 'Plexi / PMMA' }, { name: 'Flex' }, { name: 'Vinyle' }, { name: 'Parafine' }, { name: 'Fibre de verre' }, { name: 'Résine' } ]) end if Licence.count.zero? Licence.create!([ { name: 'Attribution (BY)', description: 'Le titulaire des droits autorise toute exploitation de l’œuvre, y compris à des ' \ 'fins commerciales, ainsi que la création d’œuvres dérivées, dont la distribution est également autorisé sans ' \ 'restriction, à condition de l’attribuer à son l’auteur en citant son nom. Cette licence est recommandée pour la ' \ 'diffusion et l’utilisation maximale des œuvres.' }, { name: 'Attribution + Pas de modification (BY ND)', description: 'Le titulaire des droits autorise toute utilisation de l’œuvre originale (y compris à des fins commerciales), ' \ 'mais n’autorise pas la création d’œuvres dérivées.' }, { name: "Attribution + Pas d'Utilisation Commerciale + Pas de Modification (BY NC ND)", description: 'Le titulaire des droits autorise l’utilisation de l’œuvre originale à des fins non commerciales, ' \ 'mais n’autorise pas la création d’œuvres dérivés.' }, { name: "Attribution + Pas d'Utilisation Commerciale (BY NC)", description: 'Le titulaire des droits autorise l’exploitation de l’œuvre, ainsi que la création d’œuvres dérivées, ' \ 'à condition qu’il ne s’agisse pas d’une utilisation commerciale (les utilisations commerciales ' \ 'restant soumises à son autorisation).' }, { name: "Attribution + Pas d'Utilisation Commerciale + Partage dans les mêmes conditions (BY NC SA)", description: 'Le titulaire des droits autorise l’exploitation de l’œuvre originale à des fins non commerciales, ainsi que la ' \ 'création d’œuvres dérivées, à condition qu’elles soient distribuées sous une licence identique à celle qui ' \ 'régit l’œuvre originale.' }, { name: 'Attribution + Partage dans les mêmes conditions (BY SA)', description: 'Le titulaire des droits autorise toute utilisation de l’œuvre originale (y compris à des fins commerciales) ' \ 'ainsi que la création d’œuvres dérivées, à condition qu’elles soient distribuées sous une licence identique ' \ 'à celle qui régit l’œuvre originale. Cette licence est souvent comparée aux licences « copyleft » des logiciels ' \ 'libres. C’est la licence utilisée par Wikipedia.' } ]) end if Theme.count.zero? Theme.create!([ { name: 'Vie quotidienne' }, { name: 'Robotique' }, { name: 'Arduine' }, { name: 'Capteurs' }, { name: 'Musique' }, { name: 'Sport' }, { name: 'Autre' } ]) end if Status.count.zero? Status.create!([ { name: I18n.t('statuses.new') }, { name: I18n.t('statuses.pending') }, { name: I18n.t('statuses.done') }, { name: I18n.t('statuses.abandoned') } ]) end if Training.count.zero? Training.create!([ { name: 'Formation Imprimante 3D', description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do ' \ 'eiusmod tempor incididunt ut labore et dolore magna aliqua.' }, { name: 'Formation Laser / Vinyle', description: 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris ' \ 'nisi ut aliquip ex ea commodo consequat.' }, { name: 'Formation Petite fraiseuse numerique', description: 'Duis aute irure dolor in reprehenderit in voluptate ' \ 'velit esse cillum dolore eu fugiat nulla pariatur.' }, { name: 'Formation Shopbot Grande Fraiseuse', description: 'Excepteur sint occaecat cupidatat non proident, sunt in ' \ 'culpa qui officia deserunt mollit anim id est laborum.' }, { name: 'Formation logiciel 2D', description: 'Sed ut perspiciatis unde omnis iste natus error sit voluptatem ' \ 'accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis ' \ 'et quasi architecto beatae vitae dicta sunt explicabo.' } ]) TrainingsPricing.find_each do |p| p.update(amount: ((rand * 50) + 5).floor * 100) end end if Machine.count.zero? Machine.create!([ { name: 'Découpeuse laser', description: "Préparation à l'utilisation de l'EPILOG Legend 36EXT\r\nInformations générales \r\n " \ "Pour la découpe, il suffit d'apporter votre fichier vectorisé type illustrator, svg ou dxf avec des " \ "\"lignes de coupe\" d'une épaisseur inférieur à 0,01 mm et la machine s'occupera du reste!\r\n La gravure " \ 'est basée sur le spectre noir et blanc. Les nuances sont obtenues par différentes profondeurs de gravure ' \ "correspondant aux niveaux de gris de votre image. Il suffit pour cela d'apporter une image scannée ou un " \ "fichier photo en noir et blanc pour pouvoir reproduire celle-ci sur votre support! \r\nQuels types de " \ "matériaux pouvons nous graver/découper?\r\n Du bois au tissu, du plexiglass au cuir, cette machine " \ 'permet de découper et graver la plupart des matériaux sauf les métaux. La gravure est néanmoins possible ' \ "sur les métaux recouverts d'une couche de peinture ou les aluminiums anodisés. \r\n " \ "Concernant l'épaisseur des matériaux découpés, il est préférable de ne pas dépasser 5 mm pour le bois " \ "et 6 mm pour le plexiglass.\r\n", spec: "Puissance: 40W\r\nSurface de travail: 914x609 mm \r\n" \ "Epaisseur maximale de la matière: 305mm\r\nSource laser: tube laser type CO2\r\nContrôles de vitesse " \ "et de puissance: ces deux paramètres sont ajustables en fonction du matériau (de 1% à 100%).\r\n", slug: 'decoupeuse-laser' }, { name: 'Découpeuse vinyle', description: "Préparation à l'utilisation de la Roland CAMM-1 GX24\r\nInformations générales \r\n " \ "Envie de réaliser un tee shirt personnalisé ? Un sticker à l'effigie votre groupe préféré ? " \ "Un masque pour la réalisation d'un circuit imprimé? Pour cela, il suffit simplement de venir avec votre " \ "fichier vectorisé (ne pas oublier de vectoriser les textes) type illustrator svg ou dxf.\r\n \r\nMatériaux " \ "utilisés:\r\n Cette machine permet de découper principalement du vinyle,vinyle réfléchissant, flex.\r\n", spec: "Largeurs de support acceptées: de 50 mm à 700 mm\r\nVitesse de découpe: 50 cm/sec\r\nRésolution mécanique: " \ "0,0125 mm/pas\r\n", slug: 'decoupeuse-vinyle' }, { name: 'Shopbot / Grande fraiseuse', description: "La fraiseuse numérique ShopBot PRS standard\r\nInformations " \ "générales\r\nCette machine est un fraiseuse 3 axes idéale pour l'usinage de pièces de grandes dimensions. De la " \ "réalisation d'une chaise ou d'un meuble jusqu'à la construction d'une maison ou d'un assemblage immense, le " \ "ShopBot ouvre de nombreuses portes à votre imagination! \r\nMatériaux usinables\r\nLes principaux matériaux " \ "usinables sont le bois, le plastique, le laiton et bien d'autres.\r\nCette machine n'usine pas les métaux.\r\n", spec: "Surface maximale de travail: 2440x1220x150 (Z) mm\r\nLogiciel utilisé: Partworks 2D & 3D\r\nRésolution " \ "mécanique: 0,015 mm\r\nPrécision de la position: +/- 0,127mm\r\nFormats acceptés: DXF, STL \r\n", slug: 'shopbot-grande-fraiseuse' }, { name: 'Imprimante 3D', description: "L'utimaker est une imprimante 3D low cost utilisant une technologie FFF " \ "(Fused Filament Fabrication) avec extrusion thermoplastique.\r\nC'est une machine idéale pour réaliser " \ "rapidement des prototypes 3D dans des couleurs différentes.\r\n", spec: "Surface maximale de travail: 210x210x220mm \r\n" \ "Résolution méchanique: 0,02 mm \r\nPrécision de position: +/- 0,05 \r\nLogiciel utilisé: Cura\r\nFormats de " \ "fichier acceptés: STL \r\nMatériaux utilisés: PLA (en stock).", slug: 'imprimante-3d' }, { name: 'Petite Fraiseuse', description: "La fraiseuse numérique Roland Modela MDX-20\r\nInformations générales\r\nCette machine est utilisée " \ "pour l'usinage et le scannage 3D de précision. Elle permet principalement d'usiner des circuits imprimés " \ 'et des moules de petite taille. Le faible diamètre des fraises utilisées (Ø 0,3 mm à Ø 6mm) induit que ' \ "certains temps d'usinages peuvent êtres long (> 12h), c'est pourquoi cette fraiseuse peut être laissée en " \ "autonomie toute une nuit afin d'obtenir le plus précis des usinages au FabLab.\r\nMatériaux usinables:" \ "\r\nLes principaux matériaux usinables sont le bois, plâtre, résine, cire usinable, cuivre.\r\n", spec: "Taille du plateau X/Y : 220 mm x 160 mm\r\nVolume maximal de travail: 203,2 mm (X), 152,4 mm (Y), 60,5 mm " \ "(Z)\r\nPrécision usinage: 0,00625 mm\r\nPrécision scannage: réglable de 0,05 à 5 mm (axes X,Y) et 0,025 mm " \ "(axe Z)\r\nVitesse d'analyse (scannage): 4-15 mm/sec\r\n \r\n \r\nLogiciel utilisé pour le fraisage: " \ "Roland Modela player 4 \r\nLogiciel utilisé pour l'usinage de circuits imprimés: Cad.py (linux)\r\n" \ "Formats acceptés: STL,PNG 3D\r\nFormat d'exportation des données scannées: DXF, VRML, STL, 3DMF, IGES, " \ "Grayscale, Point Group et BMP\r\n", slug: 'petite-fraiseuse' } ]) Price.find_each do |p| p.update(amount: ((rand * 50) + 5).floor * 100) end end if Category.count.zero? Category.create!( [ { name: 'Stage' }, { name: 'Atelier' } ] ) end Stylesheet.build_theme! Stylesheet.build_home! unless DatabaseProvider.count.positive? db_provider = DatabaseProvider.new db_provider.save unless AuthProvider.find_by(providable_type: DatabaseProvider.name) provider = AuthProvider.new provider.name = 'FabManager' provider.providable = db_provider provider.status = 'active' provider.save require 'provider_config' ProviderConfig.write_active_provider end end ProfileCustomField.find_or_create_by(label: 'N° SIRET') ProfileCustomField.find_or_create_by(label: 'Code NAF') ProfileCustomField.find_or_create_by(label: 'N° TVA intracommunautaire') ProfileCustomField.find_or_create_by(label: 'N° DUNS')