Class: OrderPdf
Constant Summary
Constants inherited
from RenderPdf
RenderPdf::BOTTOM_MARGIN, RenderPdf::DEFAULT_FONT, RenderPdf::FOOTER_FONT_SIZE, RenderPdf::FOOTER_SPACE, RenderPdf::HEADER_FONT_SIZE, RenderPdf::HEADER_SPACE, RenderPdf::TOP_MARGIN
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from RenderPdf
#down_or_page, #font_path, #font_size, #fontsize, #number_to_currency, #pdf_add_page_breaks?, #title, #to_pdf
#base_errors, #bootstrap_flash_patched, #close_button, #expand, #foodcoop_css_path, #foodcoop_css_tag, #format_currency, #format_date, #format_datetime, #format_datetime_timespec, #format_iban, #format_roles, #format_time, #heading_helper, #icon, #items_per_page, #link_to_gmaps, #link_to_top, #pagination_links_remote, #remote_link_to, #show_title?, #show_user, #show_user_link, #sort_link_helper, #tab_is_active?, #title, #truncate, #weekday
Methods included from PathHelper
#finance_group_transactions_path
Constructor Details
#initialize(order, options = {}) ⇒ OrderPdf
Returns a new instance of OrderPdf.
4
5
6
7
8
|
# File 'app/lib/order_pdf.rb', line 4
def initialize(order, options = {})
@order = order
@orders = order
super(options)
end
|
Instance Attribute Details
#order ⇒ Object
Returns the value of attribute order.
2
3
4
|
# File 'app/lib/order_pdf.rb', line 2
def order
@order
end
|
Instance Method Details
#each_group_order_article_for_order_article(order_article, &block) ⇒ Object
131
132
133
|
# File 'app/lib/order_pdf.rb', line 131
def each_group_order_article_for_order_article(order_article, &block)
order_article.group_order_articles.each(&block)
end
|
#each_group_order_article_for_ordergroup(ordergroup, &block) ⇒ Object
135
136
137
138
139
140
141
|
# File 'app/lib/order_pdf.rb', line 135
def each_group_order_article_for_ordergroup(ordergroup, &block)
group_order_articles(ordergroup)
.includes(order_article: { article: [:supplier] })
.order('suppliers.name, articles.name')
.preload(order_article: %i[article_price order])
.each(&block)
end
|
#each_order_article(&block) ⇒ Object
95
96
97
|
# File 'app/lib/order_pdf.rb', line 95
def each_order_article(&block)
order_articles.each(&block)
end
|
#each_ordergroup(&block) ⇒ Object
99
100
101
|
# File 'app/lib/order_pdf.rb', line 99
def each_ordergroup(&block)
ordergroups.each(&block)
end
|
#each_ordergroup_batch(batch_size) ⇒ Object
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
# File 'app/lib/order_pdf.rb', line 103
def each_ordergroup_batch(batch_size)
offset = 0
loop do
go_records = ordergroups(offset, batch_size)
break unless go_records.any?
group_ids = go_records.map(&:third)
goa_records = group_order_articles(group_ids)
.group('group_order_articles.order_article_id, group_orders.ordergroup_id')
.pluck('group_order_articles.order_article_id', 'group_orders.ordergroup_id', Arel.sql('SUM(COALESCE(group_order_articles.result, group_order_articles.quantity))'))
results = goa_records.group_by(&:first).transform_values do |value|
grouped_value = value.group_by(&:second)
group_ids.map do |group_id|
number_with_precision grouped_value[group_id].try(:first).try(:third), strip_insignificant_zeros: true
end
end
yield go_records, results
offset += batch_size
end
end
|
#group_order_article_quantity_with_tolerance(goa) ⇒ Object
57
58
59
|
# File 'app/lib/order_pdf.rb', line 57
def group_order_article_quantity_with_tolerance(goa)
goa.tolerance > 0 ? "#{goa.quantity} + #{goa.tolerance}" : goa.quantity.to_s
end
|
#group_order_article_result(goa) ⇒ Object
61
62
63
|
# File 'app/lib/order_pdf.rb', line 61
def group_order_article_result(goa)
number_with_precision goa.result, strip_insignificant_zeros: true
end
|
#group_order_articles(ordergroup) ⇒ Object
65
66
67
68
69
|
# File 'app/lib/order_pdf.rb', line 65
def group_order_articles(ordergroup)
GroupOrderArticle
.includes(:group_order)
.where(group_orders: { order_id: @orders, ordergroup_id: ordergroup })
end
|
#nice_table(name, data, dimrows = []) ⇒ Object
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'app/lib/order_pdf.rb', line 10
def nice_table(name, data, dimrows = [])
name_options = { size: 10, style: :bold }
name_height = height_of name, name_options
made_table = make_table data, width: bounds.width, cell_style: { size: 8, overflow: :shrink_to_fit } do |table|
table.cells.borders = [:bottom]
table.cells.padding_top = 2
table.cells.padding_bottom = 4
table.cells.border_color = 'dddddd'
table.rows(0).border_color = '666666'
dimrows.each do |ri|
table.row(ri).text_color = '999999'
table.row(ri).columns(0..-1).font_style = nil
end
yield table if block_given?
end
if name_height + made_table.height < cursor
down_or_page 15
else
start_new_page
end
text name, name_options
made_table.draw
end
|
#order_article_price(order_article) ⇒ Number
Return price for order_article.
This is a separate method so that plugins can override it.
49
50
51
|
# File 'app/lib/order_pdf.rb', line 49
def order_article_price(order_article)
order_article.price.fc_price
end
|
#order_article_price_per_unit(order_article) ⇒ Object
53
54
55
|
# File 'app/lib/order_pdf.rb', line 53
def order_article_price_per_unit(order_article)
"#{number_to_currency(order_article_price(order_article))} / #{order_article.article.unit}"
end
|
#order_articles ⇒ Object
71
72
73
74
75
76
77
78
79
|
# File 'app/lib/order_pdf.rb', line 71
def order_articles
OrderArticle
.ordered
.includes(article: :supplier)
.includes(group_order_articles: { group_order: :ordergroup })
.where(order: @orders)
.order('suppliers.name, articles.name, groups.name')
.preload(:article_price)
end
|
#ordergroups(offset = nil, limit = nil) ⇒ Object
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'app/lib/order_pdf.rb', line 81
def ordergroups(offset = nil, limit = nil)
result = GroupOrder
.ordered
.where(order: @orders)
.group('groups.id')
.offset(offset)
.limit(limit)
.pluck('groups.name', 'SUM(group_orders.price)', 'ordergroup_id', 'SUM(group_orders.transport)')
result.map do |item|
[item.first || stock_ordergroup_name] + item[1..]
end
end
|
#stock_ordergroup_name ⇒ Object
143
144
145
146
147
148
149
150
151
|
# File 'app/lib/order_pdf.rb', line 143
def stock_ordergroup_name
users = GroupOrder.stock
.eager_load(:updated_by)
.where(order: @orders)
.map(&:updated_by)
.map { |u| u.try(&:name) || '?' }
I18n.t('model.group_order.stock_ordergroup_name', user: users.uniq.sort.join(', '))
end
|