From 96047553e1ff09df0033ad185fc9e056d9f3563a Mon Sep 17 00:00:00 2001 From: puppe1990 Date: Wed, 16 Oct 2024 23:33:28 -0300 Subject: [PATCH 1/7] improve the payments part of new and edit --- app/assets/stylesheets/application.css | 11 ++++++ app/models/production.rb | 4 +++ app/views/productions/edit.html.erb | 39 ++++++++++++++++----- app/views/productions/new.html.erb | 30 ++++++++++++---- config/locales/pt-BR.models.productions.yml | 18 +++++----- 5 files changed, 78 insertions(+), 24 deletions(-) diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index 91969f49..a246efbd 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -81,3 +81,14 @@ input::-webkit-inner-spin-button { .sorted-desc::after { content: " ▼"; } + +.large-checkbox { + width: 1.5em; + height: 1.5em; + margin-top: 0.25em; +} + +.large-checkbox + span { + font-size: 1.2em; + vertical-align: middle; +} diff --git a/app/models/production.rb b/app/models/production.rb index 1494b60c..e7ac0009 100644 --- a/app/models/production.rb +++ b/app/models/production.rb @@ -113,4 +113,8 @@ def calendar_date expected_delivery_date end end + + def total_value_delivered + production_products.sum { |pp| pp.pieces_delivered * pp.unit_price } + end end diff --git a/app/views/productions/edit.html.erb b/app/views/productions/edit.html.erb index 56ea49d6..dd9a7d6f 100644 --- a/app/views/productions/edit.html.erb +++ b/app/views/productions/edit.html.erb @@ -1,10 +1,10 @@ <%- model_class = Production -%>
-

<%= t '.title', default: t("Edit #{model_class.model_name.human.titleize}") %>

+

<%= t '.title', default: t("helpers.titles.edit", model: model_class.model_name.human.titleize) %>

-

Edit Production

+

<%= t('productions.edit.title') %>

<%= form_with(model: @production, local: true) do |form| %> @@ -14,8 +14,8 @@ <%= form.text_field :service_order_number, class: 'form-control' %>
- <%= form.label :tailor_id, class: 'form-label' %> - <%= form.collection_select :tailor_id, @tailors, :id, :name, { prompt: 'Select a tailor' }, { class: 'form-select select2' } %> + <%= form.label :tailor_id, t('activerecord.attributes.production.tailor'), class: 'form-label' %> + <%= form.collection_select :tailor_id, @tailors, :id, :name, { prompt: t('productions.form.select_tailor') }, { class: 'form-select select2' } %>
@@ -41,6 +41,16 @@ <%= form.label :fabric_cost, t('productions.form.fabric_cost'), class: 'form-label' %> <%= form.number_field :fabric_cost, step: 0.01, class: 'form-control' %>
+
+
+
+ <%= form.label :confirmed, t('productions.form.confirmed'), class: 'form-label' do %> + <%= form.check_box :confirmed, class: 'form-check-input large-checkbox' %> + <%= t('productions.form.confirmed') %> + <% end %> +
+
+
<%= form.label :observation, class: 'form-label' %> <%= form.text_area :observation, class: 'form-control', rows: 3 %> @@ -53,25 +63,38 @@ <%= render 'production_product_fields', f: pp_form %> <% end %>
- <%= link_to_add_association 'Add Product', form, :production_products, + <%= link_to_add_association t('productions.edit.add_product'), form, :production_products, partial: 'production_product_fields', class: 'btn btn-outline-primary' %>
-

<%= t('.payments') %>

+
+ <%= t('productions.edit.total_value_delivered') %>: + <%= number_to_currency(@production.total_value_delivered) %> +
+ +

<%= t('productions.edit.payments') %>

+
+
+ <%= form.label :paid, t('productions.form.paid'), class: 'form-label' do %> + <%= form.check_box :paid, class: 'form-check-input large-checkbox' %> + <%= t('productions.form.paid') %> + <% end %> +
+
<%= form.fields_for :payments do |payment_form| %> <%= render 'payment_fields', f: payment_form %> <% end %>
- <%= link_to_add_association t('.add_payment'), form, :payments, class: 'btn btn-outline-primary' %> + <%= link_to_add_association t('productions.form.add_payment'), form, :payments, class: 'btn btn-outline-primary' %>
<%= form.submit t('helpers.submit.update'), class: 'btn btn-primary' %> - <%= link_to t('.cancel', default: t("helpers.links.cancel")), production_path(@production), class: 'btn btn-outline-secondary' %> + <%= link_to t('helpers.links.cancel'), production_path(@production), class: 'btn btn-outline-secondary' %>
<% end %>
diff --git a/app/views/productions/new.html.erb b/app/views/productions/new.html.erb index fa5a4104..babdc86d 100644 --- a/app/views/productions/new.html.erb +++ b/app/views/productions/new.html.erb @@ -14,8 +14,8 @@ <%= form.text_field :service_order_number, value: @next_service_order_number, class: 'form-control' %>
- <%= form.label :tailor_id, class: 'form-label' %> - <%= form.collection_select :tailor_id, @tailors, :id, :name, { prompt: 'Select a tailor' }, { class: 'form-select select2' } %> + <%= form.label :tailor_id, t('activerecord.attributes.production.tailor'), class: 'form-label' %> + <%= form.collection_select :tailor_id, @tailors, :id, :name, { prompt: t('productions.form.select_tailor') }, { class: 'form-select select2' } %>
@@ -41,29 +41,47 @@ <%= form.label :fabric_cost, t('productions.form.fabric_cost'), class: 'form-label' %> <%= form.number_field :fabric_cost, step: 0.01, class: 'form-control' %>
+ +
+
+ <%= form.label :confirmed, t('productions.form.confirmed'), class: 'form-label' do %> + <%= form.check_box :confirmed, class: 'form-check-input large-checkbox' %> + <%= t('productions.form.confirmed') %> + <% end %> +
+
+
<%= form.label :observation, class: 'form-label' %> <%= form.text_area :observation, class: 'form-control', rows: 3 %>
-

<%= t('.products') %>

+

<%= t('productions.new.products') %>

<%= form.fields_for :production_products do |pp_form| %> <%= render 'production_product_fields', f: pp_form %> <% end %>
- <%= link_to_add_association t('.add_product'), form, :production_products, class: 'btn btn-outline-primary' %> + <%= link_to_add_association t('productions.new.add_product'), form, :production_products, class: 'btn btn-outline-primary' %>
-

<%= t('.payments') %>

+

<%= t('productions.new.payments') %>

+
+
+ <%= form.label :paid, t('productions.form.paid'), class: 'form-label' do %> + <%= form.check_box :paid, class: 'form-check-input large-checkbox' %> + <%= t('productions.form.paid') %> + <% end %> +
+
<%= form.fields_for :payments do |payment_form| %> <%= render 'payment_fields', f: payment_form %> <% end %>
- <%= link_to_add_association t('.add_payment'), form, :payments, class: 'btn btn-outline-primary' %> + <%= link_to_add_association t('productions.form.add_payment'), form, :payments, class: 'btn btn-outline-primary' %>
diff --git a/config/locales/pt-BR.models.productions.yml b/config/locales/pt-BR.models.productions.yml index 0e987747..e9e3d387 100644 --- a/config/locales/pt-BR.models.productions.yml +++ b/config/locales/pt-BR.models.productions.yml @@ -89,7 +89,6 @@ pt-BR: discount: "Desconto" total: "Total" total_value: "Valor Total" - total_pieces_delivered: "Total de Peças Entregues" total_discount: "Total de Desconto" total_returned: "Total Devolvido" total_to_pay: "Total a Pagar" @@ -145,9 +144,13 @@ pt-BR: new_production: "Criar Nova Produção" products: "Produtos" add_product: "Adicionar Produto" + payments: "Pagamentos" edit: title: "Editar Produção" products: "Produtos" + payments: "Pagamentos" + total_value_delivered: "Valor Total Entregue" + add_product: "Adicionar Produto" actions: show: "Mostrar" edit: "Editar" @@ -170,26 +173,21 @@ pt-BR: form: notions_cost: "Custo de Aviamentos" fabric_cost: "Custo de Tecido" + confirmed: "Recebimento Confirmado" + paid: "Pago" + select_tailor: "Selecione um costureiro" payments: "Pagamentos" add_payment: "Adicionar Pagamento" price_per_piece_report: title: "Relatório de Preço por Peça" filters: "Filtros" tailor: "Costureiro" - all_tailors: "Todos os Costureiros" start_date: "Data Inicial" end_date: "Data Final" total_cost: "Custo Total" total_quantity: "Quantidade Total" price_per_piece: "Preço por Peça" actions: "Ações" - show: "Mostrar" - edit: "Editar" - actions: - title: "Ações" - show: "Mostrar" - edit: "Editar" - destroy: "Excluir" helpers: submit: create: "Criar %{model}" @@ -208,4 +206,4 @@ pt-BR: no: "Não" stocks: physical_balance: "Saldo Físico" - in_production: "Em Produção" \ No newline at end of file + in_production: "Em Produção" From f5dd19f8c9824558e1eaa10d616caf11e4771e67 Mon Sep 17 00:00:00 2001 From: puppe1990 Date: Wed, 16 Oct 2024 23:37:57 -0300 Subject: [PATCH 2/7] create spec to a new method total_value_delivered --- spec/models/production_spec.rb | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/spec/models/production_spec.rb b/spec/models/production_spec.rb index 38eec012..57d24a5e 100644 --- a/spec/models/production_spec.rb +++ b/spec/models/production_spec.rb @@ -164,5 +164,41 @@ expect(production.calendar_date).to eq(production.expected_delivery_date) end end + + describe '#total_value_delivered' do + it 'calculates the total value of delivered pieces correctly' do + production.production_products.first.update( + pieces_delivered: 8, + unit_price: 10 + ) + production.production_products.last.update( + pieces_delivered: 3, + unit_price: 15 + ) + + expected_total = (8 * 10) + (3 * 15) + expect(production.total_value_delivered).to eq(expected_total) + end + + it 'returns 0 when no pieces have been delivered' do + production.production_products.update_all(pieces_delivered: 0) + expect(production.total_value_delivered).to eq(0) + end + + it 'excludes non-delivered pieces from the calculation' do + production.production_products.first.update( + quantity: 10, + pieces_delivered: 5, + unit_price: 10 + ) + production.production_products.last.update( + quantity: 8, + pieces_delivered: 0, + unit_price: 15 + ) + + expect(production.total_value_delivered).to eq(50) # Only 5 * 10 for the first product + end + end end end From c4551c954a4c9ecb4adbc191cc45f33f83cec7fd Mon Sep 17 00:00:00 2001 From: puppe1990 Date: Wed, 16 Oct 2024 23:39:30 -0300 Subject: [PATCH 3/7] improve the specs using faker --- spec/models/production_spec.rb | 119 +++++++++++++++++++-------------- 1 file changed, 68 insertions(+), 51 deletions(-) diff --git a/spec/models/production_spec.rb b/spec/models/production_spec.rb index 57d24a5e..ef09f590 100644 --- a/spec/models/production_spec.rb +++ b/spec/models/production_spec.rb @@ -60,124 +60,140 @@ let(:production) do create(:production, :with_production_products, account: account, - fabric_cost: 80, - notions_cost: 20) + fabric_cost: Faker::Number.decimal(l_digits: 2, r_digits: 2), + notions_cost: Faker::Number.decimal(l_digits: 2, r_digits: 2)) end before do production.production_products.first.update( - quantity: 10, - unit_price: 10, - pieces_delivered: 8, - dirty: 1, - error: 1 + quantity: Faker::Number.between(from: 5, to: 20), + unit_price: Faker::Number.decimal(l_digits: 2, r_digits: 2), + pieces_delivered: Faker::Number.between(from: 0, to: 15), + dirty: Faker::Number.between(from: 0, to: 3), + error: Faker::Number.between(from: 0, to: 3) ) production.production_products.last.update( - quantity: 5, - unit_price: 10, - pieces_delivered: 3, - discard: 2 + quantity: Faker::Number.between(from: 5, to: 20), + unit_price: Faker::Number.decimal(l_digits: 2, r_digits: 2), + pieces_delivered: Faker::Number.between(from: 0, to: 15), + discard: Faker::Number.between(from: 0, to: 3) ) end describe '#total_pieces_delivered' do it 'returns the sum of pieces delivered for all production products' do - expect(production.total_pieces_delivered).to eq(11) + expected_total = production.production_products.sum(&:pieces_delivered) + expect(production.total_pieces_delivered).to eq(expected_total) end end describe '#total_missing_pieces' do it 'returns the sum of missing pieces for all production products' do - expect(production.total_missing_pieces).to eq(0) + expected_missing = production.production_products.sum do |pp| + next 0 if pp.returned + pp.quantity - (pp.pieces_delivered + pp.dirty + pp.error + pp.discard) + end + expect(production.total_missing_pieces).to eq(expected_missing) end end describe '#total_dirty_pieces' do it 'returns the sum of dirty pieces for all production products' do - expect(production.total_dirty_pieces).to eq(1) + expected_dirty = production.production_products.sum(&:dirty) + expect(production.total_dirty_pieces).to eq(expected_dirty) end end describe '#total_error_pieces' do it 'returns the sum of error pieces for all production products' do - expect(production.total_error_pieces).to eq(1) + expected_error = production.production_products.sum(&:error) + expect(production.total_error_pieces).to eq(expected_error) end end describe '#total_discarded_pieces' do it 'returns the sum of discarded pieces for all production products' do - expect(production.total_discarded_pieces).to eq(2) + expected_discarded = production.production_products.sum(&:discard) + expect(production.total_discarded_pieces).to eq(expected_discarded) end end describe '#price_per_piece' do it 'calculates the price per piece correctly' do - expect(production.price_per_piece).to be_within(0.01).of(6.67) # (80 + 20) / (10 + 5) + total_cost = production.fabric_cost + production.notions_cost + total_quantity = production.production_products.sum(&:quantity) + expected_price = total_quantity.zero? ? 0 : (total_cost / total_quantity) + expect(production.price_per_piece).to be_within(0.01).of(expected_price) end it 'returns 0 when total quantity is zero' do - production.production_products.destroy_all + production.production_products.update_all(quantity: 0) expect(production.price_per_piece).to eq(0) end end describe '#total_price' do it 'calculates the total price correctly' do - expect(production.total_price).to eq(150) # (10 * 10) + (5 * 10) + expected_total = production.production_products.sum { |pp| pp.quantity * pp.unit_price } + expect(production.total_price).to be_within(0.01).of(expected_total) end it 'excludes returned products from the total price' do production.production_products.last.update(returned: true) - expect(production.total_price).to eq(100) # (10 * 10) + expected_total = production.production_products.sum do |pp| + pp.returned ? 0 : pp.quantity * pp.unit_price + end + expect(production.total_price).to be_within(0.01).of(expected_total) end end describe '#total_paid' do it 'calculates the total paid amount correctly' do - create(:payment, production: production, amount: 75) - create(:payment, production: production, amount: 25) - expect(production.total_paid).to eq(100) + payment_amounts = [ + Faker::Number.decimal(l_digits: 2, r_digits: 2), + Faker::Number.decimal(l_digits: 2, r_digits: 2) + ] + payment_amounts.each do |amount| + create(:payment, production: production, amount: amount) + end + expect(production.total_paid).to be_within(0.01).of(payment_amounts.sum) end end describe '#remaining_balance' do it 'calculates the remaining balance correctly' do - create(:payment, production: production, amount: 75) - expect(production.remaining_balance).to eq(75) # 150 - 75 - end - - it 'calculates the remaining balance correctly with returned products' do - production.production_products.last.update(returned: true) - create(:payment, production: production, amount: 75) - expect(production.remaining_balance).to eq(25) # 100 - 75 + payment_amount = Faker::Number.decimal(l_digits: 2, r_digits: 2) + create(:payment, production: production, amount: payment_amount) + expected_balance = production.total_price - payment_amount + expect(production.remaining_balance).to be_within(0.01).of(expected_balance) end end describe '#calendar_date' do it 'returns payment_date when confirmed' do - production.update(confirmed: true, payment_date: Date.today + 7.days) - expect(production.calendar_date).to eq(production.payment_date) + payment_date = Faker::Date.forward(days: 30) + production.update(confirmed: true, payment_date: payment_date) + expect(production.calendar_date).to eq(payment_date) end it 'returns expected_delivery_date when not confirmed' do - production.update(confirmed: false, expected_delivery_date: Date.today + 14.days) - expect(production.calendar_date).to eq(production.expected_delivery_date) + delivery_date = Faker::Date.forward(days: 30) + production.update(confirmed: false, expected_delivery_date: delivery_date) + expect(production.calendar_date).to eq(delivery_date) end end describe '#total_value_delivered' do it 'calculates the total value of delivered pieces correctly' do - production.production_products.first.update( - pieces_delivered: 8, - unit_price: 10 - ) - production.production_products.last.update( - pieces_delivered: 3, - unit_price: 15 - ) + production.production_products.each do |pp| + pp.update( + pieces_delivered: Faker::Number.between(from: 0, to: 15), + unit_price: Faker::Number.decimal(l_digits: 2, r_digits: 2) + ) + end - expected_total = (8 * 10) + (3 * 15) - expect(production.total_value_delivered).to eq(expected_total) + expected_total = production.production_products.sum { |pp| pp.pieces_delivered * pp.unit_price } + expect(production.total_value_delivered).to be_within(0.01).of(expected_total) end it 'returns 0 when no pieces have been delivered' do @@ -187,17 +203,18 @@ it 'excludes non-delivered pieces from the calculation' do production.production_products.first.update( - quantity: 10, - pieces_delivered: 5, - unit_price: 10 + quantity: Faker::Number.between(from: 10, to: 20), + pieces_delivered: Faker::Number.between(from: 1, to: 9), + unit_price: Faker::Number.decimal(l_digits: 2, r_digits: 2) ) production.production_products.last.update( - quantity: 8, + quantity: Faker::Number.between(from: 10, to: 20), pieces_delivered: 0, - unit_price: 15 + unit_price: Faker::Number.decimal(l_digits: 2, r_digits: 2) ) - expect(production.total_value_delivered).to eq(50) # Only 5 * 10 for the first product + expected_total = production.production_products.first.pieces_delivered * production.production_products.first.unit_price + expect(production.total_value_delivered).to be_within(0.01).of(expected_total) end end end From efadc4c09ef0fec5f0d6283743f3a1eb5cc932e3 Mon Sep 17 00:00:00 2001 From: puppe1990 Date: Wed, 16 Oct 2024 23:52:09 -0300 Subject: [PATCH 4/7] put the add the button total value payment --- app/views/productions/edit.html.erb | 62 +++++++++++++++++++-- config/locales/pt-BR.models.productions.yml | 3 +- 2 files changed, 59 insertions(+), 6 deletions(-) diff --git a/app/views/productions/edit.html.erb b/app/views/productions/edit.html.erb index dd9a7d6f..20e720c3 100644 --- a/app/views/productions/edit.html.erb +++ b/app/views/productions/edit.html.erb @@ -65,13 +65,14 @@
<%= link_to_add_association t('productions.edit.add_product'), form, :production_products, partial: 'production_product_fields', - class: 'btn btn-outline-primary' %> + class: 'btn btn-outline-primary add-product' %>
-
+
<%= t('productions.edit.total_value_delivered') %>: - <%= number_to_currency(@production.total_value_delivered) %> + <%= number_to_currency(@production.total_value_delivered) %> + <%= link_to t('productions.edit.add_total_as_payment'), '#', class: 'btn btn-sm btn-outline-success ms-3', id: 'add-total-as-payment' %>

<%= t('productions.edit.payments') %>

@@ -88,7 +89,8 @@ <%= render 'payment_fields', f: payment_form %> <% end %>
- <%= link_to_add_association t('productions.form.add_payment'), form, :payments, class: 'btn btn-outline-primary' %> + <%= link_to_add_association t('productions.form.add_payment'), form, :payments, + class: 'btn btn-outline-primary add-payment' %>
@@ -103,13 +105,63 @@ <% content_for :javascript do %> <% end %> diff --git a/config/locales/pt-BR.models.productions.yml b/config/locales/pt-BR.models.productions.yml index e9e3d387..42aac976 100644 --- a/config/locales/pt-BR.models.productions.yml +++ b/config/locales/pt-BR.models.productions.yml @@ -63,7 +63,7 @@ pt-BR: tailors_summary: "Resumo dos Costureiros" total_productions: "Total de Produções" total_value: "Valor Total" - total_pieces_delivered: "Total de Peças Entregues" + total_pieces_delivered: "Total de Pe��as Entregues" total_discount: "Total de Desconto" total_returned: "Total Devolvido" total_to_pay: "Total a Pagar" @@ -151,6 +151,7 @@ pt-BR: payments: "Pagamentos" total_value_delivered: "Valor Total Entregue" add_product: "Adicionar Produto" + add_total_as_payment: "Adicionar Total como Pagamento" actions: show: "Mostrar" edit: "Editar" From 3c6de1559bd4e872b2fba937a9320282f2752e6b Mon Sep 17 00:00:00 2001 From: puppe1990 Date: Wed, 16 Oct 2024 23:55:30 -0300 Subject: [PATCH 5/7] fix the to fill the data when press the button --- app/views/productions/edit.html.erb | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/app/views/productions/edit.html.erb b/app/views/productions/edit.html.erb index 20e720c3..d33999ef 100644 --- a/app/views/productions/edit.html.erb +++ b/app/views/productions/edit.html.erb @@ -109,12 +109,6 @@ // Initialize Select2 $('.select2').select2(); - // Initialize flatpickr for existing date fields - flatpickr("input[type=date]", { - dateFormat: "d/m/Y", - locale: "pt" - }); - // Initialize Select2 for dynamically added fields $('#production-products').on('cocoon:after-insert', function() { $('.select2').select2(); @@ -128,10 +122,6 @@ // Parse the Brazilian currency format var totalValue = parseFloat(totalValueText.replace(/[^\d,]/g, '').replace(',', '.')); - // Format today's date as dd/mm/yyyy - var today = new Date(); - var formattedDate = today.toLocaleDateString('pt-BR'); - // Trigger the add payment link var addPaymentLink = document.querySelector('#payments .add-payment'); if (addPaymentLink) { @@ -142,7 +132,7 @@ // Use Cocoon's after-insert callback to set the values $('#payments').on('cocoon:after-insert', function(e, insertedItem) { var amountInput = insertedItem.find('input[name$="[amount]"]'); - var dateInput = insertedItem.find('input[name$="[date]"]'); + var dateInput = insertedItem.find('input[name$="[payment_date]"]'); if (amountInput.length) { var totalValueText = document.getElementById('total-value-delivered').textContent.trim(); @@ -152,14 +142,11 @@ if (dateInput.length) { var today = new Date(); - var formattedDate = today.toLocaleDateString('pt-BR'); + var yyyy = today.getFullYear(); + var mm = String(today.getMonth() + 1).padStart(2, '0'); // January is 0! + var dd = String(today.getDate()).padStart(2, '0'); + var formattedDate = yyyy + '-' + mm + '-' + dd; // Format as YYYY-MM-DD for date input dateInput.val(formattedDate); - - flatpickr(dateInput[0], { - dateFormat: "d/m/Y", - locale: "pt", - defaultDate: formattedDate - }); } }); }); From 188e1f378ce641bc7287e470d58861c632190015 Mon Sep 17 00:00:00 2001 From: puppe1990 Date: Thu, 17 Oct 2024 00:00:03 -0300 Subject: [PATCH 6/7] complete the funcionality of the button --- app/views/productions/edit.html.erb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/views/productions/edit.html.erb b/app/views/productions/edit.html.erb index d33999ef..5e6e8a4e 100644 --- a/app/views/productions/edit.html.erb +++ b/app/views/productions/edit.html.erb @@ -127,6 +127,14 @@ if (addPaymentLink) { addPaymentLink.click(); } + + // Check the "Paid" checkbox + var paidCheckbox = document.querySelector('input[name="production[paid]"][type="checkbox"]'); + if (paidCheckbox) { + paidCheckbox.checked = true; + // Trigger change event to ensure any listeners are notified + paidCheckbox.dispatchEvent(new Event('change')); + } }); // Use Cocoon's after-insert callback to set the values From bf9c9877e57c96f2dc52ef0ed84bf69ea60c023e Mon Sep 17 00:00:00 2001 From: puppe1990 Date: Thu, 17 Oct 2024 00:01:48 -0300 Subject: [PATCH 7/7] fix the translation --- config/locales/pt-BR.models.productions.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/pt-BR.models.productions.yml b/config/locales/pt-BR.models.productions.yml index 42aac976..face8d05 100644 --- a/config/locales/pt-BR.models.productions.yml +++ b/config/locales/pt-BR.models.productions.yml @@ -63,7 +63,7 @@ pt-BR: tailors_summary: "Resumo dos Costureiros" total_productions: "Total de Produções" total_value: "Valor Total" - total_pieces_delivered: "Total de Pe��as Entregues" + total_pieces_delivered: "Total de Peças Entregues" total_discount: "Total de Desconto" total_returned: "Total Devolvido" total_to_pay: "Total a Pagar"