diff --git a/src/app/modules/recipes/components/mix-editor/mix-editor.component.html b/src/app/modules/recipes/components/mix-editor/mix-editor.component.html deleted file mode 100644 index 5e294cd..0000000 --- a/src/app/modules/recipes/components/mix-editor/mix-editor.component.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - Retour - - - Supprimer - Enregistrer - - - - - Ajouter un mélange à la couleur {{recipe.company.name}} - - {{recipe.name}} - Modification du mélange {{mix.mixType.name}} de la - couleur {{recipe.company.name}} - - {{recipe.name}} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Position - {{mixMaterial.position}} - - - - - - Produit - - - - - - - - - - - - - - - Quantité - - - - Unités - - -

%

-
- - - {{units}} - - - - - -
-
- - - - - -
- - - diff --git a/src/app/modules/recipes/components/mix-editor/mix-editor.component.sass b/src/app/modules/recipes/components/mix-editor/mix-editor.component.sass deleted file mode 100644 index 3eb5b9b..0000000 --- a/src/app/modules/recipes/components/mix-editor/mix-editor.component.sass +++ /dev/null @@ -1,6 +0,0 @@ -mat-card - max-width: unset !important - -td.units-wrapper p - width: 3rem - margin-bottom: 0 diff --git a/src/app/modules/recipes/components/mix-editor/mix-editor.component.ts b/src/app/modules/recipes/components/mix-editor/mix-editor.component.ts deleted file mode 100644 index d795617..0000000 --- a/src/app/modules/recipes/components/mix-editor/mix-editor.component.ts +++ /dev/null @@ -1,214 +0,0 @@ -import {Component, EventEmitter, Input, Output, ViewChild} from '@angular/core' -import { - Mix, - MixMaterial, - MixMaterialDto, - mixMaterialsAsMixMaterialsDto, - Recipe, - sortMixMaterialsDto -} from '../../../shared/model/recipe.model' -import {ErrorHandlingComponent} from '../../../shared/components/subscribing.component' -import {MixService} from '../../services/mix.service' -import {RecipeService} from '../../services/recipe.service' -import {Material, materialComparator} from '../../../shared/model/material.model' -import {MaterialService} from '../../../material/service/material.service' -import {MaterialTypeService} from '../../../material-type/service/material-type.service' -import {FormBuilder, FormControl, Validators} from '@angular/forms' -import {UNIT_MILLILITER} from '../../../shared/units' -import {MatTable} from '@angular/material/table' -import {ActivatedRoute, Router} from '@angular/router' -import {ConfirmBoxComponent} from '../../../shared/components/confirm-box/confirm-box.component' -import {AccountService} from '../../../accounts/services/account.service' -import {ErrorService} from '../../../shared/service/error.service' -import {map} from 'rxjs/operators'; -import {CreInputEntry} from '../../../shared/components/inputs/inputs'; -import {CreForm, ICreForm} from '../../../shared/components/forms/forms'; - -@Component({ - selector: 'cre-mix-editor', - templateUrl: './mix-editor.component.html', - styleUrls: ['./mix-editor.component.sass'] -}) -export class MixEditorComponent extends ErrorHandlingComponent { - @ViewChild(MatTable, {static: true}) mixTable: MatTable - @ViewChild('deleteConfirmBox') deleteConfirmBox: ConfirmBoxComponent - @ViewChild(CreForm) creForm: ICreForm - - @Input() mixId: number | null - @Input() recipe: Recipe - @Input() mix: Mix | null - @Input() materials: Material[] = [] - - @Output() save = new EventEmitter() - - editionMode = false - units = UNIT_MILLILITER - hoveredMixMaterial: MixMaterial | null - tableColumns = ['position', 'buttonsPosition', 'material', 'quantity', 'units', 'buttonRemove'] - - deleting = false - errorHandlers = [{ - filter: error => error.type === 'notfound-mix-id', - consumer: _ => this.urlUtils.navigateTo('/color/list') - }, { - filter: error => error.type === 'exists-material-name', - messageProducer: error => `Un produit avec le nom '${error.name}' existe déjà` - }, { - filter: error => error.type === 'cannotdelete-mix', - messageProducer: _ => 'Ce mélange est utilisé par un ou plusieurs autres mélanges' - }, { - filter: error => error.type === 'invalid-mixmaterial-first', - messageProducer: _ => 'La quantité du premier ingrédient du mélange ne peut pas être exprimée en pourcentage' - }] - - controls: any - materialTypeEntries$ = this.materialTypeService.all.pipe( - map(materialTypes => materialTypes.map(materialType => new CreInputEntry(materialType.id, materialType.name))), - ) - - private _mixMaterials: MixMaterialDto[] = [] - - constructor( - private mixService: MixService, - private recipeService: RecipeService, - private materialService: MaterialService, - private materialTypeService: MaterialTypeService, - private accountService: AccountService, - private formBuilder: FormBuilder, - errorService: ErrorService, - router: Router, - activatedRoute: ActivatedRoute - ) { - super(errorService, activatedRoute, router) - } - - ngOnInit() { - super.ngOnInit() - - this.mixId = this.urlUtils.parseIntUrlParam('id') - if (this.mixId) { - this.editionMode = true - } - - if (this.editionMode) { - this.mix = this.recipe.mixes.find(mix => mix.id === this.mixId) - this.mixMaterials = mixMaterialsAsMixMaterialsDto(this.mix) - } else { - this.addBlankMixMaterial() - } - - this.createControls() - } - - private createControls() { - this.controls = { - name: new FormControl(this.mix?.mixType.name, Validators.required), - materialType: new FormControl(this.mix?.mixType.material.materialType.id, Validators.required) - } - } - - addRow() { - this.addBlankMixMaterial() - this.mixTable.renderRows() - } - - removeRow(position: number) { - this.mixMaterials.splice(position, 1) - - // Decreases the position of each mix material above the removed one - for (let i = position; i < this.mixMaterials.length; i++) { - this.mixMaterials[i].position -= 1 - } - - this.mixTable.renderRows() - } - - increasePosition(mixMaterial: MixMaterialDto, table: MatTable) { - this.updateMixMaterialPosition(mixMaterial, mixMaterial.position + 1) - this.sort(table) - } - - decreasePosition(mixMaterial: MixMaterialDto, table: MatTable) { - this.updateMixMaterialPosition(mixMaterial, mixMaterial.position - 1) - this.sort(table) - } - - sort(table: MatTable) { - this.mixMaterials = sortMixMaterialsDto(this.mixMaterials) - table.renderRows() - } - - setMixMaterialMaterial(mixMaterial: MixMaterialDto, materialId: number) { - mixMaterial.isPercents = this.materials.find(m => m.id === materialId).materialType.usePercentages - mixMaterial.materialId = materialId - } - - submit() { - this.save.emit({ - name: this.controls.name.value, - recipeId: this.recipe.id, - materialTypeId: this.controls.materialType.value, - mixMaterials: this.mixMaterials, - units: this.units - }) - } - - delete() { - this.deleting = true - this.subscribeAndNavigate(this.mixService.delete(this.mixId), `/color/edit/${this.recipe.id}`) - } - - getAvailableMaterials(mixMaterial: MixMaterialDto): CreInputEntry[] { - // return this.materialService.all.pipe( - // map(materials => materials.filter(material => { - // return mixMaterial.materialId === material.id || this.mixMaterials.filter(mm => mm.materialId === material.id).length === 0 - // })), - // map(materials => this.sortedMaterials(materials)), - // map(materials => materials.map(material => new CreInputEntry(material.id, material.name))) - // ) - return this.materials - .filter(m => mixMaterial.materialId === m.id || this.mixMaterials.filter(mm => mm.materialId === m.id).length === 0) - .sort(materialComparator) - .map(material => new CreInputEntry(material.id, material.name)) - // return this.materials.map(material => new CreInputEntry(material.id, material.name)) - // return this.materials - // .filter(m => mixMaterial.materialId === m.id || this.mixMaterials.filter(mm => mm.materialId === m.id).length === 0) - // .sort(materialComparator) - // .map(material => new CreInputEntry(material.id, material.name)) - } - - materialDisplayName(material: Material): string { - if (material.materialType.prefix) { - return `[${material.materialType.prefix}] ${material.name}` - } - return material.name - } - - get mixMaterials(): MixMaterialDto[] { - return this._mixMaterials - } - - set mixMaterials(mixMaterials: MixMaterialDto[]) { - this._mixMaterials = mixMaterials - this.mixTable.renderRows() - } - - private addBlankMixMaterial() { - const mixMaterial = new MixMaterialDto(null, 0, false, this.mixMaterials.length + 1) - this.mixMaterials = [...this.mixMaterials, mixMaterial] - } - - private updateMixMaterialPosition(mixMaterial: MixMaterialDto, updatedPosition: number) { - if (!this.mixMaterialAtPosition(updatedPosition)) { - mixMaterial.position = updatedPosition - } else { - const conflictingStep = this.mixMaterialAtPosition(updatedPosition) - conflictingStep.position = mixMaterial.position - mixMaterial.position = updatedPosition - } - } - - private mixMaterialAtPosition(position: number): MixMaterialDto { - return this.mixMaterials.find(m => m.position === position) - } -} diff --git a/src/app/modules/recipes/components/mix-table/mix-table.component.ts b/src/app/modules/recipes/components/mix-table/mix-table.component.ts index 2018c5a..ad5758b 100644 --- a/src/app/modules/recipes/components/mix-table/mix-table.component.ts +++ b/src/app/modules/recipes/components/mix-table/mix-table.component.ts @@ -191,12 +191,13 @@ export class MixTableComponent extends SubscribingComponent { materialId: quantity.materialId, quantity: this.calculateQuantity(index), isPercents: quantity.isPercents, - position: quantity.position + position: quantity.position, + units: UNIT_MILLILITER }) } private convertQuantities(newUnit: string) { - this.mixMaterials.forEach(q => q.quantity = convertMixMaterialQuantity(q, this.units, newUnit)) + this.mixMaterials.forEach(q => q.quantity = convertMixMaterialQuantity(q, newUnit)) this.units = newUnit } diff --git a/src/app/modules/recipes/mix/add.html b/src/app/modules/recipes/mix/add.html index 26639dd..b0b1c5b 100644 --- a/src/app/modules/recipes/mix/add.html +++ b/src/app/modules/recipes/mix/add.html @@ -1,10 +1,10 @@ - Retour + Retour - Enregistrer + Enregistrer diff --git a/src/app/modules/recipes/mix/materials-form.html b/src/app/modules/recipes/mix/materials-form.html index 91d95ca..4c4db10 100644 --- a/src/app/modules/recipes/mix/materials-form.html +++ b/src/app/modules/recipes/mix/materials-form.html @@ -8,7 +8,7 @@ Position - {{mixMaterial.position + 1}} + {{mixMaterial.position}} @@ -16,8 +16,10 @@ diff --git a/src/app/modules/recipes/mix/materials-form.ts b/src/app/modules/recipes/mix/materials-form.ts index 7ecc05c..a90f552 100644 --- a/src/app/modules/recipes/mix/materials-form.ts +++ b/src/app/modules/recipes/mix/materials-form.ts @@ -8,6 +8,7 @@ import {takeUntil} from 'rxjs/operators' import {CreComboBoxComponent, CreInputEntry} from '../../shared/components/inputs/inputs' import {AccountService} from '../../accounts/services/account.service' import {Permission} from '../../shared/model/user' +import {UNIT_MILLILITER} from "../../shared/units"; @Component({ selector: 'cre-mix-materials-form', @@ -51,11 +52,11 @@ export class MixMaterialsForm implements AfterViewInit, OnDestroy { addRow() { const position = this.nextPosition - const mixMaterial = new MixMaterialDto(null, 0, false, position) + const mixMaterial = new MixMaterialDto(null, 0, false, position, UNIT_MILLILITER) - const materialIdControl = new FormControl(null, Validators.required) - const quantityControl = new FormControl(0, Validators.required) - const unitsControl = new FormControl(null, Validators.required) + const materialIdControl = new FormControl(mixMaterial.materialId, Validators.required) + const quantityControl = new FormControl(mixMaterial.quantity, Validators.required) + const unitsControl = new FormControl(mixMaterial.units, Validators.required) materialIdControl.valueChanges .pipe(takeUntil(this._destroy$)) @@ -85,7 +86,9 @@ export class MixMaterialsForm implements AfterViewInit, OnDestroy { } removeRow(mixMaterial: MixMaterialDto) { - this.mixMaterials = this.mixMaterials.filter(x => x.position != mixMaterial.position) + this.mixMaterials = this.mixMaterials.filter(x => x.position !== mixMaterial.position) + this._controls = this._controls.filter(x => x.position !== mixMaterial.position) + this._availableMaterialsEntries = this._availableMaterialsEntries.filter(x => x.position !== mixMaterial.position) for (let position = mixMaterial.position + 1; position < this.mixMaterials.length; position++) { this.updatePosition(this.getMixMaterialByPosition(position), position - 1, false) @@ -121,6 +124,23 @@ export class MixMaterialsForm implements AfterViewInit, OnDestroy { return mixMaterial.materialId ? this._allMaterials.filter(x => x.id === mixMaterial.materialId)[0].materialType.usePercentages : false } + isDecreasePositionButtonDisabled(mixMaterial: MixMaterialDto): boolean { + return mixMaterial.position <= 2 && this.areUnitsPercents(mixMaterial) + } + + isIncreasePositionButtonDisabled(mixMaterial: MixMaterialDto): boolean { + if (mixMaterial.position === this.mixMaterials.length) { + return true + } + + if (mixMaterial.position > 1) { + return false + } + + const nextMixMaterial = this.getMixMaterialByPosition(mixMaterial.position + 1) + return this.areUnitsPercents(nextMixMaterial) + } + get hasMaterialEditPermission(): boolean { return this.accountService.hasPermission(Permission.EDIT_MATERIALS) } @@ -129,6 +149,21 @@ export class MixMaterialsForm implements AfterViewInit, OnDestroy { return this._allMaterials ? this._allMaterials.length : 0 } + get updatedMixMaterials(): MixMaterialDto[] { + const updatedMixMaterials: MixMaterialDto[] = [] + this.mixMaterials.forEach(mixMaterial => { + const controls = this.getControlsByPosition(mixMaterial.position).controls + updatedMixMaterials.push({ + materialId: controls.materialId.value, + quantity: controls.quantity.value, + position: mixMaterial.position, + units: controls.units.value, + isPercents: this.areUnitsPercents(mixMaterial) + }) + }) + return updatedMixMaterials + } + get valid(): boolean { return this._controls .map(controls => controls.controls) @@ -138,7 +173,7 @@ export class MixMaterialsForm implements AfterViewInit, OnDestroy { } private get nextPosition(): number { - return this.mixMaterials.length + return this.mixMaterials.length + 1 } private getMixMaterialByPosition(position: number): MixMaterialDto { @@ -170,7 +205,7 @@ export class MixMaterialsForm implements AfterViewInit, OnDestroy { return this._allMaterials .filter(material => { // Prevent use of percents in first position - if (material.materialType.usePercentages && mixMaterial.position === 0) { + if (material.materialType.usePercentages && mixMaterial.position <= 1) { return false } diff --git a/src/app/modules/recipes/mix/mix.ts b/src/app/modules/recipes/mix/mix.ts index 35ccc73..edee932 100644 --- a/src/app/modules/recipes/mix/mix.ts +++ b/src/app/modules/recipes/mix/mix.ts @@ -14,6 +14,7 @@ import {Material} from '../../shared/model/material.model' import {MaterialService} from '../../material/service/material.service' import {CreForm} from '../../shared/components/forms/forms' import {MixMaterialsForm} from './materials-form' +import {MixSaveDto, MixService} from "../services/mix.service"; @Component({ selector: 'cre-mix-add', @@ -26,6 +27,7 @@ export class MixAdd extends SubscribingComponent { private _recipe: Recipe | null constructor( + private mixService: MixService, private recipeService: RecipeService, private materialTypeService: MaterialTypeService, private materialService: MaterialService, @@ -49,6 +51,13 @@ export class MixAdd extends SubscribingComponent { ) } + submit(dto: MixSaveDto) { + this.subscribeAndNavigate( + this.mixService.saveDto(dto), + `/color/edit/${this.recipe.id}` + ) + } + set recipe(recipe: Recipe) { this._recipe = recipe this.materials$ = this.materialService.getAllForMixCreation(recipe.id) @@ -110,6 +119,15 @@ export class MixForm { @Input() materialTypes: Observable @Input() materials: Observable + get formValues(): MixSaveDto { + return { + name: this.infoForm.mixName, + recipeId: this.recipe.id, + materialTypeId: this.infoForm.mixMaterialTypeId, + mixMaterials: this.mixMaterialsForm.updatedMixMaterials + } + } + get valid(): boolean { return this.infoForm?.valid && this.mixMaterialsForm?.valid } diff --git a/src/app/modules/recipes/pages/mix/mix-add/mix-add.component.html b/src/app/modules/recipes/pages/mix/mix-add/mix-add.component.html index 0b94ba5..bfb396a 100644 --- a/src/app/modules/recipes/pages/mix/mix-add/mix-add.component.html +++ b/src/app/modules/recipes/pages/mix/mix-add/mix-add.component.html @@ -1,6 +1,6 @@ - - + + + + + + diff --git a/src/app/modules/recipes/pages/mix/mix-add/mix-add.component.ts b/src/app/modules/recipes/pages/mix/mix-add/mix-add.component.ts index 258319e..7a277a9 100644 --- a/src/app/modules/recipes/pages/mix/mix-add/mix-add.component.ts +++ b/src/app/modules/recipes/pages/mix/mix-add/mix-add.component.ts @@ -54,7 +54,7 @@ export class MixAddComponent extends ErrorHandlingComponent { submit(values) { this.subscribeAndNavigate( - this.mixService.saveWithUnits(values.name, values.recipeId, values.materialTypeId, values.mixMaterials, values.units), + this.mixService.saveWithUnits(values.name, values.recipeId, values.materialTypeId, values.mixMaterials), `/color/edit/${this.recipeId}` ) } diff --git a/src/app/modules/recipes/pages/mix/mix-edit/mix-edit.component.html b/src/app/modules/recipes/pages/mix/mix-edit/mix-edit.component.html index 8133e72..03e26ae 100644 --- a/src/app/modules/recipes/pages/mix/mix-edit/mix-edit.component.html +++ b/src/app/modules/recipes/pages/mix/mix-edit/mix-edit.component.html @@ -1,6 +1,6 @@ - - + + + + + + diff --git a/src/app/modules/recipes/pages/mix/mix-edit/mix-edit.component.ts b/src/app/modules/recipes/pages/mix/mix-edit/mix-edit.component.ts index 1ab2a1b..cf3c1b5 100644 --- a/src/app/modules/recipes/pages/mix/mix-edit/mix-edit.component.ts +++ b/src/app/modules/recipes/pages/mix/mix-edit/mix-edit.component.ts @@ -64,7 +64,7 @@ export class MixEditComponent extends ErrorHandlingComponent { } this.subscribeAndNavigate( - this.mixService.updateWithUnits(this.mixId, values.name, values.materialTypeId, values.mixMaterials, values.units), + this.mixService.updateWithUnits(this.mixId, values.name, values.materialTypeId, values.mixMaterials), `/color/edit/${this.recipeId}` ) } diff --git a/src/app/modules/recipes/recipes.module.ts b/src/app/modules/recipes/recipes.module.ts index 2579711..392f961 100644 --- a/src/app/modules/recipes/recipes.module.ts +++ b/src/app/modules/recipes/recipes.module.ts @@ -9,7 +9,6 @@ import {RecipeInfoComponent} from './components/recipe-info/recipe-info.componen import {MixTableComponent} from './components/mix-table/mix-table.component' import {StepListComponent} from './components/step-list/step-list.component' import {StepTableComponent} from './components/step-table/step-table.component' -import {MixEditorComponent} from './components/mix-editor/mix-editor.component' import {UnitSelectorComponent} from './components/unit-selector/unit-selector.component' import {MixAddComponent} from './pages/mix/mix-add/mix-add.component' import {MixEditComponent} from './pages/mix/mix-edit/mix-edit.component' @@ -32,7 +31,6 @@ import {MixMaterialsForm} from "./mix/materials-form"; MixTableComponent, StepListComponent, StepTableComponent, - MixEditorComponent, UnitSelectorComponent, MixAddComponent, MixEditComponent, diff --git a/src/app/modules/recipes/services/mix.service.ts b/src/app/modules/recipes/services/mix.service.ts index cfd57bf..7466673 100644 --- a/src/app/modules/recipes/services/mix.service.ts +++ b/src/app/modules/recipes/services/mix.service.ts @@ -21,8 +21,17 @@ export class MixService { return this.api.get(`/recipe/mix/${id}`) } - saveWithUnits(name: string, recipeId: number, materialTypeId: number, mixMaterials: MixMaterialDto[], units: string): Observable { - return this.save(name, recipeId, materialTypeId, this.convertMixMaterialsToMl(mixMaterials, units)) + saveDto(dto: MixSaveDto): Observable { + return this.saveWithUnits( + dto.name, + dto.recipeId, + dto.materialTypeId, + dto.mixMaterials, + ) + } + + saveWithUnits(name: string, recipeId: number, materialTypeId: number, mixMaterials: MixMaterialDto[]): Observable { + return this.save(name, recipeId, materialTypeId, this.convertMixMaterialsToMl(mixMaterials)) } save(name: string, recipeId: number, materialTypeId: number, mixMaterials: MixMaterialDto[]): Observable { @@ -36,8 +45,8 @@ export class MixService { return this.api.post('/recipe/mix', body) } - updateWithUnits(id: number, name: string, materialTypeId: number, mixMaterials: MixMaterialDto[], units: string): Observable { - return this.update(id, name, materialTypeId, this.convertMixMaterialsToMl(mixMaterials, units)) + updateWithUnits(id: number, name: string, materialTypeId: number, mixMaterials: MixMaterialDto[]): Observable { + return this.update(id, name, materialTypeId, this.convertMixMaterialsToMl(mixMaterials)) } update(id: number, name: string, materialTypeId: number, mixMaterials: MixMaterialDto[]): Observable { @@ -56,11 +65,12 @@ export class MixService { return this.api.delete(`/recipe/mix/${id}`) } - private convertMixMaterialsToMl(mixMaterials: MixMaterialDto[], units: string): MixMaterialDto[] { - return mixMaterials.map(m => { - m.quantity = convertMixMaterialQuantity(m, units, UNIT_MILLILITER) - return m - }) + private convertMixMaterialsToMl(mixMaterials: MixMaterialDto[]): MixMaterialDto[] { + return mixMaterials.map(mixMaterial => ({ + ...mixMaterial, + quantity: convertMixMaterialQuantity(mixMaterial, UNIT_MILLILITER), + units: UNIT_MILLILITER + })) } private appendMixMaterialsToBody(mixMaterials: MixMaterialDto[], body: any) { @@ -74,3 +84,10 @@ export class MixService { } } +export interface MixSaveDto { + name: string + recipeId: number + materialTypeId: number + mixMaterials: MixMaterialDto[] +} + diff --git a/src/app/modules/shared/components/inputs/select.html b/src/app/modules/shared/components/inputs/select.html index e17b4a4..14a03ee 100644 --- a/src/app/modules/shared/components/inputs/select.html +++ b/src/app/modules/shared/components/inputs/select.html @@ -1,14 +1,13 @@ {{label}} - + {{entry.display || entry.value}} - + {{entry.display || entry.value}} diff --git a/src/app/modules/shared/components/tables/position-buttons.html b/src/app/modules/shared/components/tables/position-buttons.html index cb85502..f953d7b 100644 --- a/src/app/modules/shared/components/tables/position-buttons.html +++ b/src/app/modules/shared/components/tables/position-buttons.html @@ -3,14 +3,14 @@ mat-mini-fab color="primary" class="mr-1" - [disabled]="position <= min" + [disabled]="disableDecreaseButton || position <= min" (click)="decreasePosition()"> diff --git a/src/app/modules/shared/components/tables/tables.ts b/src/app/modules/shared/components/tables/tables.ts index b98a7a3..c555716 100644 --- a/src/app/modules/shared/components/tables/tables.ts +++ b/src/app/modules/shared/components/tables/tables.ts @@ -95,6 +95,8 @@ export class CrePositionButtons { @Input() min = 0 @Input() max: number @Input() hidden = false + @Input() disableDecreaseButton = false + @Input() disableIncreaseButton = false @Output() positionChange = new EventEmitter(); diff --git a/src/app/modules/shared/model/recipe.model.ts b/src/app/modules/shared/model/recipe.model.ts index 3b096e0..b0849cd 100644 --- a/src/app/modules/shared/model/recipe.model.ts +++ b/src/app/modules/shared/model/recipe.model.ts @@ -1,6 +1,7 @@ import {Material} from './material.model' import {Company} from './company.model' import {Group} from './user' +import {UNIT_MILLILITER} from "../units"; export class Recipe { public id: number @@ -53,7 +54,8 @@ export class MixMaterialDto { public materialId: number, public quantity: number, public isPercents: boolean, - public position: number + public position: number, + public units: string ) { } } @@ -103,7 +105,8 @@ export function mixMaterialsAsMixMaterialsDto(mix: Mix): MixMaterialDto[] { m.material.id, m.quantity, m.material.materialType.usePercentages, - m.position + m.position, + UNIT_MILLILITER ))) } diff --git a/src/app/modules/shared/units.ts b/src/app/modules/shared/units.ts index 403f136..adbb475 100644 --- a/src/app/modules/shared/units.ts +++ b/src/app/modules/shared/units.ts @@ -25,8 +25,8 @@ export const UNIT_RATIOS = { } } -export function convertMixMaterialQuantity(computedQuantity: MixMaterialDto, from: string, to: string): number { - return !computedQuantity.isPercents ? convertQuantity(computedQuantity.quantity, from, to) : computedQuantity.quantity +export function convertMixMaterialQuantity(mixMaterial: MixMaterialDto, to: string): number { + return !mixMaterial.isPercents ? convertQuantity(mixMaterial.quantity, mixMaterial.units, to) : mixMaterial.quantity } export function convertQuantity(quantity: number, from: string, to: string): number {