Skip to content

Commit

Permalink
Added units file convertor and result to enable easier transformation…
Browse files Browse the repository at this point in the history
…s between units with the same base unit
  • Loading branch information
lentschi committed Mar 18, 2022
1 parent 40fb822 commit d86be97
Show file tree
Hide file tree
Showing 6 changed files with 22,789 additions and 14 deletions.
20 changes: 13 additions & 7 deletions app/assets/javascripts/article-form.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
class ArticleForm {
constructor(articleUnitRatioTemplate$, articleForm$) {
constructor(articleUnitRatioTemplate$, articleForm$, units) {
try {
this.units = units;
this.articleUnitRatioTemplate$ = articleUnitRatioTemplate$;
this.articleForm$ = articleForm$;
this.unit$ = $('#article_unit', this.articleForm$);
Expand All @@ -27,10 +28,9 @@ class ArticleForm {
}

loadAvailableUnits() {
this.availableUnits = $('option', this.supplierUnitSelect$)
.map((_, option) => ({key: option.value, label: option.innerText}))
.get()
.filter(value => value.key !== '');
this.availableUnits = Object.entries(this.units)
.filter(([, unit]) => unit.visible)
.map(([code, unit]) => ({key: code, label: unit.name, baseUnit: unit.baseUnit}));

$('#article_supplier_order_unit', this.articleForm$).select2(this.select2Config);
}
Expand Down Expand Up @@ -137,15 +137,21 @@ class ArticleForm {
}

filterAvailableRatioUnits() {
let remainingAvailableUnits = this.availableUnits.filter(unit => unit.key !== this.supplierUnitSelect$.val());
const isUnitOrBaseUnitSelected = (unit, select$) => {
const code = select$.val();
const selectedUnit = this.units[code];
return unit.key !== code && (!unit.baseUnit || !selectedUnit || !selectedUnit.baseUnit || unit.baseUnit !== selectedUnit.baseUnit);
};

let remainingAvailableUnits = this.availableUnits.filter(unit => isUnitOrBaseUnitSelected(unit, this.supplierUnitSelect$));

$('tr select[name$="[unit]"]', this.unitRatiosTable$).each((_, unitSelect) => {
$('option[value!=""]' + remainingAvailableUnits.map(unit => `[value!="${unit.key}"]`).join(''), unitSelect).remove();
const missingUnits = remainingAvailableUnits.filter(unit => $(`option[value="${unit.key}"]`, unitSelect).length === 0);
for (const missingUnit of missingUnits) {
$(unitSelect).append($(`<option value="${missingUnit.key}">${missingUnit.label}</option>`));
}
remainingAvailableUnits = remainingAvailableUnits.filter(unit => unit.key !== $(unitSelect).val());
remainingAvailableUnits = remainingAvailableUnits.filter(unit => isUnitOrBaseUnitSelected(unit, $(unitSelect)));
});

this.updateAvailableBillingAndGroupOrderUnits();
Expand Down
1 change: 1 addition & 0 deletions app/controllers/articles_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ def load_article

def load_article_units
@article_units = ArticleUnits.as_options
@units_data = ArticleUnits.units
end

def new_empty_article_ratio
Expand Down
5 changes: 3 additions & 2 deletions app/views/articles/_form.html.haml
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
= simple_form_for [@supplier, @article], :validate => true, :remote => true do |f|
:javascript
var articleUnitRatioTemplate$ = $($.parseHTML("#{escape_javascript(render(partial: 'shared/article_unit_ratio', locals: {article_unit_ratio: @empty_article_unit_ratio, f: f, article_unit_ratio_counter: -1}))}"));
new ArticleForm(articleUnitRatioTemplate$, $('.article-form'));
const articleUnitRatioTemplate$ = $($.parseHTML("#{escape_javascript(render(partial: 'shared/article_unit_ratio', locals: {article_unit_ratio: @empty_article_unit_ratio, f: f, article_unit_ratio_counter: -1}))}"));
const units = #{raw(@units_data.to_json)};
new ArticleForm(articleUnitRatioTemplate$, $('.article-form'), units);

= f.hidden_field :shared_updated_on
= f.hidden_field :supplier_id
Expand Down
Loading

0 comments on commit d86be97

Please sign in to comment.