From 452fa49a7153ded176b05bf29a1614a1da6b7d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Thu, 3 Sep 2020 13:16:16 +0300 Subject: [PATCH 1/6] Send each registrar's monthly summary to Directo separately --- app/jobs/directo_invoice_forward_job.rb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/jobs/directo_invoice_forward_job.rb b/app/jobs/directo_invoice_forward_job.rb index 6c3eb034c..d017e9df2 100644 --- a/app/jobs/directo_invoice_forward_job.rb +++ b/app/jobs/directo_invoice_forward_job.rb @@ -28,17 +28,18 @@ class DirectoInvoiceForwardJob < Que::Job def send_monthly_invoices Registrar.where.not(test_registrar: true).find_each do |registrar| + @client = DirectoApi::Client.new(api_url, sales_agent, payment_term) fetch_monthly_summary(registrar: registrar) + next unless @client.invoices.count.positive? + + sync_with_directo end - - return unless @client.invoices.count.positive? - - sync_with_directo end def fetch_monthly_summary(registrar:) return unless registrar.cash_account + Rails.logger.info "Fetching monthly summary for registrar #{registrar.name}" summary = registrar.monthly_summary(month: @month) @client.invoices.add_with_schema(invoice: summary, schema: 'summary') unless summary.nil? end From 732afd8cbfd3f4e1fe75671915e0989b11c71306 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Thu, 3 Sep 2020 13:36:34 +0300 Subject: [PATCH 2/6] Reinit Directo client by function --- app/jobs/directo_invoice_forward_job.rb | 26 +++++++++++-------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/app/jobs/directo_invoice_forward_job.rb b/app/jobs/directo_invoice_forward_job.rb index d017e9df2..705dcf480 100644 --- a/app/jobs/directo_invoice_forward_job.rb +++ b/app/jobs/directo_invoice_forward_job.rb @@ -2,15 +2,16 @@ class DirectoInvoiceForwardJob < Que::Job def run(monthly: false, dry: false) @dry = dry (@month = Time.zone.now - 1.month) if monthly - api_url = ENV['directo_invoice_url'] - sales_agent = Setting.directo_sales_agent - payment_term = Setting.directo_receipt_payment_term - @prepayment_product_id = Setting.directo_receipt_product_name - @client = DirectoApi::Client.new(api_url, sales_agent, payment_term) + @client = new_directo_client monthly ? send_monthly_invoices : send_receipts end + def new_directo_client + DirectoApi::Client.new(ENV['directo_invoice_url'], Setting.directo_sales_agent, + Setting.directo_receipt_payment_term) + end + def send_receipts unsent_invoices = Invoice.where(in_directo: false).non_cancelled @@ -28,22 +29,17 @@ class DirectoInvoiceForwardJob < Que::Job def send_monthly_invoices Registrar.where.not(test_registrar: true).find_each do |registrar| - @client = DirectoApi::Client.new(api_url, sales_agent, payment_term) - fetch_monthly_summary(registrar: registrar) + next unless registrar.cash_account + + @client = new_directo_client + summary = registrar.monthly_summary(month: @month) + @client.invoices.add_with_schema(invoice: summary, schema: 'summary') unless summary.nil? next unless @client.invoices.count.positive? sync_with_directo end end - def fetch_monthly_summary(registrar:) - return unless registrar.cash_account - - Rails.logger.info "Fetching monthly summary for registrar #{registrar.name}" - summary = registrar.monthly_summary(month: @month) - @client.invoices.add_with_schema(invoice: summary, schema: 'summary') unless summary.nil? - end - def assign_monthly_numbers if directo_counter_exceedable?(@client.invoices.count) raise 'Directo Counter is going to be out of period!' From 53a45f60a4eb154a5769b847188751bc866a9294 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Thu, 3 Sep 2020 14:00:26 +0300 Subject: [PATCH 3/6] Fix CC issues --- app/jobs/directo_invoice_forward_job.rb | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/jobs/directo_invoice_forward_job.rb b/app/jobs/directo_invoice_forward_job.rb index 705dcf480..4b2c06e2c 100644 --- a/app/jobs/directo_invoice_forward_job.rb +++ b/app/jobs/directo_invoice_forward_job.rb @@ -32,14 +32,17 @@ class DirectoInvoiceForwardJob < Que::Job next unless registrar.cash_account @client = new_directo_client - summary = registrar.monthly_summary(month: @month) - @client.invoices.add_with_schema(invoice: summary, schema: 'summary') unless summary.nil? - next unless @client.invoices.count.positive? - - sync_with_directo + send_invoice_for_registrar(registrar) end end + def send_invoice_for_registrar(registrar) + summary = registrar.monthly_summary(month: @month) + @client.invoices.add_with_schema(invoice: summary, schema: 'summary') unless summary.nil? + + sync_with_directo if @client.invoices.count.positive? + end + def assign_monthly_numbers if directo_counter_exceedable?(@client.invoices.count) raise 'Directo Counter is going to be out of period!' From 773e39c88d525a05e3d88fcba3ff619aae1e647c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Thu, 3 Sep 2020 15:29:48 +0300 Subject: [PATCH 4/6] Target newer commit of Directo gem --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index f7eb6cf2a..4144c9ed3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -9,7 +9,7 @@ GIT GIT remote: https://github.com/internetee/directo.git - revision: 8ff8a382d004ffb85722a6a7a68a020bd4d7159b + revision: e4ba54f601d1815fd8782a196788730d47861e86 branch: master specs: directo (1.0.1) @@ -165,7 +165,7 @@ GEM coffee-script-source execjs coffee-script-source (1.12.2) - concurrent-ruby (1.1.6) + concurrent-ruby (1.1.7) countries (3.0.1) i18n_data (~> 0.10.0) sixarm_ruby_unaccent (~> 1.1) @@ -241,7 +241,7 @@ GEM httpi (2.4.4) rack socksify - i18n (1.8.3) + i18n (1.8.5) concurrent-ruby (~> 1.0) i18n_data (0.10.0) isikukood (0.1.2) From dea76d09fbb1b133c8118686b2df78311a71dd29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Fri, 4 Sep 2020 13:36:45 +0300 Subject: [PATCH 5/6] Test that each registrar monthly summary is sent separately --- test/jobs/directo_invoice_forward_job_test.rb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/test/jobs/directo_invoice_forward_job_test.rb b/test/jobs/directo_invoice_forward_job_test.rb index 32ae39e7a..dab25f3a2 100644 --- a/test/jobs/directo_invoice_forward_job_test.rb +++ b/test/jobs/directo_invoice_forward_job_test.rb @@ -151,4 +151,42 @@ class DirectoInvoiceForwardJobTest < ActiveSupport::TestCase DirectoInvoiceForwardJob.run(monthly: true, dry: false) end end + + def test_sends_each_monthly_invoice_separately + activity = account_activities(:one) + price = billing_prices(:create_one_year) + price.update(duration: '3 years') + activity.update(activity_type: 'create', price: price) + + # Creating account activity for second action + another_activity = activity.dup + another_activity.account = accounts(:two) + + AccountActivity.skip_callback(:create, :after, :update_balance) + another_activity.created_at = Time.zone.parse('2010-07-05 10:00') + another_activity.save + AccountActivity.set_callback(:create, :after, :update_balance) + + response = <<-XML + + + + + XML + + first_registrar_stub = stub_request(:post, ENV['directo_invoice_url']).with do |request| + body = CGI.unescape(request.body) + (body.include? 'StartDate') && (body.include? 'EndDate') && (body.include? 'bestnames') + end.to_return(status: 200, body: response) + + second_registrar_stub = stub_request(:post, ENV['directo_invoice_url']).with do |request| + body = CGI.unescape(request.body) + (body.include? 'StartDate') && (body.include? 'EndDate') && (body.include? 'goodnames') + end.to_return(status: 200, body: response) + + DirectoInvoiceForwardJob.run(monthly: true, dry: false) + + assert_requested first_registrar_stub + assert_requested second_registrar_stub + end end From 4e79cc2eba4d237413d6c65f5f146e6ea1e1765e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Fri, 4 Sep 2020 13:52:36 +0300 Subject: [PATCH 6/6] Reset Webmock stub counter for directo requests --- test/jobs/directo_invoice_forward_job_test.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/jobs/directo_invoice_forward_job_test.rb b/test/jobs/directo_invoice_forward_job_test.rb index dab25f3a2..4e0edf7e5 100644 --- a/test/jobs/directo_invoice_forward_job_test.rb +++ b/test/jobs/directo_invoice_forward_job_test.rb @@ -153,6 +153,8 @@ class DirectoInvoiceForwardJobTest < ActiveSupport::TestCase end def test_sends_each_monthly_invoice_separately + WebMock.reset! + activity = account_activities(:one) price = billing_prices(:create_one_year) price.update(duration: '3 years')