Ajout de messages d'erreur
This commit is contained in:
parent
99cf9f7c0a
commit
4910bf65ce
|
@ -1,6 +1,6 @@
|
|||
import {Component, EventEmitter, Input, Output, ViewChild} from '@angular/core'
|
||||
import {Mix, MixMaterial, Recipe} from '../../../shared/model/recipe.model'
|
||||
import {SubscribingComponent} from '../../../shared/components/subscribing.component'
|
||||
import {ErrorHandlingComponent} from '../../../shared/components/subscribing.component'
|
||||
import {MixService} from '../../services/mix.service'
|
||||
import {Observable} from 'rxjs'
|
||||
import {RecipeService} from '../../services/recipe.service'
|
||||
|
@ -23,7 +23,7 @@ import {MatSelect} from '@angular/material/select'
|
|||
templateUrl: './mix-editor.component.html',
|
||||
styleUrls: ['./mix-editor.component.sass']
|
||||
})
|
||||
export class MixEditorComponent extends SubscribingComponent {
|
||||
export class MixEditorComponent extends ErrorHandlingComponent {
|
||||
@ViewChild('mixTable') mixTable: MatTable<MixMaterial>
|
||||
@ViewChild('deleteConfirmBox') deleteConfirmBox: ConfirmBoxComponent
|
||||
|
||||
|
@ -47,6 +47,16 @@ export class MixEditorComponent extends SubscribingComponent {
|
|||
hoveredMixMaterial: MixMaterial | null
|
||||
columns = ['position', 'material', 'quantity', 'units', 'buttonRemove']
|
||||
|
||||
deleting = false
|
||||
handledErrorModels = [{
|
||||
filter: error => error.status === 409 && !this.deleting,
|
||||
messageProducer: error => `Un mélange avec le nom '${error.id}' existe déjà dans cette recette`
|
||||
}, {
|
||||
filter: error => error.error.status === 409 && this.deleting,
|
||||
consumer: () => this.deleting = false,
|
||||
messageProducer: () => 'Ce mélange est utilisé par un ou plusieurs autres mélanges'
|
||||
}]
|
||||
|
||||
constructor(
|
||||
private mixService: MixService,
|
||||
private recipeService: RecipeService,
|
||||
|
@ -116,6 +126,7 @@ export class MixEditorComponent extends SubscribingComponent {
|
|||
}
|
||||
|
||||
delete() {
|
||||
this.deleting = true
|
||||
this.subscribeAndNavigate(this.mixService.delete(this.mixId), `/color/edit/${this.recipeId}`)
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@ import {Component} from '@angular/core'
|
|||
import {ErrorHandlingComponent} from '../../../shared/components/subscribing.component'
|
||||
import {Company} from '../../../shared/model/company.model'
|
||||
import {FormField} from '../../../shared/components/entity-add/entity-add.component'
|
||||
import {Validators} from '@angular/forms'
|
||||
import {CompanyService} from '../../service/company.service'
|
||||
import {ActivatedRoute, Router} from '@angular/router'
|
||||
import {ErrorModel, ErrorService} from '../../../shared/service/error.service'
|
||||
|
@ -27,9 +26,13 @@ export class EditComponent extends ErrorHandlingComponent {
|
|||
}
|
||||
]
|
||||
|
||||
deleting = false
|
||||
handledErrorModels: ErrorModel[] = [{
|
||||
filter: error => error.status === 409,
|
||||
filter: error => error.status === 409 && !this.deleting,
|
||||
messageProducer: error => `Une bannière avec le nom '${error.error.id}' existe déjà`
|
||||
}, {
|
||||
filter: error => error.status === 409 && this.deleting,
|
||||
messageProducer: () => 'Cette bannière est utilisée par une ou plusieurs recettes'
|
||||
}]
|
||||
|
||||
constructor(
|
||||
|
@ -61,6 +64,7 @@ export class EditComponent extends ErrorHandlingComponent {
|
|||
}
|
||||
|
||||
delete() {
|
||||
this.deleting = true
|
||||
this.subscribeAndNavigate(
|
||||
this.companyService.delete(this.company.id),
|
||||
'/catalog/company/list'
|
||||
|
|
|
@ -41,14 +41,19 @@ export class EditComponent extends ErrorHandlingComponent {
|
|||
]
|
||||
}
|
||||
]
|
||||
submittedValues: any | null
|
||||
|
||||
deleting = false
|
||||
submittedValues: any | null
|
||||
handledErrorModels: ErrorModel[] = [{
|
||||
filter: error => error.status === 409 && error.error.id === this.submittedValues.name,
|
||||
filter: error => error.status === 409 && !this.deleting && error.error.id === this.submittedValues.name,
|
||||
messageProducer: error => `Un type de produit avec le nom '${error.error.id}' existe déjà`
|
||||
}, {
|
||||
filter: error => error.status === 409 && error.error.id === this.submittedValues.prefix,
|
||||
filter: error => error.status === 409 && !this.deleting && error.error.id === this.submittedValues.prefix,
|
||||
messageProducer: error => `Un type de produit avec le préfixe '${error.error.id}' existe déjà`
|
||||
}, {
|
||||
filter: error => error.status === 409 && this.deleting,
|
||||
consumer: () => this.deleting = true,
|
||||
messageProducer: () => 'Ce type de produit est utilisé dans une ou plusieurs recettes ou produits'
|
||||
}]
|
||||
|
||||
constructor(
|
||||
|
@ -81,6 +86,7 @@ export class EditComponent extends ErrorHandlingComponent {
|
|||
}
|
||||
|
||||
delete() {
|
||||
this.deleting = true
|
||||
this.subscribeAndNavigate(
|
||||
this.materialTypeService.delete(this.materialType.id),
|
||||
'/catalog/materialtype/list'
|
||||
|
|
|
@ -11,113 +11,119 @@ import {environment} from '../../../../../environments/environment'
|
|||
import {ErrorModel, ErrorService} from '../../../shared/service/error.service'
|
||||
|
||||
@Component({
|
||||
selector: 'cre-edit',
|
||||
templateUrl: './edit.component.html',
|
||||
styleUrls: ['./edit.component.sass']
|
||||
selector: 'cre-edit',
|
||||
templateUrl: './edit.component.html',
|
||||
styleUrls: ['./edit.component.sass']
|
||||
})
|
||||
export class EditComponent extends ErrorHandlingComponent {
|
||||
@ViewChild('simdutTemplate', {static: true}) simdutTemplateRef
|
||||
@ViewChild('simdutTemplate', {static: true}) simdutTemplateRef
|
||||
|
||||
material: Material | null
|
||||
formFields: FormField[] = [
|
||||
{
|
||||
name: 'name',
|
||||
label: 'Code',
|
||||
icon: 'form-textbox',
|
||||
type: 'text',
|
||||
required: true,
|
||||
errorMessages: [
|
||||
{conditionFn: (errors) => errors.required, message: 'Un code est requis'}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'inventoryQuantity',
|
||||
label: 'Quantité en inventaire',
|
||||
icon: 'beaker-outline',
|
||||
type: 'number',
|
||||
required: true,
|
||||
validator: Validators.min(0),
|
||||
errorMessages: [
|
||||
{conditionFn: errors => errors.required, message: 'Une quantité en inventaire est requise'},
|
||||
{conditionFn: errors => errors.min, message: 'La quantité doit être supérieure ou égale à 0'}
|
||||
],
|
||||
step: '0.01'
|
||||
},
|
||||
{
|
||||
name: 'materialType',
|
||||
label: 'Type de produit',
|
||||
icon: 'shape-outline',
|
||||
type: 'select',
|
||||
required: true,
|
||||
errorMessages: [
|
||||
{conditionFn: errors => errors.required, message: 'Un type de produit est requis'}
|
||||
],
|
||||
valueFn: material => material.materialType.id,
|
||||
options$: this.materialTypeService.all.pipe(map(types => types.map(t => {
|
||||
return {value: t.id, label: t.name}
|
||||
})))
|
||||
},
|
||||
{
|
||||
name: 'simdutFile',
|
||||
label: 'Fiche signalitique',
|
||||
icon: 'file-outline',
|
||||
type: 'file',
|
||||
fileType: 'application/pdf'
|
||||
material: Material | null
|
||||
formFields: FormField[] = [
|
||||
{
|
||||
name: 'name',
|
||||
label: 'Code',
|
||||
icon: 'form-textbox',
|
||||
type: 'text',
|
||||
required: true,
|
||||
errorMessages: [
|
||||
{conditionFn: (errors) => errors.required, message: 'Un code est requis'}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'inventoryQuantity',
|
||||
label: 'Quantité en inventaire',
|
||||
icon: 'beaker-outline',
|
||||
type: 'number',
|
||||
required: true,
|
||||
validator: Validators.min(0),
|
||||
errorMessages: [
|
||||
{conditionFn: errors => errors.required, message: 'Une quantité en inventaire est requise'},
|
||||
{conditionFn: errors => errors.min, message: 'La quantité doit être supérieure ou égale à 0'}
|
||||
],
|
||||
step: '0.01'
|
||||
},
|
||||
{
|
||||
name: 'materialType',
|
||||
label: 'Type de produit',
|
||||
icon: 'shape-outline',
|
||||
type: 'select',
|
||||
required: true,
|
||||
errorMessages: [
|
||||
{conditionFn: errors => errors.required, message: 'Un type de produit est requis'}
|
||||
],
|
||||
valueFn: material => material.materialType.id,
|
||||
options$: this.materialTypeService.all.pipe(map(types => types.map(t => {
|
||||
return {value: t.id, label: t.name}
|
||||
})))
|
||||
},
|
||||
{
|
||||
name: 'simdutFile',
|
||||
label: 'Fiche signalitique',
|
||||
icon: 'file-outline',
|
||||
type: 'file',
|
||||
fileType: 'application/pdf'
|
||||
}
|
||||
]
|
||||
hasSimdut = false
|
||||
selectedSimdutFile: File | null
|
||||
|
||||
deleting = false
|
||||
handledErrorModels: ErrorModel[] = [{
|
||||
filter: error => error.status === 409 && !this.deleting,
|
||||
messageProducer: error => `Un produit avec le nom '${error.error.id}' existe déjà`
|
||||
}, {
|
||||
filter: error => error.status === 409 && this.deleting,
|
||||
consumer: () => this.deleting = false,
|
||||
messageProducer: () => `Ce produit est utilisé dans une plusieurs recettes`
|
||||
}]
|
||||
|
||||
constructor(
|
||||
private materialService: MaterialService,
|
||||
private materialTypeService: MaterialTypeService,
|
||||
errorService: ErrorService,
|
||||
router: Router,
|
||||
activatedRoute: ActivatedRoute
|
||||
) {
|
||||
super(errorService, activatedRoute, router)
|
||||
}
|
||||
]
|
||||
hasSimdut = false
|
||||
selectedSimdutFile: File | null
|
||||
|
||||
handledErrorModels: ErrorModel[] = [{
|
||||
filter: error => error.status === 409,
|
||||
messageProducer: error => `Un produit avec le nom '${error.error.id}' existe déjà`
|
||||
}]
|
||||
ngOnInit() {
|
||||
super.ngOnInit()
|
||||
|
||||
constructor(
|
||||
private materialService: MaterialService,
|
||||
private materialTypeService: MaterialTypeService,
|
||||
errorService: ErrorService,
|
||||
router: Router,
|
||||
activatedRoute: ActivatedRoute
|
||||
) {
|
||||
super(errorService, activatedRoute, router)
|
||||
}
|
||||
this.formFields[3].template = this.simdutTemplateRef
|
||||
|
||||
ngOnInit() {
|
||||
super.ngOnInit()
|
||||
const id = parseInt(this.activatedRoute.snapshot.paramMap.get('id'))
|
||||
this.subscribeEntityById(
|
||||
this.materialService,
|
||||
id,
|
||||
material => this.material = material,
|
||||
'/catalog/material/list'
|
||||
)
|
||||
|
||||
this.formFields[3].template = this.simdutTemplateRef
|
||||
this.subscribe(
|
||||
this.materialService.hasSimdut(id),
|
||||
b => this.hasSimdut = b
|
||||
)
|
||||
}
|
||||
|
||||
const id = parseInt(this.activatedRoute.snapshot.paramMap.get('id'))
|
||||
this.subscribeEntityById(
|
||||
this.materialService,
|
||||
id,
|
||||
material => this.material = material,
|
||||
'/catalog/material/list'
|
||||
)
|
||||
submit(values) {
|
||||
this.subscribeAndNavigate(
|
||||
this.materialService.update(this.material.id, values.name, values.inventoryQuantity, values.materialType, this.selectedSimdutFile),
|
||||
'/catalog/material/list'
|
||||
)
|
||||
}
|
||||
|
||||
this.subscribe(
|
||||
this.materialService.hasSimdut(id),
|
||||
b => this.hasSimdut = b
|
||||
)
|
||||
}
|
||||
delete() {
|
||||
this.deleting = true
|
||||
this.subscribeAndNavigate(
|
||||
this.materialService.delete(this.material.id),
|
||||
'/catalog/material/list'
|
||||
)
|
||||
}
|
||||
|
||||
submit(values) {
|
||||
this.subscribeAndNavigate(
|
||||
this.materialService.update(this.material.id, values.name, values.inventoryQuantity, values.materialType, this.selectedSimdutFile),
|
||||
'/catalog/material/list'
|
||||
)
|
||||
}
|
||||
|
||||
delete() {
|
||||
this.subscribeAndNavigate(
|
||||
this.materialService.delete(this.material.id),
|
||||
'/catalog/material/list'
|
||||
)
|
||||
}
|
||||
|
||||
openSimdutUrl() {
|
||||
const simdutUrl = environment.apiUrl + `/material/${this.material.id}/simdut`
|
||||
window.open(simdutUrl, '_blank')
|
||||
}
|
||||
openSimdutUrl() {
|
||||
const simdutUrl = environment.apiUrl + `/material/${this.material.id}/simdut`
|
||||
window.open(simdutUrl, '_blank')
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue