From b7fef1ee0f3da987663b0a2339f88a4d76abd13d Mon Sep 17 00:00:00 2001 From: Matheus Ferreira Date: Mon, 24 Feb 2025 21:27:15 -0300 Subject: [PATCH 1/2] Changes total/payd/unpayd amount cents to return only values based on filter --- .../api/v1/medical_shifts_controller.rb | 2 +- .../medical_shifts/total_amount_cents.rb | 9 ++++----- .../medical_shifts/sum_payd_amount_query.rb | 19 ------------------- .../medical_shifts/sum_total_amount_query.rb | 19 ------------------- .../medical_shifts/sum_unpaid_amount_query.rb | 19 ------------------- 5 files changed, 5 insertions(+), 63 deletions(-) delete mode 100644 app/queries/medical_shifts/sum_payd_amount_query.rb delete mode 100644 app/queries/medical_shifts/sum_total_amount_query.rb delete mode 100644 app/queries/medical_shifts/sum_unpaid_amount_query.rb diff --git a/app/controllers/api/v1/medical_shifts_controller.rb b/app/controllers/api/v1/medical_shifts_controller.rb index a445af24..05bccb4e 100644 --- a/app/controllers/api/v1/medical_shifts_controller.rb +++ b/app/controllers/api/v1/medical_shifts_controller.rb @@ -33,7 +33,7 @@ def index params: params.permit(:page, :per_page, :month, :year, :payd, :hospital_name).to_h ).medical_shifts - amount_cents = MedicalShifts::TotalAmountCents.call(user_id: current_user.id, month: params[:month]) + amount_cents = MedicalShifts::TotalAmountCents.call(medical_shifts: medical_shifts) render json: { total: amount_cents.total, diff --git a/app/operations/medical_shifts/total_amount_cents.rb b/app/operations/medical_shifts/total_amount_cents.rb index ceaa781a..4568c86e 100644 --- a/app/operations/medical_shifts/total_amount_cents.rb +++ b/app/operations/medical_shifts/total_amount_cents.rb @@ -2,17 +2,16 @@ module MedicalShifts class TotalAmountCents < Actor - input :user_id, type: Integer - input :month, type: String, allow_nil: true + input :medical_shifts output :total, type: String output :payd, type: String output :unpaid, type: String def call - self.total = Money.new(SumTotalAmountQuery.call(user_id:, month:), "BRL").format - self.payd = Money.new(SumPaydAmountQuery.call(user_id:, month:), "BRL").format - self.unpaid = Money.new(SumUnpaidAmountQuery.call(user_id:, month:), "BRL").format + self.total = Money.new(medical_shifts.sum(:amount_cents), "BRL").format + self.payd = Money.new(medical_shifts.where(payd: true).sum(:amount_cents), "BRL").format + self.unpaid = Money.new(medical_shifts.where(payd: false).sum(:amount_cents), "BRL").format end end end diff --git a/app/queries/medical_shifts/sum_payd_amount_query.rb b/app/queries/medical_shifts/sum_payd_amount_query.rb deleted file mode 100644 index 3438a787..00000000 --- a/app/queries/medical_shifts/sum_payd_amount_query.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -module MedicalShifts - class SumPaydAmountQuery < ApplicationQuery - attr_reader :user_id, :month, :relation - - def initialize(user_id:, month: nil, relation: MedicalShift) - @user_id = user_id - @month = month - @relation = relation - end - - def call - query = relation.where(user_id:).where(payd: true) - query = query.where("EXTRACT(MONTH FROM start_date) = ?", month) if month.present? - query.sum(:amount_cents) - end - end -end diff --git a/app/queries/medical_shifts/sum_total_amount_query.rb b/app/queries/medical_shifts/sum_total_amount_query.rb deleted file mode 100644 index f05e364d..00000000 --- a/app/queries/medical_shifts/sum_total_amount_query.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -module MedicalShifts - class SumTotalAmountQuery < ApplicationQuery - attr_reader :user_id, :month, :relation - - def initialize(user_id:, month: nil, relation: MedicalShift) - @user_id = user_id - @month = month - @relation = relation - end - - def call - query = relation.where(user_id: user_id) - query = query.where("EXTRACT(MONTH FROM start_date) = ?", month) if month.present? - query.sum(:amount_cents) - end - end -end diff --git a/app/queries/medical_shifts/sum_unpaid_amount_query.rb b/app/queries/medical_shifts/sum_unpaid_amount_query.rb deleted file mode 100644 index 96d59ff1..00000000 --- a/app/queries/medical_shifts/sum_unpaid_amount_query.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -module MedicalShifts - class SumUnpaidAmountQuery < ApplicationQuery - attr_reader :user_id, :month, :relation - - def initialize(user_id:, month: nil, relation: MedicalShift) - @user_id = user_id - @month = month - @relation = relation - end - - def call - query = relation.where(user_id:).where(payd: false) - query = query.where("EXTRACT(MONTH FROM start_date) = ?", month) if month.present? - query.sum(:amount_cents) - end - end -end From b36a950bdebbaf22ee2781287127ed97023e30aa Mon Sep 17 00:00:00 2001 From: Matheus Ferreira Date: Mon, 24 Feb 2025 22:40:14 -0300 Subject: [PATCH 2/2] Refacts specs for Medical Shifts to correctly test the changes --- .../api/v1/pdf_reports_controller.rb | 2 +- .../medical_shifts/total_amount_cents.rb | 6 +++--- .../medical_shifts/total_amount_cents_spec.rb | 18 +++++++++++++----- spec/pdfs/medical_shifts_report_pdf_spec.rb | 2 +- .../sum_payd_amount_query_spec.rb | 19 ------------------- .../sum_total_amount_query_spec.rb | 18 ------------------ .../sum_unpaid_amount_query_spec.rb | 18 ------------------ spec/services/pdf_generator_service_spec.rb | 2 +- 8 files changed, 19 insertions(+), 66 deletions(-) delete mode 100644 spec/queries/medical_shifts/sum_payd_amount_query_spec.rb delete mode 100644 spec/queries/medical_shifts/sum_total_amount_query_spec.rb delete mode 100644 spec/queries/medical_shifts/sum_unpaid_amount_query_spec.rb diff --git a/app/controllers/api/v1/pdf_reports_controller.rb b/app/controllers/api/v1/pdf_reports_controller.rb index 200c179a..02afc7a8 100644 --- a/app/controllers/api/v1/pdf_reports_controller.rb +++ b/app/controllers/api/v1/pdf_reports_controller.rb @@ -52,7 +52,7 @@ def medical_shifts_pdf scope: authorized_scope, params: permitted_query_params ).medical_shifts - total_amount_cents = MedicalShifts::TotalAmountCents.call(user_id: current_user.id, month: params[:month]) + total_amount_cents = MedicalShifts::TotalAmountCents.call(medical_shifts: medical_shifts) PdfGeneratorService.new( relation: medical_shifts, diff --git a/app/operations/medical_shifts/total_amount_cents.rb b/app/operations/medical_shifts/total_amount_cents.rb index 4568c86e..d5e44e75 100644 --- a/app/operations/medical_shifts/total_amount_cents.rb +++ b/app/operations/medical_shifts/total_amount_cents.rb @@ -9,9 +9,9 @@ class TotalAmountCents < Actor output :unpaid, type: String def call - self.total = Money.new(medical_shifts.sum(:amount_cents), "BRL").format - self.payd = Money.new(medical_shifts.where(payd: true).sum(:amount_cents), "BRL").format - self.unpaid = Money.new(medical_shifts.where(payd: false).sum(:amount_cents), "BRL").format + self.total = Money.new(medical_shifts.sum(&:amount_cents), "BRL").format + self.payd = Money.new(medical_shifts.select(&:payd).sum(&:amount_cents), "BRL").format + self.unpaid = Money.new(medical_shifts.reject(&:payd).sum(&:amount_cents), "BRL").format end end end diff --git a/spec/operations/medical_shifts/total_amount_cents_spec.rb b/spec/operations/medical_shifts/total_amount_cents_spec.rb index acffb63d..5b78fb58 100644 --- a/spec/operations/medical_shifts/total_amount_cents_spec.rb +++ b/spec/operations/medical_shifts/total_amount_cents_spec.rb @@ -6,20 +6,28 @@ describe ".result" do it "is successful" do user = create(:user) + medical_shift = create(:medical_shift, amount_cents: 1000, payd: true, user:, start_date: "25/02/2023") - expect(described_class.result(user_id: user.id, month: nil)).to be_success + expect(described_class.call(medical_shifts: [medical_shift])).to be_success end it "returns the total, payd and unpaid amount_cents of money" do user = create(:user) - _medical_shift = create(:medical_shift, amount_cents: 1000, payd: true, user:, start_date: "25/02/2023") + medical_shift = create(:medical_shift, amount_cents: 1000, payd: true, user:, start_date: "25/02/2023") _medical_shift2 = create(:medical_shift, amount_cents: 1000, payd: true, user:, start_date: "25/03/2023") - _payd_medical_shift = create(:medical_shift, amount_cents: 2000, payd: true, user:, start_date: "25/02/2023") + payd_medical_shift = create(:medical_shift, amount_cents: 2000, payd: true, user:, start_date: "25/02/2023") _payd_medical_shift2 = create(:medical_shift, amount_cents: 2000, payd: true, user:, start_date: "25/03/2023") - _unpaid_medical_shift = create(:medical_shift, amount_cents: 1500, payd: false, user:, start_date: "25/02/2023") + unpaid_medical_shift = create(:medical_shift, amount_cents: 1500, payd: false, user:, start_date: "25/02/2023") _unpaid_medical_shift2 = create(:medical_shift, amount_cents: 1500, payd: false, user:, start_date: "25/03/2023") - result = described_class.call(user_id: user.id, month: "2") + result = described_class.call( + medical_shifts: + [ + medical_shift, + payd_medical_shift, + unpaid_medical_shift + ] + ) expect(result.total).to eq("R$45.00") expect(result.payd).to eq("R$30.00") diff --git a/spec/pdfs/medical_shifts_report_pdf_spec.rb b/spec/pdfs/medical_shifts_report_pdf_spec.rb index baf1c5b6..5e8de3a9 100644 --- a/spec/pdfs/medical_shifts_report_pdf_spec.rb +++ b/spec/pdfs/medical_shifts_report_pdf_spec.rb @@ -6,8 +6,8 @@ it "generates a report with the correct content" do user = create(:user) pdf = Prawn::Document.new - amount = MedicalShifts::TotalAmountCents.call(user_id: user.id, month: nil) medical_shifts = create_list(:medical_shift, 3, user_id: user.id) + amount = MedicalShifts::TotalAmountCents.call(medical_shifts: medical_shifts) described_class.new(pdf: pdf, amount: amount, items: medical_shifts, title: "Plantões", email: user.email).generate rendered_pdf = pdf.render diff --git a/spec/queries/medical_shifts/sum_payd_amount_query_spec.rb b/spec/queries/medical_shifts/sum_payd_amount_query_spec.rb deleted file mode 100644 index 17e6268f..00000000 --- a/spec/queries/medical_shifts/sum_payd_amount_query_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -require "rails_helper" - -RSpec.describe MedicalShifts::SumPaydAmountQuery do - it "returns the sum of amount_cents" do - user = create(:user) - _payd_medical_shift1 = create(:medical_shift, amount_cents: 2000, payd: true, user:, start_date: "25/02/2023") - _paid_medical_shift2 = create(:medical_shift, amount_cents: 1500, payd: true, user:, start_date: "25/02/2023") - _unpayd_medical_shift2 = create(:medical_shift, amount_cents: 1000, payd: false, user:, start_date: "25/02/2023") - _paid_medical_shift3 = create(:medical_shift, amount_cents: 100, payd: true, user:, start_date: "25/03/2023") - - amount_by_month = described_class.call(user_id: user.id, month: 2) - amount_without_month = described_class.call(user_id: user.id) - - expect(amount_by_month).to eq(3500) - expect(amount_without_month).to eq(3600) - end -end diff --git a/spec/queries/medical_shifts/sum_total_amount_query_spec.rb b/spec/queries/medical_shifts/sum_total_amount_query_spec.rb deleted file mode 100644 index 66058005..00000000 --- a/spec/queries/medical_shifts/sum_total_amount_query_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -require "rails_helper" - -RSpec.describe MedicalShifts::SumTotalAmountQuery do - it "returns the sum of amount_cents" do - user = create(:user) - _medical_shift = create(:medical_shift, amount_cents: 1000, payd: true, user:, start_date: "25/02/2023") - _payd_medical_shift = create(:medical_shift, amount_cents: 2000, payd: true, user:, start_date: "25/02/2023") - _unpaid_medical_shift = create(:medical_shift, amount_cents: 1500, payd: false, user:, start_date: "25/03/2023") - - amount_by_month = described_class.call(user_id: user.id, month: 2) - amount_without_month = described_class.call(user_id: user.id) - - expect(amount_without_month).to eq(4500) - expect(amount_by_month).to eq(3000) - end -end diff --git a/spec/queries/medical_shifts/sum_unpaid_amount_query_spec.rb b/spec/queries/medical_shifts/sum_unpaid_amount_query_spec.rb deleted file mode 100644 index 9f22af11..00000000 --- a/spec/queries/medical_shifts/sum_unpaid_amount_query_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -require "rails_helper" - -RSpec.describe MedicalShifts::SumUnpaidAmountQuery do - it "returns the sum of amount_cents" do - user = create(:user) - _payd_medical_shift = create(:medical_shift, amount_cents: 2000, payd: true, user:, start_date: "25/02/2023") - _unpaid_medical_shift = create(:medical_shift, amount_cents: 1500, payd: false, user:, start_date: "25/02/2023") - _unpayd_medical_shift2 = create(:medical_shift, amount_cents: 2000, payd: false, user:, start_date: "25/03/2023") - - amount_by_month = described_class.call(user_id: user.id, month: 2) - amount_without_month = described_class.call(user_id: user.id) - - expect(amount_by_month).to eq(1500) - expect(amount_without_month).to eq(3500) - end -end diff --git a/spec/services/pdf_generator_service_spec.rb b/spec/services/pdf_generator_service_spec.rb index f35111e6..0d718f56 100644 --- a/spec/services/pdf_generator_service_spec.rb +++ b/spec/services/pdf_generator_service_spec.rb @@ -28,7 +28,7 @@ it "generates medical_shifts pdf" do user = create(:user) medical_shifts = create_list(:medical_shift, 9, user: user) - amount = MedicalShifts::TotalAmountCents.call(user_id: medical_shifts.first.user_id, month: nil) + amount = MedicalShifts::TotalAmountCents.call(medical_shifts: [medical_shifts[0]]) pdf = described_class.new( relation: medical_shifts, amount: amount, entity_name: "medical_shifts", email: user.email ).generate_pdf