Fix contact history csv

This commit is contained in:
dinsmol 2022-01-25 01:08:01 +03:00 committed by olegphenomenon
parent a9b942dac0
commit 578b75da20
3 changed files with 50 additions and 11 deletions

View file

@ -1,9 +1,13 @@
module Admin module Admin
class ContactVersionsController < BaseController class ContactVersionsController < BaseController
include ApplicationHelper
include ObjectVersionsHelper include ObjectVersionsHelper
load_and_authorize_resource class: Version::ContactVersion load_and_authorize_resource class: Version::ContactVersion
MODEL = Contact
CSV_HEADER = ['Name', 'ID', 'Ident', 'Registrar', 'Action', 'Created at'].freeze
def index def index
params[:q] ||= {} params[:q] ||= {}
@ -56,5 +60,19 @@ module Admin
def create_where_string(key, value) def create_where_string(key, value)
" AND object->>'#{key}' ~* '#{value}'" " AND object->>'#{key}' ~* '#{value}'"
end end
private
def render_by_format(page, filename)
respond_to do |format|
format.html { render page }
format.csv do
raw_csv = csv_generate(MODEL, CSV_HEADER)
send_data raw_csv,
filename: "#{filename}_#{Time.zone.now.to_formatted_s(:number)}.csv",
type: "#{Mime[:csv]}; charset=utf-8"
end
end
end
end end
end end

View file

@ -4,6 +4,9 @@ module Admin
load_and_authorize_resource class: Version::DomainVersion load_and_authorize_resource class: Version::DomainVersion
MODEL = Domain
CSV_HEADER = ['Name', 'Registrant', 'Registrar', 'Action', 'Created at'].freeze
def index def index
params[:q] ||= {} params[:q] ||= {}
@ -93,7 +96,7 @@ module Admin
respond_to do |format| respond_to do |format|
format.html { render page } format.html { render page }
format.csv do format.csv do
raw_csv = csv_generate raw_csv = csv_generate(MODEL, CSV_HEADER)
send_data raw_csv, send_data raw_csv,
filename: "#{filename}_#{Time.zone.now.to_formatted_s(:number)}.csv", filename: "#{filename}_#{Time.zone.now.to_formatted_s(:number)}.csv",
type: "#{Mime[:csv]}; charset=utf-8" type: "#{Mime[:csv]}; charset=utf-8"

View file

@ -13,15 +13,15 @@ module ObjectVersionsHelper
version.object.to_h.select { |key, _value| field_names.include?(key) } version.object.to_h.select { |key, _value| field_names.include?(key) }
end end
def csv_generate def csv_generate(model, header)
CSV.generate do |csv| CSV.generate do |csv|
csv << CSV_HEADER csv << header
@versions.each do |version| @versions.each do |version|
attributes = only_present_fields(version, Domain) attributes = only_present_fields(version, model)
domain = Domain.new(attributes) history_object = model.new(attributes)
attach_existing_fields(version, domain) unless version.event == 'destroy' attach_existing_fields(version, history_object) unless version.event == 'destroy'
csv << create_row(domain, version) csv << create_row(history_object, version)
end end
end end
end end
@ -46,10 +46,28 @@ module ObjectVersionsHelper
end end
end end
def create_row(domain, version) def create_row(history_object, version)
name = domain.name if history_object.is_a?(Domain)
registrant = registrant_name(domain, version) domain_history_row(history_object, version)
registrar = domain.registrar else
contact_history_row(history_object, version)
end
end
def contact_history_row(history_object, version)
name = history_object.name
code = history_object.code
ident = ident_for(history_object)
registrar = history_object.registrar
event = version.event
created_at = version.created_at.to_formatted_s(:db)
[name, code, ident, registrar, event, created_at]
end
def domain_history_row(history_object, version)
name = history_object.name
registrant = registrant_name(history_object, version)
registrar = history_object.registrar
event = version.event event = version.event
created_at = version.created_at.to_formatted_s(:db) created_at = version.created_at.to_formatted_s(:db)
[name, registrant, registrar, event, created_at] [name, registrant, registrar, event, created_at]