Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MHC calculator change fields #1024

Open
wants to merge 8 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions app/assets/images/icons/info-circle.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
31 changes: 31 additions & 0 deletions app/assets/stylesheets/pages/calculator.scss
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,34 @@
margin-right: 0px;
}

.info-div {
display: flex;
column-gap: 10px;
align-items: center;
}

.info-image {
width: 1rem;
height: 1rem;
}

.info-label {
display: none;
position: absolute;
margin-left: 250px;
background-color: #ececec;
padding: 4px;
border-radius: 8px;
}

.info-image:hover + .info-label {
display: block;
}

.info-label:hover {
display: block;
}

.flex-item {
display: flex;
flex-wrap: wrap;
Expand Down Expand Up @@ -351,6 +379,9 @@ select.custom-select {
.jumbotron {
margin: 0;
}
.info-label {
margin-left: 220px;
}
.result-container {
div {
margin: 20px 0;
Expand Down
4 changes: 3 additions & 1 deletion app/controllers/api/v1/pad_calculators_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ def calculate
menstruation_age: params[:menstruation_age],
menopause_age: params[:menopause_age],
average_menstruation_cycle_duration: params[:average_menstruation_cycle_duration],
pads_per_cycle: params[:pads_per_cycle],
duration_of_menstruation: params[:duration_of_menstruation],
disposable_products_per_day: params[:disposable_products_per_day],
product_type: params[:product_type],
pad_category: params[:pad_category]
)

Expand Down
6 changes: 4 additions & 2 deletions app/javascript/controllers/mhc_calculator_controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Controller } from "@hotwired/stimulus";
import { FetchRequest } from "@rails/request.js";

export default class extends Controller {
static targets = ["userAge", "menstruationAge", "menopauseAge", "averageMenstruationCycleDuration", "padsPerCycle", "padCategory"];
static targets = ["userAge", "menstruationAge", "menopauseAge", "averageMenstruationCycleDuration", "durationOfMenstruation", "disposableProductsPerDay", "productType", "padCategory"];
static outlets = ["pad-results"];
static values = {
url: {
Expand All @@ -19,7 +19,9 @@ export default class extends Controller {
menstruation_age: parseInt(this.menstruationAgeTarget.value),
menopause_age: parseInt(this.menopauseAgeTarget.value),
average_menstruation_cycle_duration: parseInt(this.averageMenstruationCycleDurationTarget.value),
pads_per_cycle: parseInt(this.padsPerCycleTarget.value),
duration_of_menstruation: parseInt(this.durationOfMenstruationTarget.value),
disposable_products_per_day: parseInt(this.disposableProductsPerDayTarget.value),
product_type: this.productTypeTarget.value,
pad_category: this.padCategoryTarget.value
};

Expand Down
33 changes: 21 additions & 12 deletions app/services/calculators/pad_usage_service.rb
Original file line number Diff line number Diff line change
@@ -1,21 +1,30 @@
class Calculators::PadUsageService
attr_accessor :user_age, :menstruation_age, :menopause_age,
:average_menstruation_cycle_duration,
:pads_per_cycle, :pad_category

PAD_PRICES = {
budget: 2,
average: 4,
premium: 7
:duration_of_menstruation, :disposable_products_per_day, :product_type, :pad_category

PRODUCT_PRICES = {
pads: {
budget: 2,
average: 4,
premium: 7
},
tampons: {
budget: 3,
average: 5,
premium: 8
}
}

def initialize(user_age:, menstruation_age:, menopause_age:, average_menstruation_cycle_duration:,
pads_per_cycle:, pad_category:)
duration_of_menstruation:, disposable_products_per_day:, product_type:, pad_category:)
@user_age = user_age
@menstruation_age = menstruation_age
@menopause_age = menopause_age || 48.7
@average_menstruation_cycle_duration = average_menstruation_cycle_duration
@pads_per_cycle = pads_per_cycle
@duration_of_menstruation = duration_of_menstruation
@disposable_products_per_day = disposable_products_per_day
@product_type = product_type.to_sym
@pad_category = (pad_category || :budget).to_sym
end

Expand All @@ -31,19 +40,19 @@ def calculate
private

def already_used_products
menstruations_from_age_range(menstruation_age, user_age) * pads_per_cycle
menstruations_from_age_range(menstruation_age, user_age) * duration_of_menstruation * disposable_products_per_day
end

def products_to_be_used
menstruations_from_age_range(user_age, menopause_age) * pads_per_cycle
menstruations_from_age_range(user_age, menopause_age) * duration_of_menstruation * disposable_products_per_day
end

def already_used_products_cost
already_used_products * PAD_PRICES[pad_category]
already_used_products * PRODUCT_PRICES[product_type][pad_category]
end

def products_to_be_used_cost
products_to_be_used * PAD_PRICES[pad_category]
products_to_be_used * PRODUCT_PRICES[product_type][pad_category]
end

def menstruations_from_age_range(from_age, till_age)
Expand Down
16 changes: 13 additions & 3 deletions app/validators/mhc_calculator_validator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ def valid?
validate_menstruation_age
validate_menopause_age
validate_average_menstruation_cycle_duration
validate_pads_per_cycle
validate_duration_of_menstruation
validate_disposable_products_per_day
validate_product_type
validate_pad_category

errors.empty?
Expand All @@ -37,8 +39,16 @@ def validate_average_menstruation_cycle_duration
presence_valid?(:average_menstruation_cycle_duration)
end

def validate_pads_per_cycle
presence_valid?(:pads_per_cycle)
def validate_duration_of_menstruation
presence_valid?(:duration_of_menstruation)
end

def validate_disposable_products_per_day
presence_valid?(:disposable_products_per_day)
end

def validate_product_type
presence_valid?(:product_type)
end

def validate_pad_category
Expand Down
28 changes: 25 additions & 3 deletions app/views/calculators/mhc_calculator.erb
Original file line number Diff line number Diff line change
Expand Up @@ -43,19 +43,41 @@
class: "form_fild price_select rounded w-100 form-control mb-0",
data: { mhc_calculator_target: "averageMenstruationCycleDuration" } %>

<div class="pb-2 input_lable info-div mt-6">
<%= label_tag "child_product_category", t(".form.duration_of_menstruation") %>
<%= image_tag "icons/info-circle.svg", class: "info-image" %>
<%= label_tag "child_product_category", t(".form.duration_of_menstruation_info"), class: "info-label" %>
</div>

<%= form.input_field :duration_of_menstruation,
type: "number",
class: "form_fild price_select rounded w-100 form-control mb-0",
data: { mhc_calculator_target: "durationOfMenstruation" } %>

<div class="pb-2 input_lable mt-6">
<%= label_tag "child_product_category", t(".form.pads_per_cycle") %>
<%= label_tag "child_product_category", t(".form.disposable_products_per_day") %>
</div>

<%= form.input_field :pads_per_cycle,
<%= form.input_field :disposable_products_per_day,
type: "number",
class: "form_fild price_select rounded w-100 form-control mb-0",
data: { mhc_calculator_target: "padsPerCycle" } %>
data: { mhc_calculator_target: "disposableProductsPerDay" } %>

<div class="pb-2 input_lable mt-6">
<%= label_tag "child_product_category", t(".form.product_type") %>
</div>

<%= form.input_field :product_type,
collection: [[t(".form.pads"), :pads], [t(".form.tampons"), :tampons]],
selected: "Pads",
class: "form_fild price_select rounded w-100 form-control mb-0",
data: { mhc_calculator_target: "productType" } %>

<div class="pb-2 input_lable mt-6">
<%= label_tag "child_product_category", t(".form.pad_category") %>
</div>


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

<%= form.input_field :product_category,
collection: [[t(".form.budgetary"), :budget], [t(".form.average"), :average], [t(".form.premium"), :premium]],
selected: "Budget",
Expand Down
7 changes: 6 additions & 1 deletion config/locales/en/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,12 @@ en:
menstruation_age: "Age at First Menstruation"
menopause_age: "Age at Menopause"
average_menstruation_cycle_duration: "Average Menstrual Cycle Duration (days)"
pads_per_cycle: "Average Products Used Per Cycle"
duration_of_menstruation: "Duration of menstruation"
duration_of_menstruation_info: "Mostly 3-5 days"
disposable_products_per_day: "Average of disposable products per day"
product_type: "What disposable products do you use?"
pads: "Pads"
tampons: "Tampons"
pad_category: "Product Category"
budgetary: "Budgetary"
average: "Average"
Expand Down
7 changes: 6 additions & 1 deletion config/locales/uk/uk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,12 @@ uk:
menstruation_age: "Вік початку менструації"
menopause_age: "Вік настання менопаузи"
average_menstruation_cycle_duration: "Середня тривалість менструального циклу (дні)"
pads_per_cycle: "Середня кількість засобів гігієни за цикл"
duration_of_menstruation: "Тривалість менструації"
duration_of_menstruation_info: "Переважно 3-5 днів"
disposable_products_per_day: "Кількість одноразових продуктів на день"
product_type: "Які одноразові засоби ви використовуєте?"
pads: "Прокладки"
tampons: "Тампони"
pad_category: "Категорія засобів гігієни"
budgetary: "Бюджетна"
average: "Середня"
Expand Down
4 changes: 3 additions & 1 deletion spec/requests/pad_calculators_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@
menstruation_age: 13,
menopause_age: 51,
average_menstruation_cycle_duration: 28,
pads_per_cycle: 20,
duration_of_menstruation: 4,
disposable_products_per_day: 5,
product_type: :pads,
pad_category: :budget
}
end
Expand Down
4 changes: 3 additions & 1 deletion spec/services/calculators/pad_usage_service_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
user_age: 30,
menstruation_age: 13,
menopause_age: 51,
pads_per_cycle: 20,
duration_of_menstruation: 4,
disposable_products_per_day: 5,
average_menstruation_cycle_duration: 28,
product_type: :pads,
pad_category: :budget
)
end
Expand Down
16 changes: 13 additions & 3 deletions spec/validators/mhc_calculator_validator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
menstruation_age: 13,
menopause_age: 50,
average_menstruation_cycle_duration: 28,
pads_per_cycle: 10,
duration_of_menstruation: 4,
disposable_products_per_day: 5,
product_type: "tampons",
pad_category: "budget"
}
end
Expand Down Expand Up @@ -54,8 +56,16 @@
include_examples "presence validation", :average_menstruation_cycle_duration
end

context "pads per cycle validation" do
include_examples "presence validation", :pads_per_cycle
context "duration of menstruation validation" do
include_examples "presence validation", :duration_of_menstruation
end

context "disposable products per day validation" do
include_examples "presence validation", :disposable_products_per_day
end

context "product type validation" do
include_examples "presence validation", :product_type
end

context "pad category validation" do
Expand Down