From 5bc4949405e352a12d85a967432a9b04d3d405a5 Mon Sep 17 00:00:00 2001 From: Denis Talakevich Date: Thu, 13 Apr 2023 12:56:48 +0300 Subject: [PATCH] fix invoice xls generation --- Gemfile | 4 +- Gemfile.lock | 21 ++++---- spec/factories/billing/invoice_destination.rb | 17 +++++- spec/fixtures/files/invoice_template.odt | Bin 0 -> 8995 bytes .../billing_invoice/generate_document_spec.rb | 50 ++++++++++++++++++ 5 files changed, 79 insertions(+), 13 deletions(-) create mode 100644 spec/fixtures/files/invoice_template.odt create mode 100644 spec/services/billing_invoice/generate_document_spec.rb diff --git a/Gemfile b/Gemfile index 6e904513e..db3751b09 100644 --- a/Gemfile +++ b/Gemfile @@ -40,7 +40,9 @@ gem 'jrpc', github: 'didww/jrpc' gem 'active_admin_sidebar', '1.1.0' # XLS generation -gem 'excelinator', github: 'livingsocial/excelinator' +# can be switched back to the original repo after ruby 3 fix PR merged +# https://github.com/livingsocial/excelinator/pull/19 +gem 'excelinator', github: 'senid231/excelinator', branch: 'ruby3-fix' # REST API gem 'jsonapi-resources', '~> 0.9.12' diff --git a/Gemfile.lock b/Gemfile.lock index a378ceec4..6cc734929 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -56,13 +56,6 @@ GIT specs: prometheus_exporter (0.5.1) -GIT - remote: https://github.com/livingsocial/excelinator.git - revision: 51cd9dbdbcc0e610ff5bd31b85e4744ac379e8c5 - specs: - excelinator (1.3.1) - spreadsheet - GIT remote: https://github.com/nsarno/knock.git revision: 37e403a7c6d44f585b56a086245e41566a8d6fe1 @@ -72,6 +65,14 @@ GIT jwt (~> 2.2.1) rails (>= 5) +GIT + remote: https://github.com/senid231/excelinator.git + revision: 25afcc544a6f287a2ace9018adbe6fc96ea29cb2 + branch: ruby3-fix + specs: + excelinator (1.3.1) + spreadsheet + GIT remote: https://github.com/workgena/active_admin_date_range_preset.git revision: 1bfb64ceb9639bb76dcad2c8e2df4c5199b138f3 @@ -545,7 +546,7 @@ GEM rubocop (>= 1.33.0, < 2.0) rubocop-rspec (1.39.0) rubocop (>= 0.68.1) - ruby-ole (1.2.12.1) + ruby-ole (1.2.12.2) ruby-progressbar (1.13.0) ruby2_keywords (0.0.4) rubyzip (1.3.0) @@ -585,8 +586,8 @@ GEM simplecov (~> 0.19) simplecov-html (0.12.3) simplecov_json_formatter (0.1.4) - spreadsheet (1.1.7) - ruby-ole (>= 1.0) + spreadsheet (1.3.0) + ruby-ole sprockets (3.7.2) concurrent-ruby (~> 1.0) rack (> 1, < 3) diff --git a/spec/factories/billing/invoice_destination.rb b/spec/factories/billing/invoice_destination.rb index 31eec17b8..1c3ff8c6c 100644 --- a/spec/factories/billing/invoice_destination.rb +++ b/spec/factories/billing/invoice_destination.rb @@ -26,8 +26,21 @@ invoice trait :filled do - country - network + country { FactoryBot.create(:country, :uniq_name) } + network { FactoryBot.create(:network, :uniq_name) } + end + + trait :success do + filled + sequence(:dst_prefix, &:to_s) + rate { rand + rand(5) } + successful_calls_count { rand(1..1000) } + calls_duration { successful_calls_count + (successful_calls_count * rand(100)) } + amount { (successful_calls_count * rand(5)).round(6) } + first_call_at { 25.hours.ago } + first_successful_call_at { 24.hours.ago } + last_successful_call_at { 1.minute.ago } + last_call_at { 1.second.ago } end end end diff --git a/spec/fixtures/files/invoice_template.odt b/spec/fixtures/files/invoice_template.odt new file mode 100644 index 0000000000000000000000000000000000000000..23fdf0537a9845ca51c3558765d62a90dd109921 GIT binary patch literal 8995 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