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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/rails_admin_opening_states_changer.rb', line 12
def self.perform(barcode, before, after, user_id, filename_date_part = "%Y%m%d_%H%M%S.%L")
username = User.find(user_id).username
current_time = Time.now.strftime(filename_date_part)
puts "PASSED PARAMS: "
puts "- BARCODE: #{barcode}"
puts "- before: #{before}"
puts "- after: #{after}"
puts "- user_id: #{user_id}"
if barcode.blank?
message = {error: "#{I18n.t(:barcode_cannot_be_empty)}"}
status = 400
return [message, status]
else
item = Item.find_by(code: barcode)
if item.blank?
message = {error: "#{I18n.t(:barcode_not_exists)}: #{barcode}"}
status = 404
return [message, status]
else
puts "Checking if it's in previous state"
puts "BEFORE: #{before}"
puts "- STATE IDS FROM DB: #{State.where(name: before).pluck(:id).inspect}"
puts "- item.state_id: #{item.state_id}"
if !State.where(name: before).pluck(:id).include?(item.state_id)
message = {error: "#{I18n.t(:barcode_state_not, after: I18n.t("admin.actions.#{after}.title"), state: I18n.t("admin.actions.#{before}.done"), at: current_time, user: username)}"}
status = 404
log I18n.t(:not_found_error), message[:error], false, item.id, user_id
return [message, status]
else
now = Time.now
if !item.not_after_time.blank? && item.not_after_time < now
xml_string = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<error>
<code>#{barcode.split[1]}</code>
<not_before>#{item.not_before_time.strftime("%H:%M")}</not_before>
<not_after>#{item.not_after_time.strftime("%d/%m/%y")}</not_after>
<survey_at>#{now}</survey_at>
</error>\n"
File.open(File.expand_path("#{Settings.ns("errors").save_path}/timeframe_error_#{current_time}.xml"), "w") { |f| f.write(xml_string) }
message = {error: "#{I18n.t(:item_expired)}"}
status = 401
log I18n.t(:timeframe_error), message[:error], false, item.id, user_id
return [message, status]
end
if !item.not_before_time.blank? && item.not_before_time > now
message = {error: "#{I18n.t(:dont_use_before,
now: I18n.l(now),
user: username,
not_before: I18n.l(item.not_before_time),
not_after: I18n.l(item.not_after_time),
not_before_time: item.not_before_time.strftime("%H:%M"),
not_before_date: item.not_before_time.strftime("%d/%m/%y"),
not_after_time: item.not_after_time.strftime("%H:%M"),
not_after_date: item.not_after_time.strftime("%d/%m/%y"),
distance_before: distance_of_time_in_words_to_now(item.not_before_time),
distance_after: distance_of_time_in_words_to_now(item.not_after_time),
barcode: barcode)}"}
status = 401
log I18n.t(:timeframe_error), message[:error], false, item.id, user_id
return [message, status]
end
item.state_id = State.find_by(name: after).id
if !item.save
message = {error: "#{I18n.t(:item_state_not_changed_to, state: I18n.t("admin.actions.#{after}.title"), at: current_time, user: username)} (#{item.errors.full_messages.inspect})"}
status = 404
log I18n.t(:not_saved_error), message[:error], false, item.id, user_id
return [message, status]
else
message = {info: "#{I18n.t(:item_correctly_state_changed, state: I18n.t("admin.actions.#{after}.title"), at: current_time, user: username)}", barcode: barcode}
log I18n.t(:success_save), message[:info], true, item.id, user_id
status = 200
return [message, status]
end
end
end
end
end
|