mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-11-28 09:24:24 +01:00
262 lines
15 KiB
Ruby
262 lines
15 KiB
Ruby
# 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')
|