From 3918484a84aac9b7e8f381ea593bc3be12dc906b Mon Sep 17 00:00:00 2001 From: Bilal Date: Thu, 9 Jul 2020 19:54:48 +0200 Subject: [PATCH] TMP commit --- app/jobs/generate_contracts_zip_job.rb | 23 +++++++- app/models/acquired_media_release.rb | 1 + app/models/concerns/csv_exportable.rb | 77 ++++++++++++++++++++++++++ config/locales/en.yml | 3 + config/locales/es.yml | 16 ++++++ 5 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 app/models/concerns/csv_exportable.rb diff --git a/app/jobs/generate_contracts_zip_job.rb b/app/jobs/generate_contracts_zip_job.rb index 865a5ea..66107a3 100644 --- a/app/jobs/generate_contracts_zip_job.rb +++ b/app/jobs/generate_contracts_zip_job.rb @@ -6,8 +6,8 @@ class GenerateContractsZipJob < ApplicationJob before_perform do |job| @project = job.arguments.first @download = job.arguments.second - release_type = job.arguments.third - @folder_name = "#{@project.name.parameterize}_#{get_release_name(release_type).gsub('_', '-')}" + @release_type = job.arguments.third + @folder_name = "#{@project.name.parameterize}_#{get_release_name(@release_type).gsub('_', '-')}" @download.update!(name: @folder_name, status: :pending) end @@ -20,6 +20,10 @@ class GenerateContractsZipJob < ApplicationJob files.each do |attachment| zipfile.add(attachment, File.join("#{dir}/", attachment)) end + + csv_file = generate_csv releases + puts ">>>>> GENERATED =====" + zipfile.get_output_stream("#{@folder_name}.csv") { |f| f.puts(csv_file) } end @download.file.attach(io: File.open(zipfile_name), filename: "#{@folder_name}.zip") @@ -43,6 +47,21 @@ class GenerateContractsZipJob < ApplicationJob private + def generate_csv(releases) + puts "==== 1 =====" + release_class = Object.const_get @release_type + puts "==== 2 =====" + headers = release_class.csv_headers + + CSV.generate(headers: true) do |csv| + csv << headers + releases.each do |release| + csv_row_data = release.to_csv_row + csv << csv_row_data + end + end + end + def get_release_name(release_type) release_type.constantize.model_name.plural end diff --git a/app/models/acquired_media_release.rb b/app/models/acquired_media_release.rb index 6a12d35..46e3881 100644 --- a/app/models/acquired_media_release.rb +++ b/app/models/acquired_media_release.rb @@ -9,6 +9,7 @@ class AcquiredMediaRelease < ApplicationRecord include Signable include Syncable include PersonName + include CsvExportable has_many :file_infos, as: :releasable, dependent: :destroy diff --git a/app/models/concerns/csv_exportable.rb b/app/models/concerns/csv_exportable.rb new file mode 100644 index 0000000..c8cc664 --- /dev/null +++ b/app/models/concerns/csv_exportable.rb @@ -0,0 +1,77 @@ +# frozen_string_literal: true + +module CsvExportable + extend ActiveSupport::Concern + + COMMON_HEADERS = %i[notes tags signed_at].freeze + COMMON_VALUES = %w[clean_notes clean_tags signed_on].freeze + + ACQUIRED_MEDIA_HEADERS = %i[name file_infos_count].freeze + COMMON_HEADERS + ACQUIRED_MEDIA_VALUES = %w[name file_count].freeze + COMMON_VALUES + + APPEARANCE_HEADERS = %i[name contact_info].freeze + COMMON_HEADERS + APPEARANCE_VALUES = %w[name contact_info].freeze + COMMON_VALUES + + HEADERS = { + acquired_media_release: ACQUIRED_MEDIA_HEADERS, + appearance_release: APPEARANCE_HEADERS + }.freeze + + VALUES = { + acquired_media_release: ACQUIRED_MEDIA_VALUES, + appearance_release: APPEARANCE_VALUES + }.freeze + + included do + class << self + def csv_headers + puts "HEADERS ====" + plural_class_name = self.name.underscore.pluralize + headers = HEADERS[self.name.underscore.to_sym] + + headers.map do |header| + I18n.t("#{plural_class_name}.index.table_headers.#{header}") + end + end + end + + def to_csv_row + puts "==== = CSV ROW" + v = VALUES[self.class.name.underscore.to_sym].map do |function| + send(function) + end + puts v + v + end + + private + + def file_count + self.file_infos.any? ? self.file_infos.size : I18n.t('acquired_media_releases.acquired_media_release.no_media') + end + + def contact_info + contact_info = '' + contact_info += "#{person_address}; " if person_address.present? + contact_info += "#{person_phone}; " if person_phone.present? + contact_info += "#{person_email}" if person_email.present? + contact_info.delete_suffix '; ' + end + + def clean_notes + notes = '' + self.notes.order_by_recent.each do |note| + notes += "#{note.content}(#{note.email}), " + end + notes.delete_suffix ', ' + end + + def clean_tags + tags = '' + self.tags.each do |tag| + tags += "#{tag.name}, " + end + tags.delete_suffix ', ' + end + end +end diff --git a/config/locales/en.yml b/config/locales/en.yml index 4fd633d..235da08 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -49,6 +49,7 @@ en: search: Search empty: Acquired Media Releases will appear here table_headers: + name: Name file_infos_count: No. Files notes: Notes signed_at: Date Signed @@ -151,6 +152,8 @@ en: empty: Appearance Releases will appear here imported_appearance_release_missing_attachment: Person photo or contract missing for imported appearance release table_headers: + name: Name + contact_info: Contact info notes: Notes signed_at: Date Signed tags: Tags diff --git a/config/locales/es.yml b/config/locales/es.yml index 10d3be8..f707cbd 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -41,6 +41,12 @@ es: heading: Person Photo (ES) index: imported_appearance_release_missing_attachment: Person photo or contract missing for imported appearance release (ES) + table_headers: + name: "" + contact_info: "" + tags: "" + notes: "" + signed_at: "" shared: imported_appearance_release_contract_name: Contrato Importado imported_appearance_release_headshot_name: Retrato Importado @@ -464,3 +470,13 @@ es: production_elements_logs: Production Elements Logs, and more (ES) reduces_labor_cost: Reduces labor costs (ES) simplifies_cue_sheets: Simplifies Music Cue Sheets, Graphic Cue Sheets (ES) + acquired_media_releases: + index: + table_headers: + name: Name (ES) + file_infos_count: No. Files (ES) + notes: Notes (ES) + signed_at: Date Signed (ES) + tags: Tags (ES) + acquired_media_release: + no_media: No Media (ES)