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

262 lines
15 KiB
Ruby
Raw Normal View History

2022-09-27 11:14:27 +02:00
# 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.
2016-03-23 18:39:41 +01:00
load Rails.root.join('db/seeds/statistics.rb')
load Rails.root.join('db/seeds/notification_types.rb')
2015-05-05 03:10:25 +02:00
2019-03-26 10:06:29 +01:00
if Group.count.zero?
2015-05-05 03:10:25 +02:00
Group.create!([
2019-03-26 10:06:29 +01:00
{ 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' }
])
2015-05-05 03:10:25 +02:00
end
# Create the default admin if none exists yet
2019-03-26 10:06:29 +01:00
if Role.where(name: 'admin').joins(:users).count.zero?
2022-10-26 09:37:31 +02:00
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 })
2019-03-26 10:06:29 +01:00
admin.add_role 'admin'
admin.save!
2015-05-05 03:10:25 +02:00
end
load Rails.root.join('db/seeds/settings.rb')
2019-03-26 10:06:29 +01:00
if Component.count.zero?
2015-05-05 03:10:25 +02:00
Component.create!([
2019-03-26 10:06:29 +01:00
{ 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?
2015-05-05 03:10:25 +02:00
Licence.create!([
2022-09-27 11:14:27 +02:00
{
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.'
}
2019-03-26 10:06:29 +01:00
])
end
if Theme.count.zero?
2015-05-05 03:10:25 +02:00
Theme.create!([
2019-03-26 10:06:29 +01:00
{ name: 'Vie quotidienne' },
{ name: 'Robotique' },
{ name: 'Arduine' },
{ name: 'Capteurs' },
{ name: 'Musique' },
{ name: 'Sport' },
{ name: 'Autre' }
])
2016-03-23 18:39:41 +01:00
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
2019-03-26 10:06:29 +01:00
if Training.count.zero?
2016-03-23 18:39:41 +01:00
Training.create!([
2022-09-27 11:14:27 +02:00
{
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.'
}
2019-03-26 10:06:29 +01:00
])
2016-03-23 18:39:41 +01:00
2023-03-22 16:05:25 +01:00
TrainingsPricing.find_each do |p|
2022-09-27 11:14:27 +02:00
p.update(amount: ((rand * 50) + 5).floor * 100)
2016-03-23 18:39:41 +01:00
end
2015-05-05 03:10:25 +02:00
end
2019-03-26 10:06:29 +01:00
if Machine.count.zero?
2015-05-05 03:10:25 +02:00
Machine.create!([
2022-09-27 11:14:27 +02:00
{
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",
2019-03-26 10:06:29 +01:00
spec: "Largeurs de support acceptées: de 50 mm à 700 mm\r\nVitesse de découpe: 50 cm/sec\r\nRésolution mécanique: " \
2022-09-27 11:14:27 +02:00
"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",
2019-03-26 10:06:29 +01:00
spec: "Surface maximale de travail: 2440x1220x150 (Z) mm\r\nLogiciel utilisé: Partworks 2D & 3D\r\nRésolution " \
2022-09-27 11:14:27 +02:00
"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",
2019-03-26 10:06:29 +01:00
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 " \
2022-09-27 11:14:27 +02:00
"(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'
}
2019-03-26 10:06:29 +01:00
])
2016-03-23 18:39:41 +01:00
2023-03-22 16:05:25 +01:00
Price.find_each do |p|
2022-09-27 11:14:27 +02:00
p.update(amount: ((rand * 50) + 5).floor * 100)
2016-03-23 18:39:41 +01:00
end
2015-05-05 03:10:25 +02:00
end
2019-03-25 17:14:26 +01:00
if Category.count.zero?
Category.create!(
[
{ name: 'Stage' },
{ name: 'Atelier' }
]
)
2016-03-23 18:39:41 +01:00
end
Stylesheet.build_theme!
2020-01-27 17:10:29 +01:00
Stylesheet.build_home!
2016-03-23 18:39:41 +01:00
unless DatabaseProvider.count.positive?
2016-03-23 18:39:41 +01:00
db_provider = DatabaseProvider.new
db_provider.save
unless AuthProvider.find_by(providable_type: DatabaseProvider.name)
provider = AuthProvider.new
provider.name = 'FabManager'
2016-03-23 18:39:41 +01:00
provider.providable = db_provider
provider.status = 'active'
provider.save
2023-03-29 18:01:16 +02:00
require 'provider_config'
ProviderConfig.write_active_provider
2016-03-23 18:39:41 +01:00
end
2015-05-05 03:10:25 +02:00
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')