tallty_import_export 1.0.23 → 1.0.28

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7f43fcc903c964ff3a19c273f812535777d8606ff24627f1e3e465431a8be327
4
- data.tar.gz: a78bfa23bd82f2eb659218bff7b68c477a83bc6d6a9f9cab5e2a34a7f97009e9
3
+ metadata.gz: 7d689c40b8f11354501a465563d14f5ab1060137fb2221180db05c8a18fe2b0d
4
+ data.tar.gz: 9cbd15c9a1eae1a0e036dd4557fb5197e3f595067b035dd01119167becee6d3c
5
5
  SHA512:
6
- metadata.gz: 868e1e722f37534dda11149447ec31215004d5150083edea5c577b2f73679983b1c202f10b4f87e81db22f835fb49a980ee56112db074421b8f1a1a289a31214
7
- data.tar.gz: 18e14d3e9c139aef84df4b9b1d988f49a64114220ba6aee4b9e5028a0e042fd328247fd82bdc7c2125f338b55f05f1db817572f91035e9759354c14d490a64f6
6
+ metadata.gz: a11b8561c856588abf871fe6cac330e3a9412e468c6ff2d3480be75b8976b22a7037a655c51df7c884a367d9efa7c8b362c1c46ca3a1e5824f8777ccf0bb1204
7
+ data.tar.gz: d178c5d5ae84107a04862e7b5b929ba8546776b1400ed79bde6c518f656d6ac7c573bfaaad3d60b499ec18d1cf9df3a09962d0669c251acbc24f905939ab884e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tallty_import_export (1.0.22)
4
+ tallty_import_export (1.0.24)
5
5
  activesupport
6
6
  caxlsx
7
7
  redis
@@ -22,7 +22,7 @@ GEM
22
22
  minitest (>= 5.1)
23
23
  tzinfo (~> 2.0)
24
24
  zeitwerk (~> 2.3)
25
- caxlsx (3.1.0)
25
+ caxlsx (3.1.1)
26
26
  htmlentities (~> 4.3, >= 4.3.4)
27
27
  marcel (~> 1.0)
28
28
  nokogiri (~> 1.10, >= 1.10.4)
@@ -32,7 +32,7 @@ GEM
32
32
  htmlentities (4.3.4)
33
33
  i18n (1.8.10)
34
34
  concurrent-ruby (~> 1.0)
35
- marcel (1.0.1)
35
+ marcel (1.0.2)
36
36
  mini_portile2 (2.6.1)
37
37
  minitest (5.14.4)
38
38
  nokogiri (1.12.4)
@@ -65,7 +65,7 @@ GEM
65
65
  rspec-support (3.10.0)
66
66
  ruby-ole (1.2.12.2)
67
67
  rubyzip (2.3.2)
68
- spreadsheet (1.2.9)
68
+ spreadsheet (1.3.0)
69
69
  ruby-ole
70
70
  tallty_duck_record (1.1.3)
71
71
  activemodel (>= 5.0)
@@ -15,7 +15,7 @@ module TalltyImportExport
15
15
  # { key: 'user_code', name: '考核人工号' },
16
16
  # { key: 'user_department_name', name: '考核人部门' },
17
17
  # { key: 'state', name: '考核状态', method: :state_zh },
18
- # { key: 'score', name: '考核分' },
18
+ # { key: 'score', name: '考核分', source: true },
19
19
  # ]
20
20
  # export_headers_result / headers
21
21
  # key: 属性的英文名,可以支持user.name这样的方式
@@ -28,6 +28,7 @@ module TalltyImportExport
28
28
  # merge: true/false,默认false,某一列,如果上下行的内容相同,则直接合并单元格
29
29
  # json: model_payload,代表存储在某一个列中
30
30
  # select: [{ label: '已报备', value: 'submitted'}, ...],需要转换的枚举类型
31
+ # source: true,如果source为true,代表从association_record 进行属性查询
31
32
 
32
33
  def export_xlsx records, **options
33
34
  records = with_scope records
@@ -65,7 +66,7 @@ module TalltyImportExport
65
66
  end
66
67
  end
67
68
 
68
- def export_workbook workbook, records
69
+ def export_workbook workbook, association_records
69
70
  # excel导出样式
70
71
  alignment = { vertical: :center, horizontal: :center }
71
72
  border = { color: '969696', style: :thin }
@@ -80,34 +81,44 @@ module TalltyImportExport
80
81
  if respond_to?(:first_header)
81
82
  row_index = Axlsx.col_ref(headers.size - 1)
82
83
  sheet.merge_cells("A1:#{row_index}1")
83
- sheet.add_row [first_header], style: title1, height: 40
84
+ sheet.add_row [first_header], style: title1, height: 30
84
85
  end
85
86
 
86
- sheet.add_row headers.map{|header| header[:name]}, style: title2, height: 39
87
+ sheet.add_row headers.map{|header| header[:name]}, style: title2, height: 25
87
88
 
88
89
  last_row = nil
89
90
  merge_column_hash = {}
90
91
  first_content_row_index = respond_to?(:first_header) ? 2 : 1
91
92
 
92
- each_method = records.is_a?(Array) ? :each : :each
93
- records.send(each_method).with_index do |record, index|
93
+ index = 0
94
+ association_records.each do |association_record|
94
95
  row = []
95
- headers.each_with_index do |header, col_index|
96
- _data = handle_data(record, header, index)
97
- if header[:merge].present? && last_row.present? && _data == last_row[col_index]
98
- # 这里使用二维数组,每个数组里都是列内容相同的各行
99
- merge_column_hash[col_index] ||= []
100
- if merge_column_hash[col_index].last&.last == index + first_content_row_index - 1
101
- # 说明内容和上面的是延续的,继续加入之前的数组
102
- merge_column_hash[col_index].last << index + first_content_row_index
103
- else
104
- merge_column_hash[col_index] << [index + first_content_row_index - 1, index + first_content_row_index]
96
+ records = @each_method.present? ?
97
+ (try_method(association_record, @each_method) || [nil]) :
98
+ [association_record]
99
+
100
+ records.each do |record|
101
+ headers.each_with_index do |header, col_index|
102
+ index += 1
103
+ _data = header[:source] ?
104
+ handle_data(association_record, header, index) :
105
+ handle_data(record, header, index)
106
+
107
+ if header[:merge].present? && last_row.present? && _data == last_row[col_index]
108
+ # 这里使用二维数组,每个数组里都是列内容相同的各行
109
+ merge_column_hash[col_index] ||= []
110
+ if merge_column_hash[col_index].last&.last == index + first_content_row_index - 1
111
+ # 说明内容和上面的是延续的,继续加入之前的数组
112
+ merge_column_hash[col_index].last << index + first_content_row_index
113
+ else
114
+ merge_column_hash[col_index] << [index + first_content_row_index - 1, index + first_content_row_index]
115
+ end
105
116
  end
117
+ row.push(_data)
106
118
  end
107
- row.push(_data)
119
+ sheet.add_row row, style: title3, height: @row_height, types: headers.map{|header| header[:format]&.to_sym}
120
+ last_row = row
108
121
  end
109
- sheet.add_row row, style: title3, height: @row_height, types: headers.map{|header| header[:format]&.to_sym}
110
- last_row = row
111
122
  end
112
123
  # 需要根据column进行多行的内容合并
113
124
  if merge_column_hash.present?
@@ -123,15 +134,21 @@ module TalltyImportExport
123
134
  end
124
135
  end
125
136
 
137
+ # 地处整体配置信息
138
+ def export_options
139
+ {}
140
+ end
141
+
126
142
  def process_options options = {}
127
- options = options.with_indifferent_access
143
+ options = export_options.merge(options).with_indifferent_access
128
144
 
129
- @row_height ||= options.delete(:row_height) || 35
145
+ @row_height ||= options.delete(:row_height) || 25
130
146
  @width ||= (options.delete(:width) || 20).to_f
131
147
  @filename ||= options.delete(:filename)
132
148
  @group_by ||= options.delete(:group_by)
133
149
  @group_where = "#{@group_by}_eq" if @group_by.present?
134
150
  @headers ||= options.delete(:headers)
151
+ @each_method ||= options.delete(:each_method)
135
152
  end
136
153
 
137
154
  def with_scope records
@@ -51,7 +51,7 @@ module TalltyImportExport
51
51
  end
52
52
 
53
53
  def process_options options
54
- options = options.with_indifferent_access
54
+ options = import_options.merge(options).with_indifferent_access
55
55
  @headers = options.delete(:headers) || import_headers
56
56
  @primary_keys = options.delete(:primary_keys) || @headers.map { |header| header[:primary_key] ? header[:key].to_sym : nil }.compact
57
57
  @params = options
@@ -107,6 +107,10 @@ module TalltyImportExport
107
107
  @headers ||= import_headers&.with_indifferent_access
108
108
  end
109
109
 
110
+ def import_options
111
+ {}
112
+ end
113
+
110
114
  def import_headers **args
111
115
  @headers || klass.try(:headers) || klass.try(:model_headers) || (raise ArgumentError.new('missing import_headers'))
112
116
  end
@@ -1,3 +1,3 @@
1
1
  module TalltyImportExport
2
- VERSION = "1.0.23"
2
+ VERSION = "1.0.28"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tallty_import_export
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.23
4
+ version: 1.0.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - liyijie
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-20 00:00:00.000000000 Z
11
+ date: 2021-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: zip-zip