# frozen_string_literal: true require_dependency 'importo/application_controller' module Importo class ImportsController < ApplicationController def new @import = Import.new(kind: params[:kind], locale: I18n.locale) end def create unless import_params @import = Import.new(kind: params[:kind], locale: I18n.locale) Signum.error(Current.user, text: t('.flash.no_file')) render :new return end @import = Import.new(import_params.merge(locale: I18n.locale, importo_ownable: Importo.config.current_import_owner.call)) if @import.valid? && @import.schedule! redirect_to importo.new_import_path(params[:kind] || @import.kind) else Signum.error(Current.user, text: t('.flash.error', error: @import.errors&.full_messages&.join('.'))) render :new end end def undo @import = Import.where(importo_ownable: Importo.config.current_import_owner.call).find(params[:id]) if @import.can_revert? && @import.revert redirect_to action: :index, notice: 'Import reverted' else redirect_to action: :index, alert: 'Import could not be reverted' end end def destroy @import = Import.find(params[:id]) redirect_to(action: :index, alert: 'Not allowed') && return unless Importo.config.admin_can_destroy.call(@import) @import.destroy redirect_to action: :index end def sample import = Import.new(kind: params[:kind], locale: I18n.locale) send_data import.importer.sample_file.read, type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', filename: import.importer.file_name('sample') end def export import = Import.new(kind: params[:kind], locale: I18n.locale) send_data import.importer.export_file.read, type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', filename: import.importer.file_name('export') end def index @imports = Importo.config.admin_visible_imports.call.order(created_at: :desc).limit(50) end private def import_params params.require(:import).permit(:original, :kind, :column_overrides, column_overrides: params.dig(:import, :column_overrides)&.keys) end end end