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
|
|
|
|
|
2023-02-09 11:52:13 +01:00
|
|
|
|
load Rails.root.join('db/seeds/statistics.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
|
|
|
|
|
|
2017-06-14 17:28:36 +02:00
|
|
|
|
# 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),
|
2022-10-24 17:39:16 +02:00
|
|
|
|
password_confirmation: Rails.application.secrets.admin_password, group_id: Group.first.id,
|
2019-06-04 13:33:00 +02:00
|
|
|
|
profile_attributes: { first_name: 'admin', last_name: 'admin', phone: '0123456789' },
|
2022-05-04 08:50:10 +02:00
|
|
|
|
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
|
|
|
|
|
|
2023-02-09 11:52:13 +01:00
|
|
|
|
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 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.'
|
|
|
|
|
}
|
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
|
|
|
|
|
|
2023-01-19 10:29:23 +01:00
|
|
|
|
if Status.count.zero?
|
|
|
|
|
Status.create!([
|
2023-01-20 17:26:11 +01:00
|
|
|
|
{ name: I18n.t('statuses.new') },
|
|
|
|
|
{ name: I18n.t('statuses.pending') },
|
|
|
|
|
{ name: I18n.t('statuses.done') },
|
|
|
|
|
{ name: I18n.t('statuses.abandoned') }
|
2023-01-19 10:29:23 +01:00
|
|
|
|
])
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
TrainingsPricing.all.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
|
|
|
|
|
|
|
|
|
Price.all.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
|
|
|
|
|
|
2020-05-04 12:08:43 +02:00
|
|
|
|
Stylesheet.build_theme!
|
2020-01-27 17:10:29 +01:00
|
|
|
|
Stylesheet.build_home!
|
2016-03-23 18:39:41 +01:00
|
|
|
|
|
2019-10-09 14:41:32 +02: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
|
2019-10-09 14:41:32 +02:00
|
|
|
|
provider.name = 'FabManager'
|
2016-03-23 18:39:41 +01:00
|
|
|
|
provider.providable = db_provider
|
|
|
|
|
provider.status = 'active'
|
|
|
|
|
provider.save
|
|
|
|
|
end
|
2015-05-05 03:10:25 +02:00
|
|
|
|
end
|
2016-08-17 12:49:52 +02:00
|
|
|
|
|
2022-03-18 19:44:30 +01:00
|
|
|
|
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')
|