Some checks failed
		
		
	
	Run unit tests / copyright_notice (pull_request) Successful in 57s
				
			Run unit tests / check-licenses (pull_request) Failing after 2m13s
				
			Run unit tests / rubocop (pull_request) Failing after 3m35s
				
			Run unit tests / unit_tests (pull_request) Failing after 5m6s
				
			Run unit tests / build-static-assets (pull_request) Has been skipped
				
			
		
			
				
	
	
		
			102 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
 | 
						|
 | 
						|
NUMBER_OF_GUESTS = 200
 | 
						|
 | 
						|
ActsAsTenant.without_tenant do
 | 
						|
  GroupAffinity.delete_all
 | 
						|
  Wedding.delete_all
 | 
						|
end
 | 
						|
 | 
						|
wedding = Wedding.create!(slug: :default)
 | 
						|
 | 
						|
ActsAsTenant.with_tenant(wedding) do
 | 
						|
  [
 | 
						|
    { name: 'Photographer', amount: 3000, pricing_type: 'fixed' },
 | 
						|
    { name: 'Country house', amount: 6000, pricing_type: 'fixed' },
 | 
						|
    { name: 'Catering', amount: 200, pricing_type: 'per_person' },
 | 
						|
    { name: 'Flowers', amount: 500, pricing_type: 'fixed' },
 | 
						|
    { name: 'Band', amount: 1000, pricing_type: 'fixed' },
 | 
						|
    { name: 'Wedding planner', amount: 2000, pricing_type: 'fixed' },
 | 
						|
    { name: 'Dress', amount: 1000, pricing_type: 'fixed' },
 | 
						|
    { name: 'Suit', amount: 500, pricing_type: 'fixed' },
 | 
						|
    { name: 'Rings', amount: 1000, pricing_type: 'fixed' },
 | 
						|
    { name: 'Makeup', amount: 200, pricing_type: 'fixed' },
 | 
						|
    { name: 'Hair', amount: 200, pricing_type: 'fixed' },
 | 
						|
    { name: 'Transportation', amount: 3000, pricing_type: 'fixed' },
 | 
						|
    { name: 'Invitations', amount: 200, pricing_type: 'fixed' },
 | 
						|
    { name: 'Cake', amount: 500, pricing_type: 'fixed' }
 | 
						|
  ].then { Expense.insert_all!(it) }
 | 
						|
 | 
						|
  Group.create!(name: "Jim's guests", icon: 'pi pi-heart').tap do |parent|
 | 
						|
    parent.children.create!(name: "Jim's family", icon: 'pi pi-users').tap do |family|
 | 
						|
      family.children.create!(name: "Jim's close family", icon: 'pi pi-home')
 | 
						|
      family.children.create!(name: "Jim's cousins", icon: 'pi pi-home')
 | 
						|
      family.children.create!(name: "Jim's relatives", icon: 'pi pi-home')
 | 
						|
    end
 | 
						|
    parent.children.create!(name: "Jim's friends", icon: 'pi pi-bullseye')
 | 
						|
    parent.children.create!(name: "Jim's work", icon: 'pi pi-desktop').tap do |work|
 | 
						|
      work.children.create!(name: "Jim's besties at work", icon: 'pi pi-briefcase')
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  Group.create!(name: "Pam's guests", icon: 'pi pi-heart-fill').tap do |parent|
 | 
						|
    parent.children.create!(name: "Pam's family", icon: 'pi pi-users').tap do |family|
 | 
						|
      family.children.create!(name: "Pam's close family", icon: 'pi pi-home')
 | 
						|
      family.children.create!(name: "Pam's cousins", icon: 'pi pi-home')
 | 
						|
      family.children.create!(name: "Pam's relatives", icon: 'pi pi-home')
 | 
						|
    end
 | 
						|
    parent.children.create!(name: "Pam's friends", icon: 'pi pi-bullseye')
 | 
						|
    parent.children.create!(name: "Pam's work", icon: 'pi pi-desktop').tap do |work|
 | 
						|
      work.children.create!(name: "Pam's besties at work", icon: 'pi pi-briefcase')
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  Group.create!(name: 'Common guests', icon: 'pi pi-users').tap do |parent|
 | 
						|
    parent.children.create!(name: 'College friends', icon: 'pi pi-calculator')
 | 
						|
    parent.children.create!(name: 'High school friends', icon: 'pi pi-crown')
 | 
						|
    parent.children.create!(name: 'Childhood friends', icon: 'pi pi-envelope')
 | 
						|
  end
 | 
						|
 | 
						|
  groups = Group.all
 | 
						|
 | 
						|
  NUMBER_OF_GUESTS.times.map do |i|
 | 
						|
    {
 | 
						|
      name: Faker::Name.name,
 | 
						|
      phone: Faker::PhoneNumber.cell_phone,
 | 
						|
      group_id: groups.sample.id,
 | 
						|
      status: Guest.statuses.keys.sample,
 | 
						|
    }
 | 
						|
  end.then { Guest.insert_all!(it) }
 | 
						|
 | 
						|
  Group.includes(:guests).each do |group|
 | 
						|
    guests = group.guests.potential.to_a
 | 
						|
 | 
						|
    while guests.any?
 | 
						|
      invitation = Invitation.create!
 | 
						|
 | 
						|
      guests.shift(rand(1..3)).each do |guest|
 | 
						|
        guest.update!(invitation:)
 | 
						|
      end
 | 
						|
      guests.shift(1) if rand < 0.3  # Leave a percentage of guests without an invitation
 | 
						|
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  # TODO: Clean up invitations with no guests
 | 
						|
 | 
						|
  ActiveJob.perform_all_later(3.times.map { TableSimulatorJob.new(wedding.id) })
 | 
						|
 | 
						|
  "red".dup.paint.palette.triad(as: :hex).zip(Group.roots).each { |(color, group)| group.update!(color: color.paint.desaturate(40)) }
 | 
						|
 | 
						|
  Group.roots.each(&:colorize_children)
 | 
						|
 | 
						|
  User.create!(
 | 
						|
    email: 'development@example.com',
 | 
						|
    confirmed_at: Time.zone.now,
 | 
						|
    password: 'supersecretpassword',
 | 
						|
    password_confirmation: 'supersecretpassword'
 | 
						|
  )
 | 
						|
end
 |