1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-11-29 10:24:20 +01:00
fab-manager/db/seeds.rb

258 lines
15 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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')
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 lattribuer à son lauteur en citant son nom. Cette licence est recommandée pour la ' \
'diffusion et lutilisation 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 nautorise 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 lutilisation de lœuvre originale à des fins non commerciales, ' \
'mais nautorise pas la création dœuvres dérivés.'
},
{
name: "Attribution + Pas d'Utilisation Commerciale (BY NC)",
description:
'Le titulaire des droits autorise lexploitation de lœuvre, ainsi que la création dœuvres dérivées, ' \
'à condition quil ne sagisse pas dune 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 lexploitation de lœuvre originale à des fins non commerciales, ainsi que la ' \
'création dœuvres dérivées, à condition quelles 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 quelles 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. Cest 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.all.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.all.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
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')