mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2025-01-17 06:52:27 +01:00
export machines availabilities
This commit is contained in:
parent
daefe626db
commit
4d09ed37a3
65
app/services/availabilities_export_service.rb
Normal file
65
app/services/availabilities_export_service.rb
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
require 'abstract_controller'
|
||||||
|
require 'action_controller'
|
||||||
|
require 'action_view'
|
||||||
|
require 'active_record'
|
||||||
|
|
||||||
|
# require any helpers
|
||||||
|
require './app/helpers/application_helper'
|
||||||
|
|
||||||
|
class UsersExportService
|
||||||
|
|
||||||
|
# export subscriptions
|
||||||
|
def export_subscriptions(export)
|
||||||
|
@subscriptions = Subscription.all.includes(:plan, :user => [:profile])
|
||||||
|
|
||||||
|
ActionController::Base.prepend_view_path './app/views/'
|
||||||
|
# place data in view_assigns
|
||||||
|
view_assigns = {subscriptions: @subscriptions}
|
||||||
|
av = ActionView::Base.new(ActionController::Base.view_paths, view_assigns)
|
||||||
|
av.class_eval do
|
||||||
|
# include any needed helpers (for the view)
|
||||||
|
include ApplicationHelper
|
||||||
|
end
|
||||||
|
|
||||||
|
content = av.render template: 'exports/users_subscriptions.xlsx.axlsx'
|
||||||
|
# write content to file
|
||||||
|
File.open(export.file,"w+b") {|f| f.puts content }
|
||||||
|
end
|
||||||
|
|
||||||
|
# export reservations
|
||||||
|
def export_reservations(export)
|
||||||
|
@reservations = Reservation.all.includes(:slots, :reservable, :user => [:profile])
|
||||||
|
|
||||||
|
ActionController::Base.prepend_view_path './app/views/'
|
||||||
|
# place data in view_assigns
|
||||||
|
view_assigns = {reservations: @reservations}
|
||||||
|
av = ActionView::Base.new(ActionController::Base.view_paths, view_assigns)
|
||||||
|
av.class_eval do
|
||||||
|
# include any needed helpers (for the view)
|
||||||
|
include ApplicationHelper
|
||||||
|
end
|
||||||
|
|
||||||
|
content = av.render template: 'exports/users_reservations.xlsx.axlsx'
|
||||||
|
# write content to file
|
||||||
|
File.open(export.file,"w+b") {|f| f.puts content }
|
||||||
|
end
|
||||||
|
|
||||||
|
# export members
|
||||||
|
def export_members(export)
|
||||||
|
@members = User.with_role(:member).includes(:group, :trainings, :tags, :invoices, :projects, :subscriptions => [:plan], :profile => [:address, :organization => [:address]])
|
||||||
|
|
||||||
|
ActionController::Base.prepend_view_path './app/views/'
|
||||||
|
# place data in view_assigns
|
||||||
|
view_assigns = {members: @members}
|
||||||
|
av = ActionView::Base.new(ActionController::Base.view_paths, view_assigns)
|
||||||
|
av.class_eval do
|
||||||
|
# include any needed helpers (for the view)
|
||||||
|
include ApplicationHelper
|
||||||
|
end
|
||||||
|
|
||||||
|
content = av.render template: 'exports/users_members.xlsx.axlsx'
|
||||||
|
# write content to file
|
||||||
|
File.open(export.file,"w+b") {|f| f.puts content }
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
33
app/views/exports/availabilities_index.xlsx.axlsx
Normal file
33
app/views/exports/availabilities_index.xlsx.axlsx
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
wb = xlsx_package.workbook
|
||||||
|
|
||||||
|
header = wb.styles.add_style :b => true, :bg_color => Stylesheet.primary.upcase.gsub('#', 'FF'), :fg_color => 'FFFFFFFF'
|
||||||
|
date = wb.styles.add_style :format_code => Rails.application.secrets.excel_date_format
|
||||||
|
|
||||||
|
wb.add_worksheet(name: t('export_subscriptions.subscriptions')) do |sheet|
|
||||||
|
|
||||||
|
## data table
|
||||||
|
# heading labels
|
||||||
|
columns = [t('export_subscriptions.id'), t('export_subscriptions.customer'), t('export_subscriptions.email'),
|
||||||
|
t('export_subscriptions.subscription'), t('export_subscriptions.period'), t('export_subscriptions.start_date'),
|
||||||
|
t('export_subscriptions.expiration_date'), t('export_subscriptions.amount'), t('export_subscriptions.payment_method')]
|
||||||
|
sheet.add_row columns, :style => header
|
||||||
|
|
||||||
|
# data rows
|
||||||
|
@subscriptions.each do |sub|
|
||||||
|
data = [
|
||||||
|
sub.user.id,
|
||||||
|
sub.user.profile.full_name,
|
||||||
|
sub.user.email,
|
||||||
|
sub.plan.human_readable_name(group: true),
|
||||||
|
t("duration.#{sub.plan.interval}", count: sub.plan.interval_count),
|
||||||
|
sub.created_at.to_date,
|
||||||
|
sub.expired_at.to_date,
|
||||||
|
number_to_currency(sub.plan.amount / 100),
|
||||||
|
(sub.stp_subscription_id.nil?)? t('export_subscriptions.local_payment') : t('export_subscriptions.online_payment')
|
||||||
|
]
|
||||||
|
styles = [nil, nil, nil, nil, nil, date, date, nil, nil]
|
||||||
|
types = [:integer, :string, :string, :string, :string, :date, :date, :string, :string]
|
||||||
|
|
||||||
|
sheet.add_row data, :style => styles, :types => types
|
||||||
|
end
|
||||||
|
end
|
27
app/workers/availabilities_export_worker.rb
Normal file
27
app/workers/availabilities_export_worker.rb
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
class UsersExportWorker
|
||||||
|
include Sidekiq::Worker
|
||||||
|
|
||||||
|
def perform(export_id)
|
||||||
|
export = Export.find(export_id)
|
||||||
|
|
||||||
|
unless export.user.is_admin?
|
||||||
|
raise SecurityError, 'Not allowed to export'
|
||||||
|
end
|
||||||
|
|
||||||
|
unless export.category == 'users'
|
||||||
|
raise KeyError, 'Wrong worker called'
|
||||||
|
end
|
||||||
|
|
||||||
|
service = UsersExportService.new
|
||||||
|
method_name = "export_#{export.export_type}"
|
||||||
|
|
||||||
|
if %w(members subscriptions reservations).include?(export.export_type) and service.respond_to?(method_name)
|
||||||
|
service.public_send(method_name, export)
|
||||||
|
|
||||||
|
NotificationCenter.call type: :notify_admin_export_complete,
|
||||||
|
receiver: export.user,
|
||||||
|
attached_object: export
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user