diff --git a/src/app/modules/shared/components/inputs/checkbox.html b/src/app/modules/shared/components/inputs/checkbox.html index dbadabf..54370a5 100644 --- a/src/app/modules/shared/components/inputs/checkbox.html +++ b/src/app/modules/shared/components/inputs/checkbox.html @@ -1,3 +1,6 @@ - - {{label}} +{{label}} + diff --git a/src/app/modules/shared/components/inputs/inputs.module.ts b/src/app/modules/shared/components/inputs/inputs.module.ts index 17a81fb..23d624e 100644 --- a/src/app/modules/shared/components/inputs/inputs.module.ts +++ b/src/app/modules/shared/components/inputs/inputs.module.ts @@ -42,15 +42,16 @@ import {MatCheckboxModule} from '@angular/material/checkbox' CreButtonsModule, MatCheckboxModule, ], - exports: [ - CreInputComponent, - CreComboBoxComponent, - CreChipComboBoxComponent, - CreChipInputComponent, - CreAutocompleteInputComponent, - CreFileInputComponent, - CreBoolConfig - ] + exports: [ + CreInputComponent, + CreComboBoxComponent, + CreChipComboBoxComponent, + CreChipInputComponent, + CreAutocompleteInputComponent, + CreFileInputComponent, + CreBoolConfig, + CreCheckboxInputComponent + ] }) export class CreInputsModule { } diff --git a/src/app/modules/shared/components/inputs/inputs.ts b/src/app/modules/shared/components/inputs/inputs.ts index b9ba3ac..bff4c27 100644 --- a/src/app/modules/shared/components/inputs/inputs.ts +++ b/src/app/modules/shared/components/inputs/inputs.ts @@ -187,6 +187,9 @@ export class CreChipComboBoxComponent extends CreChipInputComponent implements O export class CreCheckboxInputComponent { @Input() label: string @Input() control: FormControl + @Input() checked: boolean + + @Output() checkedChange = new EventEmitter() } @Component({ diff --git a/src/app/modules/shared/model/config.model.ts b/src/app/modules/shared/model/config.model.ts index 2d96d4d..6144c2a 100644 --- a/src/app/modules/shared/model/config.model.ts +++ b/src/app/modules/shared/model/config.model.ts @@ -8,6 +8,7 @@ export class Config { static readonly DATABASE_PASSWORD = 'database.password' static readonly DATABASE_VERSION = 'database.version.supported' static readonly TOUCH_UP_KIT_CACHE_PDF = 'touchupkit.pdf.cache' + static readonly TOUCH_UP_KIT_EXPIRATION = 'touchupkit.expiration' static readonly EMERGENCY_MODE = 'env.emergency' static readonly APP_VERSION = 'env.version' static readonly JAVA_VERSION = 'env.java.version' diff --git a/src/app/modules/shared/model/touch-up-kit.model.ts b/src/app/modules/shared/model/touch-up-kit.model.ts index df625e5..7cf0850 100644 --- a/src/app/modules/shared/model/touch-up-kit.model.ts +++ b/src/app/modules/shared/model/touch-up-kit.model.ts @@ -6,6 +6,8 @@ export class TouchUpKit { public company: string, public quantity: number, public shippingDate: string, + public completed: boolean, + public completionDate: string, public finish: string[], public material: string[], public content: TouchUpKitProduct[] @@ -18,7 +20,8 @@ export class TouchUpKitProduct { public id: number, public name: string, public description: string | null, - public quantity: number + public quantity: number, + public ready: boolean ) { } } diff --git a/src/app/modules/touch-up-kit/components/form.ts b/src/app/modules/touch-up-kit/components/form.ts index 6340f72..0a77b7f 100644 --- a/src/app/modules/touch-up-kit/components/form.ts +++ b/src/app/modules/touch-up-kit/components/form.ts @@ -65,6 +65,8 @@ export class TouchUpKitForm extends SubscribingComponent { company: this.controls.company.value, quantity: this.controls.quantity.value, shippingDate: this.controls.shippingDate.value, + completed: false, + completionDate: null, finish: this.selectedFinish, material: this.selectedMaterial, content: this.touchUpKitContent diff --git a/src/app/modules/touch-up-kit/components/product-editor.ts b/src/app/modules/touch-up-kit/components/product-editor.ts index ea2d840..9ea7c89 100644 --- a/src/app/modules/touch-up-kit/components/product-editor.ts +++ b/src/app/modules/touch-up-kit/components/product-editor.ts @@ -51,7 +51,8 @@ export class TouchUpKitProductEditor implements OnInit { id: null, name: '', description: '', - quantity: 1 + quantity: 1, + ready: false } } } diff --git a/src/app/modules/touch-up-kit/pages/banner.html b/src/app/modules/touch-up-kit/pages/banner.html index 4da19bc..531f9dc 100644 --- a/src/app/modules/touch-up-kit/pages/banner.html +++ b/src/app/modules/touch-up-kit/pages/banner.html @@ -14,6 +14,7 @@

Matériel: {{material}}

+ Complété le {{completionDate}} diff --git a/src/app/modules/touch-up-kit/pages/details.html b/src/app/modules/touch-up-kit/pages/details.html index 99bbb6c..bb5b358 100644 --- a/src/app/modules/touch-up-kit/pages/details.html +++ b/src/app/modules/touch-up-kit/pages/details.html @@ -1,10 +1,18 @@
-
- - -
+ + + Retour + PDF + + + Enregistrer + + Compléter + + + @@ -24,5 +32,18 @@ Quantité {{product.quantity}} + + + Prêt + + + + + + +
diff --git a/src/app/modules/touch-up-kit/pages/list.html b/src/app/modules/touch-up-kit/pages/list.html index e5fc496..1cb372b 100644 --- a/src/app/modules/touch-up-kit/pages/list.html +++ b/src/app/modules/touch-up-kit/pages/list.html @@ -5,7 +5,7 @@ - + Project {{touchUpKit.project}} @@ -51,3 +51,58 @@ + + + + Kits de retouche complétés + + + + + Project + {{touchUpKit.project}} + + + + Chariot + {{touchUpKit.buggy}} + + + + Bannière + {{touchUpKit.company}} + + + + Date de livraison + {{shippingDate(touchUpKit)}} + + + + Date de complétion + {{completionDate(touchUpKit)}} + + + + Date d'expiration + {{expirationDate(touchUpKit)}} + + + + + + PDF + + + + + + + + Détails + + + + + + diff --git a/src/app/modules/touch-up-kit/pages/touchupkit.ts b/src/app/modules/touch-up-kit/pages/touchupkit.ts index 2f6b60c..57b3ed5 100644 --- a/src/app/modules/touch-up-kit/pages/touchupkit.ts +++ b/src/app/modules/touch-up-kit/pages/touchupkit.ts @@ -9,6 +9,10 @@ import {ActivatedRoute, Router} from '@angular/router' import {Permission} from '../../shared/model/user' import {RecipeService} from '../../colors/services/recipe.service' import {AppState} from '../../shared/app-state' +import {map} from 'rxjs/operators' +import {LocalDate, Period} from 'js-joda' +import {ConfigService} from '../../shared/service/config.service' +import {Config} from '../../shared/model/config.model' @Component({ selector: 'touchupkit-banner', @@ -24,6 +28,10 @@ export class TouchUpKitBanner { return formatDate(this.touchUpKit.shippingDate) } + get completionDate(): string { + return formatDate(this.touchUpKit.completionDate) + } + get material(): string { return reduceDashes(this.touchUpKit.material) } @@ -35,11 +43,21 @@ export class TouchUpKitBanner { }) export class TouchUpKitList extends ErrorHandlingComponent { touchUpKits$ = this.touchUpKitService.all + completedTouchUpKits$ = this.touchUpKits$.pipe( + map(kits => kits.filter(k => k.completed)) + ) + uncompletedTouchUpKits$ = this.touchUpKits$.pipe( + map(kits => kits.filter(k => !k.completed)) + ) + expirationPeriod: Period | null + columns = ['project', 'buggy', 'company', 'shippingDate', 'pdfButton', 'detailsButton', 'editButton'] + completedColumns = ['project', 'buggy', 'company', 'shippingDate', 'completionDate', 'expirationDate', 'pdfButton', 'detailsButton'] constructor( private touchUpKitService: TouchUpKitService, private accountService: AccountService, + private configService: ConfigService, private appState: AppState, errorService: ErrorService, router: Router, @@ -49,10 +67,32 @@ export class TouchUpKitList extends ErrorHandlingComponent { this.appState.title = 'Kits de retouche' } + ngOnInit() { + super.ngOnInit() + + this.subscribe( + this.configService.get(Config.TOUCH_UP_KIT_EXPIRATION), + config => this.expirationPeriod = Period.parse(config.content) + ) + } + openTouchUpKitPdf(touchUpKit: TouchUpKit) { openTouchUpKit(touchUpKit) } + shippingDate(touchUpKit: TouchUpKit): string { + return formatDate(touchUpKit.shippingDate) + } + + completionDate(touchUpKit: TouchUpKit): string { + return formatDate(touchUpKit.completionDate) + } + + expirationDate(touchUpKit: TouchUpKit): string { + const completionDate = LocalDate.parse(touchUpKit.completionDate) + return formatDate(completionDate.plus(this.expirationPeriod).toString()) + } + get canEditTouchUpKits(): boolean { return this.accountService.hasPermission(Permission.EDIT_TOUCH_UP_KITS) } @@ -64,11 +104,12 @@ export class TouchUpKitList extends ErrorHandlingComponent { }) export class TouchUpKitDetails extends ErrorHandlingComponent { touchUpKit: TouchUpKit | null - contentTableCols = ['name', 'description', 'quantity'] + contentTableCols = ['name', 'description', 'quantity', 'ready'] constructor( private touchUpKitService: TouchUpKitService, private recipeService: RecipeService, + private accountService: AccountService, private appState: AppState, errorService: ErrorService, activatedRoute: ActivatedRoute, @@ -93,6 +134,24 @@ export class TouchUpKitDetails extends ErrorHandlingComponent { openPdf() { openTouchUpKit(this.touchUpKit) } + + save() { + this.subscribeAndNavigate( + this.touchUpKitService.update(this.touchUpKit), + `/misc/touch-up-kit/details/${this.touchUpKit.id}` + ) + } + + complete() { + this.subscribeAndNavigate( + this.touchUpKitService.complete(this.touchUpKit), + '/misc/touch-up-kit' + ) + } + + get canEditTouchUpKits(): boolean { + return this.accountService.hasPermission(Permission.EDIT_TOUCH_UP_KITS) + } } @Component({ diff --git a/src/app/modules/touch-up-kit/service/touch-up-kit.service.ts b/src/app/modules/touch-up-kit/service/touch-up-kit.service.ts index 18aa7b2..99707d3 100644 --- a/src/app/modules/touch-up-kit/service/touch-up-kit.service.ts +++ b/src/app/modules/touch-up-kit/service/touch-up-kit.service.ts @@ -1,7 +1,7 @@ import {Injectable} from '@angular/core' import {ApiService} from '../../shared/service/api.service' import {Observable} from 'rxjs' -import {TouchUpKit, TouchUpKitProduct} from '../../shared/model/touch-up-kit.model' +import {TouchUpKit} from '../../shared/model/touch-up-kit.model' @Injectable({ providedIn: 'root' @@ -28,6 +28,10 @@ export class TouchUpKitService { return this.api.put('/touchupkit', touchUpKit) } + complete(touchUpKit: TouchUpKit): Observable { + return this.api.put(`/touchupkit/${touchUpKit.id}/complete`) + } + delete(id: number): Observable { return this.api.delete(`/touchupkit/${id}`) } diff --git a/src/styles.sass b/src/styles.sass index 218755c..e026f75 100644 --- a/src/styles.sass +++ b/src/styles.sass @@ -41,6 +41,17 @@ mat-card text-transform: uppercase letter-spacing: 1.25px + &.named-table mat-card-content + margin: 0 + padding: 0 + + table + border: none + box-shadow: none + + th + border-radius: 0 !important + table box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 1px 3px 0 rgba(0, 0, 0, 0.12) max-width: 90vw