diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000000000000000000000000000000000..85f2c7e2feed56a9c55677c995edcbfc40a56877 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Chrome", + "type": "chrome", + "request": "launch", + "url": "http://localhost:4200", + "webRoot": "${workspaceFolder}" + } + ] +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 66315f88450c64259609039dfbd794322f5ece57..a2a659eddeeadef57b040adc282d89077da1c7ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,28 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.4.0](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/compare/v2.3.3...v2.4.0) (2023-08-21) + + +### Features + +* **indicators:** introduce new orientation and user activity endpoints ([04b5dbf](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/04b5dbf58c470df0b8ecb4c16e264d98c233d6ee)) +* **onboarding:** sort structure types ([f228c4a](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/f228c4a20cc003d8d726204c48f440db00b16e96)) +* **profile:** appointment choice ([9413235](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/941323544f8c6201daae0b3be63d653a1401339f)) +* **profile:** manage newsletter subscription ([70937f1](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/70937f127c1b174c5decae453d9dc0ce83565f00)) +* **structure:** add structure types ([86be064](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/86be06449b936e4897f7e804ca9cb29057a811fd)) +* **structureDetails:** make an appointement from a structure (RDV en ligne V2) ([a3bdb21](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/a3bdb2128082ba73ae755b8b01d04a64baad8c00)) +* **structure:** update structure CNFS label from user job ([917c574](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/917c574673eece1ab109cb93a75dab242291aead)) + + +### Bug Fixes + +* **edit-structure:** warning when structureType field is missing ([e0411d9](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/e0411d926ce0239918504ec3f275c3d89d250673)) +* **onboarding:** personal information step title ([f144431](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/f144431603bae37bfa4985f811456cec3804e79a)) +* **orientation:** reset rdv ([67675a6](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/67675a6a8d3e2d139e8b31793c0881ea6860d8ff)) +* **phone-mail validators:** add a cross check validation to this fields ([c758ea2](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/c758ea2eb3bd55d50ebe9b8810751bcf99f5d914)) +* **rdv:** disable next button before socialWorkerId is selected ([6346e6d](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/6346e6d2a2edba8633b6c71786ab2118e69b3845)) + ### [2.3.3](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/compare/v2.3.2...v2.3.3) (2023-06-23) diff --git a/package-lock.json b/package-lock.json index 168f44bfd63b8653b6e48254470c4472cd99dbe3..2c77e83b4cac47f27b47c3afc5f5aea540814a54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "pamn", - "version": "2.2.0", + "version": "2.3.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 2e39497bb932dc756b277857aee0b603369ff32a..fda56ebe74d21afea8575a9a0d1ed4077ac18a66 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pamn", - "version": "2.3.3", + "version": "2.4.0", "scripts": { "ng": "ng", "start": "ng serve --configuration=local,fr --proxy-config proxy.conf.json", diff --git a/src/app/admin/components/claim-structure/claim-structure.component.ts b/src/app/admin/components/claim-structure/claim-structure.component.ts index 3dd2a7f23d31d599b08ee153112922350f63ef37..ca49f70f528966768c866697848ab702c9303dd4 100644 --- a/src/app/admin/components/claim-structure/claim-structure.component.ts +++ b/src/app/admin/components/claim-structure/claim-structure.component.ts @@ -12,9 +12,6 @@ import { AdminService } from '../../services/admin.service'; }) export class ClaimStructureComponent implements OnInit { public demandsAttachment: StructureAdminInfo[]; - public structuresUnclaimed: StructureAdminInfo[]; - public isClaimedStructure: boolean = true; - public isUnclaimedStructure: boolean = false; constructor( private adminService: AdminService, diff --git a/src/app/carto/carto.component.html b/src/app/carto/carto.component.html index 18994671ed0b2b212dde82157c60b69e04a9f697..90416a26c442454098a57ae95aa29aba47ddc7df 100644 --- a/src/app/carto/carto.component.html +++ b/src/app/carto/carto.component.html @@ -11,12 +11,14 @@ [isLoading]="isLoadingStructures" [selectedStructureList]="structuresSelected" [isOrientation]="isOrientationForm" + [isOrientationRdv]="isOrientationRdv" [location]="currentLocation" [selectedStructure]="currentStructure" [ngClass]="{ mapPhone: isMapPhone === true }" (displayMapMarkerId)="setMapMarkerId($event)" (selectedMarkerId)="setSelectedMarkerId($event)" (structureSelected)="selectStructure($event)" + (structureRDVSelected)="selectStructureRDV($event)" /> <div class="btnSwitch"> <app-button diff --git a/src/app/carto/carto.component.ts b/src/app/carto/carto.component.ts index 0571ea605c61111d5d06d522488c2e77fb8c08b5..8a2cd0813255865064e4b4ead2a5de876de697ad 100644 --- a/src/app/carto/carto.component.ts +++ b/src/app/carto/carto.component.ts @@ -2,7 +2,6 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { Meta } from '@angular/platform-browser'; import { ActivatedRoute } from '@angular/router'; import * as _ from 'lodash'; -import { Observable, firstValueFrom } from 'rxjs'; import { GeoJson } from '../map/models/geojson.model'; import { Structure } from '../models/structure.model'; import { ProfileService } from '../profile/services/profile.service'; @@ -19,11 +18,13 @@ import { CustomRegExp } from '../utils/CustomRegExp'; }) export class CartoComponent implements OnInit { @Input() public isOrientationForm = false; + @Input() public isOrientationRdv = false; @Input() public filters: Filter[] = []; @Input() public userLatitude: number = null; @Input() public userLongitude: number = null; @Input() public structuresSelected: Structure[] = []; @Output() structureSelection = new EventEmitter<any>(); + @Output() structureSelectionRDV = new EventEmitter<any>(); public structures: Structure[] = []; public isLoadingStructures: boolean = true; @@ -69,6 +70,9 @@ export class CartoComponent implements OnInit { public getStructures(filters: Filter[]): void { this.isLoadingStructures = true; + let mustLoadStructures: boolean = false; + let sortByDistance: boolean = false; + const queryString = _.find(filters, { name: 'query' }); if (queryString) { this.searchedValue = queryString.value; @@ -83,20 +87,20 @@ export class CartoComponent implements OnInit { this.isLoadingStructures = false; }); } else { - this.structureService.getStructures(filters).subscribe((structures) => { - if (structures) { - this.updateStructuresDistance(structures, this.userLongitude, this.userLatitude, false); - } else { - this.structures = []; - } - this.isLoadingStructures = false; - }); + mustLoadStructures = true; + sortByDistance = false; } } else { this.searchedValue = null; + mustLoadStructures = true; + sortByDistance = true; + } + + if (mustLoadStructures) { this.structureService.getStructures(filters).subscribe((structures) => { if (structures) { - this.updateStructuresDistance(structures, this.userLongitude, this.userLatitude); + if (this.isOrientationRdv) structures = structures.filter((structure) => structure.hasUserWithAppointmentDN); + this.updateStructuresDistance(structures, this.userLongitude, this.userLatitude, sortByDistance); } else { this.structures = []; } @@ -123,9 +127,6 @@ export class CartoComponent implements OnInit { if (lon && lat) { structure = this.getStructurePosition(structure, lon, lat); } - if (this.isAdmin) { - firstValueFrom(this.isClaimed(structure)).then((isClaimed) => (isClaimed = structure.isClaimed)); - } return structure; }) ).then((structureList) => { @@ -221,12 +222,12 @@ export class CartoComponent implements OnInit { return this.profileService.isAdmin(); } - public isClaimed(structure: Structure): Observable<boolean> { - return this.structureService.isClaimed(structure._id, null); - } - public selectStructure(structures: Structure[]): void { this.structuresSelected = structures; this.structureSelection.emit(this.structuresSelected); } + + public selectStructureRDV(structure: Structure): void { + this.structureSelectionRDV.emit(structure); + } } diff --git a/src/app/form/footer-form/footer-form.component.ts b/src/app/form/footer-form/footer-form.component.ts index aa480e01c1860703698e98bb23ed555a527aa0bd..38c50043420baa856360de5f8257cc08ceda8bd3 100644 --- a/src/app/form/footer-form/footer-form.component.ts +++ b/src/app/form/footer-form/footer-form.component.ts @@ -23,7 +23,6 @@ import { stepType } from '../step.type'; export class FooterFormComponent implements OnChanges { @Input() currentForm: formType; @Input() isValid: boolean; - @Input() isClaimMode: boolean; @Input() btnName: string[]; @Input() nbPagesForm: number; @Input() form: UntypedFormGroup; @@ -135,7 +134,7 @@ export class FooterFormComponent implements OnChanges { try { await firstValueFrom(this.authService.register(user)); if (this.acceptNewsletter) { - this.newsletterService.newsletterSubscribe(user.email); + this.newsletterService.subscribe(user.email); } document.getElementsByClassName('page')[0].scrollTo(0, 0); this.changeCurrentStep.emit(accountFormStep.confirmEmailSentInfo); diff --git a/src/app/form/form-view/account-form/account-form.component.html b/src/app/form/form-view/account-form/account-form.component.html index f658d9a78ab452deb13bc1ea9bdca705863de98d..c6d69a41d236a6c4ed5ee2464f1a1f501b5db3ae 100644 --- a/src/app/form/form-view/account-form/account-form.component.html +++ b/src/app/form/form-view/account-form/account-form.component.html @@ -1,11 +1,6 @@ <div class="no-max-width"> <ng-container *ngIf="currentStep === accountFormStepEnum.accountInfo"> - <app-account-info - [accountForm]="accountForm" - [isClaimMode]="isClaimMode" - [profile]="profile" - (validateForm)="setValidationsForm()" - /> + <app-account-info [accountForm]="accountForm" [profile]="profile" (validateForm)="setValidationsForm()" /> </ng-container> <ng-container *ngIf="currentStep === accountFormStepEnum.accountCredentials"> <app-account-credentials diff --git a/src/app/form/form-view/account-form/account-form.component.ts b/src/app/form/form-view/account-form/account-form.component.ts index bfdabcec9533c89e6b0e65a5a695281b07fdd0cd..7d430b390e22aea44211e869eb9a75a7391d69cc 100644 --- a/src/app/form/form-view/account-form/account-form.component.ts +++ b/src/app/form/form-view/account-form/account-form.component.ts @@ -16,7 +16,6 @@ export class AccountFormComponent implements OnChanges { @Input() currentStep: stepType; @Input() accountForm: UntypedFormGroup; @Input() isAccountMode: boolean; - public isClaimMode = false; public pagesValidation = []; public userAcceptSavedDate = false; public isPageValid: boolean; diff --git a/src/app/form/form-view/account-form/account-info/account-info.component.html b/src/app/form/form-view/account-form/account-info/account-info.component.html index c403437358260f593e12761f325c8da8bb8d2814..e625eb587cf0282f85bd082dc35ce7cd8680c783 100644 --- a/src/app/form/form-view/account-form/account-info/account-info.component.html +++ b/src/app/form/form-view/account-form/account-info/account-info.component.html @@ -1,9 +1,13 @@ <form *ngIf="accountForm && !profile" [formGroup]="accountForm"> <div class="title"> - <h3>Qui êtes-vous ?</h3> + <h3>Informations personnelles</h3> + <p> + Vos informations seront référencées en tant que professionnel·le dans l'annuaire Rés'in pour les + utilisateur·trices connecté·e·s. + </p> </div> <div class="form-group" fxLayout="column"> - <label for="name">Prénom</label> + <label for="name">Votre prénom</label> <div fxLayout="row" fxLayoutGap="13px"> <input type="text" formControlName="name" class="form-input" (input)="setValidationsForm()" /> <app-svg-icon *ngIf="accountForm.get('name').valid" [iconClass]="'icon-26'" [type]="'form'" [icon]="'validate'" /> @@ -16,7 +20,7 @@ </div> </div> <div class="form-group" fxLayout="column"> - <label for="surname">Nom</label> + <label for="surname">Votre nom</label> <div fxLayout="row" fxLayoutGap="13px"> <input type="text" formControlName="surname" class="form-input" (input)="setValidationsForm()" /> <app-svg-icon @@ -34,7 +38,7 @@ </div> </div> <div class="form-group" fxLayout="column"> - <label for="phone">Téléphone</label> + <label for="phone">Votre téléphone</label> <div fxLayout="row" fxLayoutGap="13px"> <input type="text" diff --git a/src/app/form/form-view/account-form/account-info/account-info.component.ts b/src/app/form/form-view/account-form/account-info/account-info.component.ts index b1d6ef9360c6e77ff51ac8179d023e3b5babfa7b..baea5a57f0fa1317728138fae190194af7958b62 100644 --- a/src/app/form/form-view/account-form/account-info/account-info.component.ts +++ b/src/app/form/form-view/account-form/account-info/account-info.component.ts @@ -9,7 +9,6 @@ import { Utils } from '../../../../utils/utils'; }) export class AccountInfoComponent { @Input() accountForm: UntypedFormGroup; - @Input() isClaimMode: boolean; @Input() profile: User; @Output() validateForm = new EventEmitter<any>(); diff --git a/src/app/form/form-view/form-view.component.html b/src/app/form/form-view/form-view.component.html index 3b83ab9f2c260e22b463fc3dc102879a41687967..0c0bf2c9a2089d5987af9e09e3609f290ee171f3 100644 --- a/src/app/form/form-view/form-view.component.html +++ b/src/app/form/form-view/form-view.component.html @@ -44,7 +44,7 @@ (setEditStep)="setCurrentStep($event)" /> <app-personal-offer-form - *ngIf="formType[routeParam] === formType.personaloffer" + *ngIf="formType[routeParam] === formType.personaloffer && structure" [nbSteps]="nbSteps" [personalOfferForm]="personalOfferForm" [currentStep]="currentPage" diff --git a/src/app/form/form-view/form-view.component.scss b/src/app/form/form-view/form-view.component.scss index 9836ac4352b17e71f495ea9503ad18c0ff564760..201db3b1a41083991d57dc2dabb5adbe91bce5e0 100644 --- a/src/app/form/form-view/form-view.component.scss +++ b/src/app/form/form-view/form-view.component.scss @@ -73,6 +73,9 @@ font-style: italic; margin-top: 4px; } + .info { + @include lato-regular-14; + } .backArrow { cursor: pointer; } diff --git a/src/app/form/form-view/form-view.component.ts b/src/app/form/form-view/form-view.component.ts index 452c7e074ee73737759715a7bdf08f85719cf6f3..076e176981fc05c67711da24a4e00e14528d1fcc 100644 --- a/src/app/form/form-view/form-view.component.ts +++ b/src/app/form/form-view/form-view.component.ts @@ -70,7 +70,6 @@ export class FormViewComponent implements OnInit, AfterViewInit { public profile: User; public isAccountMode: boolean = false; - public isClaimMode: boolean = false; public isJoinMode: boolean = false; public claimStructure: boolean = false; public linkedStructureId; @@ -226,6 +225,7 @@ export class FormViewComponent implements OnInit, AfterViewInit { validated: new UntypedFormControl(true, [Validators.required]), hasPersonalOffer: new UntypedFormControl(true, [Validators.required]), }), + withAppointment: new UntypedFormControl('', [Validators.required]), structure: new UntypedFormControl('', [Validators.required]), }); } @@ -273,18 +273,15 @@ export class FormViewComponent implements OnInit, AfterViewInit { this.structure._id = this.structureForm.value._id; this.structure.structureName = this.structureForm.value.structureName; - this.structureService.isClaimed(this.structure._id, this.profile).subscribe((isClaimed) => { - this.structure.isClaimed = isClaimed; - if (isClaimed) { - this.usersService.joinStructure(this.structureForm.value._id, this.profile.email).subscribe(() => { - this.currentPage = structureFormStep.mailSentInfo; - }); - } else { - this.structureService.claimStructureWithAccount(this.structure._id, this.profile.email).subscribe(() => { - this.currentPage = structureFormStep.mailSentInfo; - }); - } - }); + if (this.structure.hasNoUserDN) { + this.structureService.claimStructureWithAccount(this.structure._id, this.profile.email).subscribe(() => { + this.currentPage = structureFormStep.mailSentInfo; + }); + } else { + this.usersService.joinStructure(this.structureForm.value._id, this.profile.email).subscribe(() => { + this.currentPage = structureFormStep.mailSentInfo; + }); + } } public async endForm(type: { formType: formType; formStep?: stepType }): Promise<void> { @@ -297,7 +294,7 @@ export class FormViewComponent implements OnInit, AfterViewInit { case formType.structure: if (type.formStep === structureFormStep.mailSentInfo) { const user = await this.profileService.getProfile(); - if (user.job && user.job.hasPersonalOffer) { + if (user.job?.hasPersonalOffer) { this.router.navigateByUrl('form/personaloffer'); } else { this.router.navigateByUrl('/'); @@ -336,7 +333,13 @@ export class FormViewComponent implements OnInit, AfterViewInit { catchError(() => of(this.profileForm.get('job').value)) ), profile: this.profileService - .updateProfile(this.profileForm.get('employer').value.name, this.profileForm.get('job').value.name) + .updateProfile( + this.profileForm.get('employer').value.name, + this.profileForm.get('job').value.name, + this.profileForm.get('withAppointment')?.value !== '' + ? this.profileForm.get('withAppointment').value + : undefined + ) .pipe( map((res) => (this.profile = res)), catchError(() => of()) @@ -375,7 +378,7 @@ export class FormViewComponent implements OnInit, AfterViewInit { const newStructure = new Structure(this.structureForm.value); newStructure.hours = this.hoursForm.value; this.structureService.createStructure(newStructure, this.profile).subscribe((struct) => { - if (user.job && user.job.hasPersonalOffer) { + if (user.job?.hasPersonalOffer) { this.structure = struct; this.router.navigateByUrl('form/personaloffer'); } else { diff --git a/src/app/form/form-view/personal-offer-form/personal-offer-other-structure-choice/personal-offer-other-structure-choice.component.html b/src/app/form/form-view/personal-offer-form/personal-offer-other-structure-choice/personal-offer-other-structure-choice.component.html index ff5a8e5e1b1f40af409d20152ec19cce46b25b93..368ece9b0ca0f6858b7a3c3bb7d8c9e999723748 100644 --- a/src/app/form/form-view/personal-offer-form/personal-offer-other-structure-choice/personal-offer-other-structure-choice.component.html +++ b/src/app/form/form-view/personal-offer-form/personal-offer-other-structure-choice/personal-offer-other-structure-choice.component.html @@ -4,5 +4,5 @@ <h3>Intervenez-vous dans une autre structure ?</h3> </div> - <app-radio-form [selectedOption]="" (selectedEvent)="onRadioChange($event)"> </app-radio-form> + <app-radio-form [selectedOption]="null" (selectedEvent)="onRadioChange($event)"> </app-radio-form> </form> diff --git a/src/app/form/form-view/profile-form/profile-form.component.ts b/src/app/form/form-view/profile-form/profile-form.component.ts index e767edf4d4cac264d8a1f97de5417bb6b510bbe1..0317791e639b651c40f63e13f114c00b810cc313 100644 --- a/src/app/form/form-view/profile-form/profile-form.component.ts +++ b/src/app/form/form-view/profile-form/profile-form.component.ts @@ -28,7 +28,11 @@ export class ProfileFormComponent { valid: this.profileForm.get('employer').valid, }; this.pagesValidation[profileFormStep.profileJobSelection] = { - valid: this.profileForm.get('job').get('name').valid, + valid: + (this.profileForm.get('job').get('name').valid && !this.profileForm.get('job').value.hasPersonalOffer) || + (this.profileForm.get('job').get('name').valid && + this.profileForm.get('job').value.hasPersonalOffer === true && + this.profileForm.get('withAppointment').valid), }; this.updatePageValid(); } diff --git a/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.html b/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.html index 7d7136c6d02409316758db57a56a6eb57c30acff..4f5a0d9407faf4e45d7aa3a1233fb55d7bb48299 100644 --- a/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.html +++ b/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.html @@ -20,4 +20,10 @@ <input type="text" class="form-input" autocomplete="off" (input)="newJob($event.target)" /> </div> </div> + + <app-appointment-choice + *ngIf="hasPersonalOffer" + [selectedRdvChoice]="selectedRdvChoice === undefined ? null : selectedRdvChoice" + (rdvChoice)="onRdvRadioChange($event)" + ></app-appointment-choice> </form> diff --git a/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.ts b/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.ts index cdfa6f817005c9c327d2e469c0dcdae3de42aa27..d5069af9d47a4b005a1ebce950b35516a64af477 100644 --- a/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.ts +++ b/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.ts @@ -12,9 +12,12 @@ import { ButtonType } from '../../../../shared/components/button/buttonType.enum export class ProfileJobSelectionComponent implements OnInit { @Input() profileForm: UntypedFormGroup; @Output() validateForm = new EventEmitter<Job>(); + public jobs: Job[]; public selectedJob: Job; + public selectedRdvChoice: boolean; public buttonTypeEnum = ButtonType; + public hasPersonalOffer: boolean = false; constructor(private profileService: ProfileService) {} @@ -40,11 +43,12 @@ export class ProfileJobSelectionComponent implements OnInit { hasPersonalOffer: true, }); } + this.hasPersonalOffer = job.hasPersonalOffer; this.validateForm.emit(); } public isSelectedJob(job: Job): boolean { - if (this.selectedJob && this.selectedJob.name === job.name) return true; + if (this.selectedJob?.name === job.name) return true; return false; } @@ -60,4 +64,10 @@ export class ProfileJobSelectionComponent implements OnInit { }); this.validateForm.emit(); } + + public onRdvRadioChange(value: boolean): void { + this.selectedRdvChoice = value; + this.profileForm.get('withAppointment').setValue(this.selectedRdvChoice); + this.validateForm.emit(); + } } diff --git a/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.html b/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.html index 2cd50fd091d7a01decee696792bbe6eb37455f8f..eabad119fd6d1b1f159e79ce46df5af2781af6a7 100644 --- a/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.html +++ b/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.html @@ -18,18 +18,8 @@ <label for="structureName">Email de la structure</label> <div fxLayout="row" fxLayoutGap="13px"> <input type="text" formControlName="contactMail" class="form-input" (input)="setValidationsForm()" /> - <app-svg-icon - *ngIf="structureForm.get('contactMail').valid" - [iconClass]="'icon-26'" - [type]="'form'" - [icon]="'validate'" - /> - <app-svg-icon - *ngIf="structureForm.get('contactMail').invalid && structureForm.get('contactMail').value !== null" - [iconClass]="'icon-26'" - [type]="'form'" - [icon]="'notValidate'" - /> + <app-svg-icon *ngIf="isContactMailValid()" [iconClass]="'icon-26'" [type]="'form'" [icon]="'validate'" /> + <app-svg-icon *ngIf="isContactMailNotValid()" [iconClass]="'icon-26'" [type]="'form'" [icon]="'notValidate'" /> </div> </div> <div class="form-group" fxLayout="column"> @@ -43,18 +33,8 @@ class="form-input" (input)="utils.modifyPhoneInput(structureForm, 'contactPhone', $event.target); setValidationsForm()" /> - <app-svg-icon - *ngIf="structureForm.get('contactPhone').valid" - [iconClass]="'icon-26'" - [type]="'form'" - [icon]="'validate'" - /> - <app-svg-icon - *ngIf="structureForm.get('contactPhone').invalid && structureForm.get('contactPhone').value" - [iconClass]="'icon-26'" - [type]="'form'" - [icon]="'notValidate'" - /> + <app-svg-icon *ngIf="isContactPhoneValid()" [iconClass]="'icon-26'" [type]="'form'" [icon]="'validate'" /> + <app-svg-icon *ngIf="isContactPhoneNotValid()" [iconClass]="'icon-26'" [type]="'form'" [icon]="'notValidate'" /> </div> </div> </form> diff --git a/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.ts b/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.ts index f20d2f4688682fc6b9311cafc6c5b2f0ebaa406b..0bfe25eec9647cf43445e7775e393f29ee5b620b 100644 --- a/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.ts +++ b/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.ts @@ -21,6 +21,41 @@ export class StructureContactComponent implements OnInit { public setValidationsForm(): void { this.validateForm.emit(); } + + public isRequirePhoneOrMailNotValid(): boolean { + return this.structureForm.errors?.['requirePhoneOrMail'] ?? false; + } + + public isContactMailValid(): boolean { + return ( + !this.isRequirePhoneOrMailNotValid() && + this.structureForm.get('contactMail').valid && + this.structureForm.get('contactMail').value + ); + } + + public isContactMailNotValid(): boolean { + return ( + this.isRequirePhoneOrMailNotValid() || + (this.structureForm.get('contactMail').invalid && this.structureForm.get('contactMail').value !== null) + ); + } + + public isContactPhoneValid(): boolean { + return ( + !this.isRequirePhoneOrMailNotValid() && + this.structureForm.get('contactPhone').valid && + this.structureForm.get('contactPhone').value + ); + } + + public isContactPhoneNotValid(): boolean { + return ( + this.isRequirePhoneOrMailNotValid() || + (this.structureForm.get('contactPhone').invalid && this.structureForm.get('contactPhone').value) + ); + } + public goBack(): void { history.back(); } diff --git a/src/app/form/form-view/structure-form/structure-digital-helping-accompaniment/structure-digital-helping-accompaniment.component.html b/src/app/form/form-view/structure-form/structure-digital-helping-accompaniment/structure-digital-helping-accompaniment.component.html index 8a44acb5cd9c153ef2cd6419ed14407e31ad1720..5ae9e0e6d010207fdfaa15b9973baa6ffcbe4021 100644 --- a/src/app/form/form-view/structure-form/structure-digital-helping-accompaniment/structure-digital-helping-accompaniment.component.html +++ b/src/app/form/form-view/structure-form/structure-digital-helping-accompaniment/structure-digital-helping-accompaniment.component.html @@ -12,6 +12,7 @@ <div class="titleContent"> <h3>Quelles aides aux démarches en ligne votre structure propose-t-elle ?</h3> <p>Facultatif</p> + <p class="info">L'offre des accompagnants numériques est éditable sur le profil de l'accompagnant numérique</p> </div> </div> <div class="btn-grid"> diff --git a/src/app/form/form-view/structure-form/structure-form.component.html b/src/app/form/form-view/structure-form/structure-form.component.html index 9bb4424a88fbbf1fafd27405b9f5436a443a1618..bcc6a8c26ff9429f144dd18891d41298b47fd9c4 100644 --- a/src/app/form/form-view/structure-form/structure-form.component.html +++ b/src/app/form/form-view/structure-form/structure-form.component.html @@ -18,7 +18,7 @@ [step]="currentStep" [structureName]="structureForm.value.structureName" [formType]="formTypeEnum.structure" - [isClaimed]="structure.isClaimed" + [isClaimed]="!structure.hasNoUserDN" (goNext)="setValidationsForm()" /> </ng-container> diff --git a/src/app/form/form-view/structure-form/structure-form.component.ts b/src/app/form/form-view/structure-form/structure-form.component.ts index cbb6c7daa22198b9671ea6400ae8f75f68e586f4..e6a3e1b6f79c1dde6463d83d173353647576217d 100644 --- a/src/app/form/form-view/structure-form/structure-form.component.ts +++ b/src/app/form/form-view/structure-form/structure-form.component.ts @@ -40,7 +40,6 @@ export class StructureFormComponent implements OnChanges, OnInit { public showSocialNetwork: boolean = false; // Condition form - public isClaimMode = false; public isAccountMode: boolean = false; public userAcceptSavedDate = false; @@ -143,100 +142,94 @@ export class StructureFormComponent implements OnChanges, OnInit { } public setValidationsForm(): void { - if (this.isClaimMode) { - //TODO: check claim mode - // this.pagesValidation[structureFormStep.structureConsent] = { valid: this.userAcceptSavedDate }; - // this.updatePageValid(); - // } else if (this.isAccountMode) { - // this.pagesValidation[structureFormStep.structureConsent] = { valid: this.userAcceptSavedDate }; - // this.updatePageValid(); - } else { - this.pagesValidation[structureFormStep.structureChoice] = { - valid: this.structureForm.get('_id').valid, - }; - this.pagesValidation[structureFormStep.structureNameAndAddress] = { - valid: this.structureForm.get('structureName').valid && this.structureForm.get('address').valid, - }; - this.pagesValidation[structureFormStep.structureContact] = { - valid: this.structureForm.get('contactMail').valid || this.structureForm.get('contactPhone').valid, - }; - this.pagesValidation[structureFormStep.structureAccompanimentChoice] = { - valid: this.structureForm.get('placeOfReception').valid, - }; - this.pagesValidation[structureFormStep.structureContactCompletion] = { - valid: this.isEditMode - ? true - : this.structureForm.get('contactPersonFirstname').valid && - this.structureForm.get('contactPersonLastname').valid && - this.structureForm.get('contactPersonEmail').valid, - }; - this.pagesValidation[structureFormStep.structureType] = { - valid: this.structureForm.get('structureType').valid, - }; - this.pagesValidation[structureFormStep.structureAccessModality] = { - valid: this.structureForm.get('categories').get('accessModality').valid, - }; - this.pagesValidation[structureFormStep.structureHours] = { - valid: this.hoursForm.valid && this.structureForm.get('exceptionalClosures').valid, - }; - this.pagesValidation[structureFormStep.structurePmr] = { - valid: this.structureForm.get('pmrAccess').valid, - }; - this.pagesValidation[structureFormStep.structureWebAndSocialNetwork] = { - valid: - (this.structureForm.get('website').valid || !this.showWebsite) && - ((this.structureForm.get('facebook').valid && - this.structureForm.get('twitter').valid && - this.structureForm.get('instagram').valid) || - !this.showSocialNetwork), - }; - this.pagesValidation[structureFormStep.structurePublicTarget] = { - valid: this.structureForm.get('categories').get('age').valid, - }; - this.pagesValidation[structureFormStep.structurePublicTargetOptional] = { - valid: true, - }; - this.pagesValidation[structureFormStep.structureDigitalHelpingAccompanimentOther] = { - valid: this.structureForm.get('otherDescription').valid, - }; - this.pagesValidation[structureFormStep.structureDigitalHelpingAccompaniment] = { - valid: this.structureForm.get('categories').get('onlineProcedures').valid, - }; + this.pagesValidation[structureFormStep.structureChoice] = { + valid: this.structureForm.get('_id').valid, + }; + this.pagesValidation[structureFormStep.structureNameAndAddress] = { + valid: this.structureForm.get('structureName').valid && this.structureForm.get('address').valid, + }; + this.pagesValidation[structureFormStep.structureContact] = { + valid: + !this.structureForm.hasError('requirePhoneOrMail') && + this.structureForm.get('contactMail').valid && + this.structureForm.get('contactPhone').valid, + }; + this.pagesValidation[structureFormStep.structureAccompanimentChoice] = { + valid: this.structureForm.get('placeOfReception').valid, + }; + this.pagesValidation[structureFormStep.structureContactCompletion] = { + valid: this.isEditMode + ? true + : this.structureForm.get('contactPersonFirstname').valid && + this.structureForm.get('contactPersonLastname').valid && + this.structureForm.get('contactPersonEmail').valid, + }; + this.pagesValidation[structureFormStep.structureType] = { + valid: this.structureForm.get('structureType').valid, + }; + this.pagesValidation[structureFormStep.structureAccessModality] = { + valid: this.structureForm.get('categories').get('accessModality').valid, + }; + this.pagesValidation[structureFormStep.structureHours] = { + valid: this.hoursForm.valid && this.structureForm.get('exceptionalClosures').valid, + }; + this.pagesValidation[structureFormStep.structurePmr] = { + valid: this.structureForm.get('pmrAccess').valid, + }; + this.pagesValidation[structureFormStep.structureWebAndSocialNetwork] = { + valid: + (this.structureForm.get('website').valid || !this.showWebsite) && + ((this.structureForm.get('facebook').valid && + this.structureForm.get('twitter').valid && + this.structureForm.get('instagram').valid) || + !this.showSocialNetwork), + }; + this.pagesValidation[structureFormStep.structurePublicTarget] = { + valid: this.structureForm.get('categories').get('age').valid, + }; + this.pagesValidation[structureFormStep.structurePublicTargetOptional] = { + valid: true, + }; + this.pagesValidation[structureFormStep.structureDigitalHelpingAccompanimentOther] = { + valid: this.structureForm.get('otherDescription').valid, + }; + this.pagesValidation[structureFormStep.structureDigitalHelpingAccompaniment] = { + valid: this.structureForm.get('categories').get('onlineProcedures').valid, + }; - this.pagesValidation[structureFormStep.structureTrainingType] = { - valid: true, - }; - this.pagesValidation[structureFormStep.structureTrainingPrice] = { - valid: this.structureForm.get('freeWorkShop').valid, - }; - this.pagesValidation[structureFormStep.structureWifi] = { - valid: this.structureForm.get('categories').get('selfServiceMaterial').valid, - }; - this.pagesValidation[structureFormStep.structureEquipments] = { - valid: - this.structureForm.get('nbComputers').valid && - this.structureForm.get('nbPrinters').valid && - this.structureForm.get('nbScanners').valid, - name: 'Equipements mis à disposition', - }; - this.pagesValidation[structureFormStep.structureLabels] = { - valid: true, - }; - this.pagesValidation[structureFormStep.structureSolidarityMaterial] = { - valid: true, - }; - this.pagesValidation[structureFormStep.structureDescription] = { - valid: true, - }; - this.pagesValidation[structureFormStep.structureCovidInfo] = { - valid: true, - }; + this.pagesValidation[structureFormStep.structureTrainingType] = { + valid: true, + }; + this.pagesValidation[structureFormStep.structureTrainingPrice] = { + valid: this.structureForm.get('freeWorkShop').valid, + }; + this.pagesValidation[structureFormStep.structureWifi] = { + valid: this.structureForm.get('categories').get('selfServiceMaterial').valid, + }; + this.pagesValidation[structureFormStep.structureEquipments] = { + valid: + this.structureForm.get('nbComputers').valid && + this.structureForm.get('nbPrinters').valid && + this.structureForm.get('nbScanners').valid, + name: 'Equipements mis à disposition', + }; + this.pagesValidation[structureFormStep.structureLabels] = { + valid: true, + }; + this.pagesValidation[structureFormStep.structureSolidarityMaterial] = { + valid: true, + }; + this.pagesValidation[structureFormStep.structureDescription] = { + valid: true, + }; + this.pagesValidation[structureFormStep.structureCovidInfo] = { + valid: true, + }; - this.pagesValidation[structureFormStep.structureConsent] = { - valid: !this.isEditMode ? this.userAcceptSavedDate : true, - }; - this.updatePageValid(); - } + this.pagesValidation[structureFormStep.structureConsent] = { + valid: !this.isEditMode ? this.userAcceptSavedDate : true, + }; + this.updatePageValid(); } async setCategories(): Promise<void> { @@ -264,6 +257,10 @@ export class StructureFormComponent implements OnChanges, OnInit { } case CategoryEnum.labelsQualifications: { this.labelsQualifications = categ; + // label conseillerNumFranceServices is removed from the list since it will now be automatically added when a structure's owner is a CNFS + this.labelsQualifications.modules = this.labelsQualifications.modules.filter( + (module) => module.id !== 'conseillerNumFranceServices' + ); break; } case CategoryEnum.age: { diff --git a/src/app/form/form-view/structure-form/structure-training-type/structure-training-type.component.html b/src/app/form/form-view/structure-form/structure-training-type/structure-training-type.component.html index 316faf3eb212acae39c2f9f0630465dcb35965bf..f52f5b96df3bcbd0d4f0af597af6d3c284cb9489 100644 --- a/src/app/form/form-view/structure-form/structure-training-type/structure-training-type.component.html +++ b/src/app/form/form-view/structure-form/structure-training-type/structure-training-type.component.html @@ -12,6 +12,7 @@ <div class="titleContent"> <h3>Quels accompagnements au numérique votre structure propose-t-elle ?</h3> <p>Facultatif</p> + <p class="info">L'offre des accompagnants numériques est éditable sur le profil de l'accompagnant numérique</p> </div> </div> <app-training-type-picker diff --git a/src/app/form/orientation-form-view/base-skills/base-skills-choice/base-skills-choice.component.html b/src/app/form/orientation-form-view/base-skills/base-skills-choice/base-skills-choice.component.html index ab87c686ef9684bebc58e5f571712ab9f3b305cd..3c886550d72a1d366f54d6e0d9b1dcfe7ffcfb60 100644 --- a/src/app/form/orientation-form-view/base-skills/base-skills-choice/base-skills-choice.component.html +++ b/src/app/form/orientation-form-view/base-skills/base-skills-choice/base-skills-choice.component.html @@ -1,4 +1,4 @@ -<h2>De quelle compétence(s) numérique(s) le bénéficiaire a-t-il besoin ?</h2> +<h2>Quel est le besoin numérique de la personne ?</h2> <div fxLayout="column" fxLayoutGap="32px"> <div class="btn-grid"> diff --git a/src/app/form/orientation-form-view/enums/AppointmentSteps.enum.ts b/src/app/form/orientation-form-view/enums/AppointmentSteps.enum.ts new file mode 100644 index 0000000000000000000000000000000000000000..1769cc2ddd835e443e8b8badca8eaeb0b082b63a --- /dev/null +++ b/src/app/form/orientation-form-view/enums/AppointmentSteps.enum.ts @@ -0,0 +1,10 @@ +export enum AppointmentSteps { + infoScreen, + structureOrientator, + pmrAccess, + location, + carto, + makeAppointment, + mediationBeneficiaryInfo, + rdvEnd, +} diff --git a/src/app/form/orientation-form-view/enums/MeetingRDVSSteps.enum.ts b/src/app/form/orientation-form-view/enums/MeetingRDVSSteps.enum.ts deleted file mode 100644 index a7e54b7b907aa98e1719f6cdf29d7b00c3a31ce8..0000000000000000000000000000000000000000 --- a/src/app/form/orientation-form-view/enums/MeetingRDVSSteps.enum.ts +++ /dev/null @@ -1,10 +0,0 @@ -export enum MeetingRDVSSteps { - infoScreen, - structureOrientator, - publicTypeMandatory, - publicTypeOptional, - pmrAccess, - digitalPass, - location, - rdvsDoing -} diff --git a/src/app/form/orientation-form-view/enums/hotlineMediationSteps.enum.ts b/src/app/form/orientation-form-view/enums/hotlineMediationSteps.enum.ts index 1e8c39bdd2b2e1554bd46e81623ebcde250374bd..f3e6c54ca41dc164639ecc82a1ca30166aa3165b 100644 --- a/src/app/form/orientation-form-view/enums/hotlineMediationSteps.enum.ts +++ b/src/app/form/orientation-form-view/enums/hotlineMediationSteps.enum.ts @@ -1,6 +1,6 @@ export enum HotlineMediationSteps { infoScreen, - mediationBeneciaryInfo, + mediationBeneficiaryInfo, mediationHoursSelection, mediationLanguageSelection, orientationRecap, diff --git a/src/app/form/orientation-form-view/enums/onlineDemarche.enum.ts b/src/app/form/orientation-form-view/enums/onlineDemarche.enum.ts index 3aa41e04953e7e53ffd890f954c07957d499f0ac..791d5d81b7a2d38ebb1ffe3675fd330167434f63 100644 --- a/src/app/form/orientation-form-view/enums/onlineDemarche.enum.ts +++ b/src/app/form/orientation-form-view/enums/onlineDemarche.enum.ts @@ -1,6 +1,6 @@ export enum OnlineDemarche { common = 'Common', structureList = 'Trouver une structure', - meetings = 'RDV Conseiller Numérique', + appointment = 'RDV Conseiller Numérique', onlineMediation = 'Médiation Numérique à distance', } diff --git a/src/app/form/orientation-form-view/enums/structuresListSteps.enum.ts b/src/app/form/orientation-form-view/enums/structuresListSteps.enum.ts index 6587fbaece197755047d1b936c8f8e01419347b6..f3fe927b79c4ad541609fe438835ac3e6e056595 100644 --- a/src/app/form/orientation-form-view/enums/structuresListSteps.enum.ts +++ b/src/app/form/orientation-form-view/enums/structuresListSteps.enum.ts @@ -3,7 +3,7 @@ export enum StructuresListSteps { address, structureChoice, structureOrientator, - mediationBeneciaryInfo, + mediationBeneficiaryInfo, comments, orientationRecap, } diff --git a/src/app/form/orientation-form-view/global-components/information-screen/information-screen.component.html b/src/app/form/orientation-form-view/global-components/information-screen/information-screen.component.html index 13b50f16e49123efc9eb0472239d73c974be88be..d03f7499a93be695c4c9ad11c0a484f79a102bce 100644 --- a/src/app/form/orientation-form-view/global-components/information-screen/information-screen.component.html +++ b/src/app/form/orientation-form-view/global-components/information-screen/information-screen.component.html @@ -1,10 +1,10 @@ -<div *ngIf="currentType === currentTypeEnum.meetings" class="container"> - <img src="../../../../../assets/img/rdvsBeginning.svg" alt="Meeting image" /> - <h2>Vous vous apprêtez à prendre RDV auprès d'un Conseiller numérique</h2> +<div *ngIf="currentType === currentTypeEnum.appointment" class="container"> + <img src="../../../../../assets/img/rdvsBeginning.svg" alt="Appointment image" /> + <h2>Vous vous apprêtez à prendre RDV auprès d'un·e accompagnant·e numérique</h2> <p> Ces professionnels sont là pour accompagner les publics sur des problématiques liées au numérique et non aux - démarches administratives en elles-mêmes. Si le frein est uniquement administratif, merci d'orienter le bénéficiaire - vers un lieu type "Maison France services" + démarches administratives en elles-mêmes. Si le frein est uniquement administratif, merci d’orienter le bénéficiaire + vers un lieu type “Maison France services” </p> </div> <div *ngIf="currentType === currentTypeEnum.onlineMediation" class="container"> diff --git a/src/app/form/orientation-form-view/global-components/navigation/navigation.component.html b/src/app/form/orientation-form-view/global-components/navigation/navigation.component.html index 75b0265e7cf6d04049f6f74aeb49db10d9a4b4e2..1b4300645e4e42b3fe25a99f2105659557ca8ac1 100644 --- a/src/app/form/orientation-form-view/global-components/navigation/navigation.component.html +++ b/src/app/form/orientation-form-view/global-components/navigation/navigation.component.html @@ -1,14 +1,14 @@ <div class="footerForm" fxLayout="row" fxLayoutGap="10px" fxLayoutAlign="center center"> <ng-container *ngIf="!shouldResetOrientation"> <app-button - *ngIf="currentStep !== null && !hideNavButtons" + *ngIf="currentStep !== null && !(isLastStep && needType === 2)" [text]="'Précédent'" [iconType]="'form'" [iconBtn]="'chevronLeft'" (action)="prevPage()" /> <app-button - *ngIf="!isRdvsWindowStep && !hideNavButtons" + *ngIf="!hideNavButtons" [text]="isLastStep ? 'Terminer' : 'Suivant'" [iconBtn]="!isLastStep ? 'chevronRight' : 'finish'" [iconType]="'form'" @@ -17,19 +17,9 @@ [disabled]="!isPageValid" (action)="nextPage()" /> - <app-button - *ngIf="isRdvsWindowStep && !hideNavButtons" - [text]="'RDV Solidarités'" - [iconBtn]="'redirect'" - [iconType]="'form'" - [iconPos]="'left'" - [style]="buttonTypeEnum.RdvsButton" - [disabled]="!isPageValid" - (action)="nextPage()" - /> </ng-container> <ng-container *ngIf="shouldResetOrientation"> - <app-button [text]="'Aller à la cartographie'" (action)="goCarto()" /> + <app-button [text]="'Cartographie'" (action)="goCarto()" /> <app-button [text]="'Recommencer'" [style]="buttonTypeEnum.Primary" (action)="resetOrientation()" /> </ng-container> </div> diff --git a/src/app/form/orientation-form-view/global-components/navigation/navigation.component.ts b/src/app/form/orientation-form-view/global-components/navigation/navigation.component.ts index 9c88bbb350c2e5c94a4a3899f2109179fde3a63d..339854554b86db931fdf194e7c3622f61686f1e3 100644 --- a/src/app/form/orientation-form-view/global-components/navigation/navigation.component.ts +++ b/src/app/form/orientation-form-view/global-components/navigation/navigation.component.ts @@ -18,12 +18,12 @@ export class NavigationComponent { @Input() isPageValid: boolean; @Input() needType: NeedsType; @Input() isLastStep = false; - @Input() isRdvsWindowStep = false; @Input() hideNavButtons = false; @Input() shouldResetOrientation = false; @Output() goNext = new EventEmitter<any>(); @Output() goPrev = new EventEmitter<any>(); + @Output() goReset = new EventEmitter<any>(); public buttonTypeEnum = ButtonType; public NeedsTypeEnum = NeedsType; @@ -39,13 +39,6 @@ export class NavigationComponent { this.router.navigateByUrl('/acteurs'); } public resetOrientation(): void { - this.router.routeReuseStrategy.shouldReuseRoute = () => false; - this.router.onSameUrlNavigation = 'reload'; - this.router.navigate(['./'], { relativeTo: this.route }); - - // avoid blocking the main thread and freezing the app - setTimeout(() => { - location.reload(); - }, 0); + this.goReset.emit(); } } diff --git a/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.html b/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.html index 2f650951f2e1359cf1296c728bd1ef8d04abdc17..17d5d99edc84f4fa422ef0ef720ae2e541fefca4 100644 --- a/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.html +++ b/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.html @@ -1,4 +1,4 @@ -<h2>Quels sont les besoins du bénéficiaire ?</h2> +<h2>Quels sont les besoins de la personne ?</h2> <app-multi-radio-form [items]="needsList" [displayIcon]="true" diff --git a/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.ts b/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.ts index abfabedf2bea7123643c64c5b07c10e0ac8ae7a2..a725d7b14a6803c16ba37173b9088e7beb88bf78 100644 --- a/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.ts +++ b/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.ts @@ -1,4 +1,5 @@ -import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { OrientationService } from '../../../../services/orientation.service'; import { INeedItem, OrientationUtils } from '../../../../utils/orientationUtils'; import { NeedsType } from '../../enums/needs.enum'; @@ -6,12 +7,22 @@ import { NeedsType } from '../../enums/needs.enum'; selector: 'app-needs-selection', templateUrl: './needs-selection.component.html', }) -export class NeedsSelectionComponent { +export class NeedsSelectionComponent implements OnInit { @Input() currentNeed: NeedsType; @Output() setNeedType = new EventEmitter<any>(); @Output() validate = new EventEmitter<any>(); public needsList: INeedItem[] = new OrientationUtils().needsList; + constructor(public orientationService: OrientationService) {} + + ngOnInit() { + if (this.orientationService.rdvUser || this.orientationService.rdvStructure) { + this.needsList = this.needsList.filter( + (item: INeedItem) => item.key == NeedsType.onlineDemarch || item.key == NeedsType.learnSkills + ); + } + } + public selectNeed(event: NeedsType) { this.setNeedType.emit(event); } diff --git a/src/app/form/orientation-form-view/global-components/orientation-recap/orientation-recap.component.ts b/src/app/form/orientation-form-view/global-components/orientation-recap/orientation-recap.component.ts index 949c26c8510bf6a5571e0b88bc98c3b6c26270ae..d4d33cc9611bda485bcc6e19972de88250bb1dd7 100644 --- a/src/app/form/orientation-form-view/global-components/orientation-recap/orientation-recap.component.ts +++ b/src/app/form/orientation-form-view/global-components/orientation-recap/orientation-recap.component.ts @@ -20,7 +20,7 @@ export class OrientationRecapComponent implements OnInit { public orientator: { structureName: string; structureMail: string; structurePhone: string }; public comment: string; public beneficiary: any; - public recap: { day: string; hours: string; month: string; language: string }; + public recap: { day: string; hours: string; month: string; language?: string }; constructor(private datePipe: DatePipe) {} diff --git a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html index 80243dcf74b7681383a725f86a60c5d8e225aa76..900f88917b378b3bf8e2af041b6219fc241bd389 100644 --- a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html +++ b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html @@ -1,4 +1,4 @@ -<h2>Quelle structure oriente le bénéficiaire ?</h2> +<h2>Quelle structure oriente la personne ?</h2> <div *ngIf="hasStructures && structuresLinked.length >= 2" class="select-structure border"> <div class="number">{{ structuresLinked.length }} structures sont associées à votre compte</div> <div @@ -49,7 +49,7 @@ </div> </div> <div class="form-group" fxLayout="column"> - <label for="structureMail">Email de votre structure</label> + <label for="structureMail">Email de votre structure<sup class="footnote-nb">1</sup></label> <p class="notRequired">Facultatif</p> <div fxLayout="row" fxLayoutGap="13px"> <input @@ -74,7 +74,7 @@ </div> </div> <div class="form-group" fxLayout="column"> - <label for="structurePhone">Téléphone de votre structure</label> + <label for="structurePhone">Téléphone de votre structure<sup class="footnote-nb">1</sup></label> <p class="notRequired">Facultatif</p> <div fxLayout="row" fxLayoutGap="13px"> <input @@ -99,4 +99,8 @@ </div> </div> </form> + <p class="footnote"> + <sup class="footnote-nb">1</sup> Un moyen de communication (email et/ou téléphone) est obligatoire pour valider + cette étape + </p> </div> diff --git a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.scss b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.scss index 088c84851ae0da02312b9a873b229fef528d9c7c..197f472eabc10823c2f3be9e6c524647084f7409 100644 --- a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.scss +++ b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.scss @@ -56,3 +56,12 @@ .notRequired { margin-bottom: 0; } + +sup { + color: red; + font-size: $font-size-xxsmall; +} +.footnote { + margin-top: 2em; + font-size: $font-size-xmsmall; +} diff --git a/src/app/form/orientation-form-view/interfaces/appointment.interface.ts b/src/app/form/orientation-form-view/interfaces/appointment.interface.ts new file mode 100644 index 0000000000000000000000000000000000000000..0a43eb127558c9a73e430210dfd6b626cd8fe089 --- /dev/null +++ b/src/app/form/orientation-form-view/interfaces/appointment.interface.ts @@ -0,0 +1,11 @@ +export interface IAppointment { + structureOrientator: { structureName: string; structureMail: string; structurePhone: string }; + structureRDV: string; + onlineDemarcheType: string[]; + socialWorkerId: string; + details: string; + name: string; + surname: string; + email: string; + phone: string; +} diff --git a/src/app/form/orientation-form-view/interfaces/appointmentForm.interface.ts b/src/app/form/orientation-form-view/interfaces/appointmentForm.interface.ts new file mode 100644 index 0000000000000000000000000000000000000000..a679e82e0e3649f272c9817ce5176f0f1d720251 --- /dev/null +++ b/src/app/form/orientation-form-view/interfaces/appointmentForm.interface.ts @@ -0,0 +1,16 @@ +import { FormControl, FormGroup } from '@angular/forms'; +import { StructureOrientator } from './structureOrientator.interface'; + +export interface AppointmentForm { + structureOrientator: FormGroup<StructureOrientator>; + structureRDV: FormControl<string>; + pmrAccess: FormControl<boolean>; + address: FormControl<string>; + onlineDemarcheType: FormControl<any>; + socialWorkerId: FormControl<string>; + details: FormControl<any>; + name: FormControl<string>; + surname: FormControl<string>; + email: FormControl<any>; + phone: FormControl<any>; +} diff --git a/src/app/form/orientation-form-view/interfaces/meetingRDVSForm.interface.ts b/src/app/form/orientation-form-view/interfaces/meetingRDVSForm.interface.ts deleted file mode 100644 index a6582b6cd9a1ff0387113b76af80444bd1cdb140..0000000000000000000000000000000000000000 --- a/src/app/form/orientation-form-view/interfaces/meetingRDVSForm.interface.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { FormControl, FormGroup, UntypedFormGroup } from '@angular/forms'; -import { StructureOrientator } from './structureOrientator.interface'; - -export interface MeetingRDVSForm { - structureOrientator: FormGroup<StructureOrientator>; - categories: UntypedFormGroup; - pmrAccess: FormControl<boolean>; - digitalPass: FormControl<boolean>; - address: FormControl<string>; - onlineDemarcheType: FormControl<any>; -} diff --git a/src/app/form/orientation-form-view/interfaces/orientationIndicator.interface.ts b/src/app/form/orientation-form-view/interfaces/orientationIndicator.interface.ts new file mode 100644 index 0000000000000000000000000000000000000000..129ef0727113654da0352361df2a3950541c4688 --- /dev/null +++ b/src/app/form/orientation-form-view/interfaces/orientationIndicator.interface.ts @@ -0,0 +1,23 @@ +import { Address } from '../../../models/address.model'; +import { MediationType } from '../types/mediation.type'; + +export interface OrientationIndicatorStructure { + nom: string; + adresse: Address; + zoneCTM?: string; + distance?: number; +} + +export interface OrientationIndicatorType { + typeOrientation: string; + filtres: string[]; + typeAccompagnement: MediationType; +} +export interface IOrientationIndicator { + origin: OrientationIndicatorStructure; + target: OrientationIndicatorStructure[]; + type: OrientationIndicatorType; + connected: boolean; + completed: boolean; + progress: number; +} diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html new file mode 100644 index 0000000000000000000000000000000000000000..e863fbfa76f9fab191380c33d4bf6542f1e0d2b7 --- /dev/null +++ b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html @@ -0,0 +1,18 @@ +<div *ngIf="hasStructure" class="container"> + <img src="../../../../../../assets/form/structureCreated.svg" alt="rdv illustration" /> + <h2>Votre demande de RDV a été transmise !</h2> + <p> + La demande de <b>rendez-vous auprès d’un conseiller ou une conseillère numérique</b> a bien été transmise à + <b + >{{ socialWorker?.name || orientationService.rdvUser?.name | userName }} + {{ socialWorker?.surname || orientationService.rdvUser?.surname | uppercase }}</b + > + au sein de la structure + <b>{{ structureRDV?.structureName || selectedStructureRDV?.structureName }}</b> + </p> +</div> +<div *ngIf="!hasStructure" class="container"> + <img src="../../../../../../assets/img/joinRefused.svg" alt="rdv illustration" /> + <h2>Aucune structure correspondant à votre recherche ne propose de rendez-vous</h2> + <p>Renouvelez votre recherche avec des critères différents ou accédez à la cartographie</p> +</div> diff --git a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.scss b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.scss similarity index 100% rename from src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.scss rename to src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.scss diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..d00146647f08f1fa6118b44706d2db51ff292946 --- /dev/null +++ b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts @@ -0,0 +1,37 @@ +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { UntypedFormGroup } from '@angular/forms'; +import { Owner } from '../../../../../models/owner.model'; +import { Structure } from '../../../../../models/structure.model'; +import { NotificationService } from '../../../../../services/notification.service'; +import { OrientationService } from '../../../../../services/orientation.service'; + +@Component({ + selector: 'app-appointment-end', + templateUrl: './appointment-end.component.html', + styleUrls: ['./appointment-end.component.scss'], +}) +export class AppointmentEndComponent implements OnInit { + @Input() form: UntypedFormGroup; + @Input() structureRDV: Structure; + @Input() socialWorker: Owner; + @Input() selectedStructureRDV: Structure; + @Output() setResetOrientation = new EventEmitter(); + @Output() checkValidation = new EventEmitter<any>(); + + public hasStructure: boolean = false; + + constructor(private notificationService: NotificationService, public orientationService: OrientationService) {} + + async ngOnInit(): Promise<void> { + this.checkValidation.emit(); + if (this.form.get('structureRDV').value || this.structureRDV) this.hasStructure = true; + try { + if (!this.structureRDV) { + this.setResetOrientation.emit(); + } + } catch (error) { + console.error(error); + this.notificationService.showError('Une erreur est survenue', error.message); + } + } +} diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html new file mode 100644 index 0000000000000000000000000000000000000000..992fa36487ece070d8793e060f3c04047577998a --- /dev/null +++ b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html @@ -0,0 +1,140 @@ +<form *ngIf="owners?.length > 0 || (structures?.length > 0 && structuresListReady)" [formGroup]="form"> + <div class="title"> + <h3>Vous allez prendre rendez-vous avec la structure :</h3> + </div> + + <div *ngIf="owners?.length > 0"> + <div class="header" tabindex="0" fxLayout="column"> + <app-card + class="structure-card" + role="listitem" + [noDetails]="true" + [structure]="structureRDV" + [isOrientation]="false" + [isOrientationRdv]="false" + ></app-card> + </div> + <div class="selectList"> + <h4>Sélectionnez un·e accompagnant·e numérique</h4> + <div + *ngFor="let owner of owners" + class="card-single selected" + fxLayout="row" + fxLayoutAlign="left center" + fxLayoutGap="16px" + [ngClass]="{ selected: this.form.get('socialWorkerId')?.value === owner._id }" + > + <input + type="radio" + formControlName="socialWorkerId" + id="{{ owner._id }}" + value="{{ owner._id }}" + (change)="onSocialWorkerRadioChange(owner)" + /> + <label for="{{ owner._id }}"> + <app-svg-icon class="" [type]="'avatar'" [icon]="'defaultAvatar'" [iconClass]="'icon-40'" /> + <div fxLayout="column" fxLayoutAlign="start"> + <div fxLayout="row" class="selectListNameContainer"> + <span class="selectListName">{{ owner.name | userName }} {{ owner.surname | uppercase }}</span> + </div> + <span class="selectListJob">{{ owner.job?.name }}</span> + </div> + </label> + </div> + </div> + </div> + + <div *ngIf="structures?.length > 0"> + <div class="header" tabindex="0" fxLayout="column"> + <div fxLayout="row" fxLayoutAlign="space-between center" fxLayoutGap="16px"> + <div fxLayout="row" fxLayoutAlign="center center" fxLayoutGap="8px"> + <app-svg-icon class="avatar" [type]="'avatar'" [icon]="'defaultAvatar'" [iconClass]="'icon-40'" /> + <div fxLayout="column" fxLayoutAlign="end"> + <div fxLayout="row" class="headerNameContainer"> + <span class="headerName" + >{{ orientationService.rdvUser.name | userName }} + {{ orientationService.rdvUser.surname | uppercase }}</span + > + </div> + <span class="headerType">{{ orientationService.rdvUser.job.name }}</span> + </div> + </div> + </div> + </div> + <div class="selectList"> + <h4>Sélectionnez la structure de votre choix</h4> + <div + *ngFor="let structure of structures" + class="card-single structure-single selected" + fxLayout="row" + fxLayoutAlign="left center" + fxLayoutGap="16px" + [ngClass]="{ selected: selectedOption === structure._id }" + > + <input + type="radio" + formControlName="structureRDV" + id="{{ structure._id }}" + value="{{ structure._id }}" + (change)="onStructureRadioChange(structure)" + /> + <label class="listCards" for="{{ structure._id }}"> + <app-card + class="structure-card" + role="listitem" + [noDetails]="true" + [structure]="structure" + [isOrientation]="false" + [isOrientationRdv]="false" + (change)="onStructureRadioChange(structure)" + ></app-card> + </label> + </div> + </div> + </div> + + <div class="details"> + <label for="details-field">Précisez les besoins de la personne (disponibilités...) :</label> + <div fxLayout="row" fxLayoutAlign="left center" fxLayoutGap="16px"> + <textarea + formControlName="details" + id="details" + name="details-field" + rows="10" + maxlength="1000" + (change)="onDetailsChange()" + ></textarea> + </div> + </div> +</form> + +<div *ngIf="owners?.length === 0 || (structures?.length === 0 && structuresListReady)" class="noResult"> + <img src="../../../../../../assets/img/joinRefused.svg" alt="" /> + <span *ngIf="isBaseskills" class="info"> + <h2> + Aucun accompagnant·e numérique de cette structure ne peut répondre à + <span [ngPlural]="this.form.get('onlineDemarcheType')?.value.length" + ><ng-template ngPluralCase="1">votre besoin</ng-template + ><ng-template ngPluralCase="other">l'ensemble de ces besoins</ng-template> + </span> + : + </h2> + <span *ngFor="let item of this.form.get('onlineDemarcheType')?.value; last as isLast" + >{{ item.text }}<span *ngIf="!isLast">, </span> + </span> + </span> + <span *ngIf="isOnlineProcedures" class="info"> + <h2> + Aucun accompagnant·e numérique de cette structure ne peut accompagner pour + <span [ngPlural]="this.form.get('onlineDemarcheType')?.value.length" + ><ng-template ngPluralCase="1">cette démarche</ng-template + ><ng-template ngPluralCase="other">l'ensemble de ces démarches</ng-template> + </span> + en ligne : + </h2> + <span *ngFor="let item of this.form.get('onlineDemarcheType')?.value; last as isLast" + >{{ item.text }}<span *ngIf="!isLast">, </span> + </span> + </span> + <p>Renouvelez votre recherche avec des critères différents ou accédez à la cartographie</p> +</div> diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..d472f3ba7d6053c9490814c0ede41f2eea037ba2 --- /dev/null +++ b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss @@ -0,0 +1,105 @@ +@import 'color'; +@import 'typography'; + +.header { + margin-top: 24px; + padding: 0 48px; + border: 2px solid $grey-6; + border-radius: 8px 8px 0 0; + min-height: 110px; + display: flex; + justify-content: center; + ::ng-deep .avatar svg { + top: -0.125em; + } + .headerType { + color: $grey-3; + @include lato-regular-16; + font-style: italic; + } + .headerNameContainer { + align-items: center; + } + .headerName { + @include lato-bold-18; + color: $grey-1; + width: 100%; + } +} +.selectList { + padding: 0 32px 24px 48px; + border: 2px solid $grey-6; + border-top: none; + min-height: 110px; + display: flex; + justify-content: center; + flex-direction: column; + .card-single { + padding: 16px 8px; + border: 1px solid transparent; + &.selected { + border-color: black; + } + &.structure-single { + padding: 0 12px; + } + } + .selectListJob { + color: $grey-3; + @include lato-regular-16; + font-style: italic; + } + .selectListNameContainer { + align-items: center; + } + .selectListName { + @include lato-bold-18; + color: $grey-1; + width: 100%; + } + h4 { + @include lato-bold-18; + } + ::ng-deep svg { + padding: 0 24px 0 8px; + } + label { + display: flex; + flex: 1; + flex-direction: row; + cursor: pointer; + width: 100%; + &.listCards { + display: block; + } + } +} +.details { + margin-top: 40px; + label { + @include lato-regular-16; + padding-bottom: 8px; + } + textarea { + width: 100%; + margin-top: 8px; + } +} +.noResult, +.noResult > span { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + h2 { + margin-top: 2rem; + margin-bottom: 0.5rem; + max-width: 600px; + font-weight: 600px; + } + p { + text-align: center; + max-width: 600px; + margin: 2em 0 0 0; + } +} diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..577a07b0dcbbeef31cb45fc1bd5cabaeeeaf0b8b --- /dev/null +++ b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts @@ -0,0 +1,154 @@ +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { AbstractControl, UntypedFormGroup } from '@angular/forms'; +import { Observable, forkJoin } from 'rxjs'; +import { map, tap } from 'rxjs/operators'; +import { Owner } from '../../../../../models/owner.model'; +import { Structure } from '../../../../../models/structure.model'; +import { OrientationService } from '../../../../../services/orientation.service'; +import { StructureService } from '../../../../../services/structure.service'; + +@Component({ + selector: 'app-make-appointment', + templateUrl: './make-appointment.component.html', + styleUrls: ['./make-appointment.component.scss'], +}) +export class MakeAppointmentComponent implements OnInit { + @Input() form: UntypedFormGroup; + @Input() structureRDV: Structure; + @Output() checkValidation = new EventEmitter<any>(); + @Output() socialWorker = new EventEmitter<Owner>(); + @Output() setResetOrientation = new EventEmitter(); + @Output() selectedStructureRDV = new EventEmitter<Structure>(); + + public owners: Owner[]; + public structures: Structure[] = []; + public isBaseskills: boolean = false; + public isOnlineProcedures: boolean = false; + public selectedOption: string; + public structuresListReady: boolean; + + private onlineDemarcheType; + private filtersOnOffers; + + constructor(private structureService: StructureService, public orientationService: OrientationService) {} + + ngOnInit(): void { + this.checkValidation.emit(); + + // build arrays containing the needs the user selected in the form + if (this.structureRDV?._id || this.orientationService.rdvUser) { + this.onlineDemarcheType = this.form.get('onlineDemarcheType').value; + this.filtersOnOffers = { onlineProcedures: [], baseSkills: [] }; + this.onlineDemarcheType.forEach((filter) => { + if (filter.name === 'onlineProcedures') { + this.filtersOnOffers.onlineProcedures.push(filter.value); + this.isOnlineProcedures = true; + } + if (filter.name === 'baseSkills') { + this.filtersOnOffers.baseSkills.push(filter.value); + this.isBaseskills = true; + } + }); + } + + // Filters owners that accept appointments, have personal offers in the selected structure and match the needs previously selected + if (this.structureRDV?._id) { + this.findOwners(this.structureRDV._id).subscribe((owners) => { + let filteredOwners = []; + this.owners = owners.filter((owner) => owner.withAppointment && owner.job?.hasPersonalOffer); + // make an array with the IDs of the structure's personalOffers + const structurePersonalOffersId = this.structureRDV.personalOffers.map((spo) => spo._id); + // for each owner + this.owners.forEach((owner) => { + // check each of its personnalOffers + owner.personalOffers?.forEach((po) => { + // if this personalOffer matches one of the structure's personalOffers + if (structurePersonalOffersId.includes(po._id)) { + // and if the needs the user selected are all part of the personalOffer, keep the owner for display + if ( + this.filtersOnOffers.onlineProcedures.every((offer) => + po.categories.onlineProcedures.includes(offer) + ) && + this.filtersOnOffers.baseSkills.every((offer) => po.categories.baseSkills.includes(offer)) + ) { + if (!filteredOwners.includes(owner)) { + filteredOwners.push(owner); + } + } + } + }); + }); + + this.owners = filteredOwners; + + if (this.owners.length === 0) { + this.setResetOrientation.emit(); + } + }); + } else if (this.orientationService.rdvUser) { + // else if we come from the registry, list the registry's user's structures + this.selectedOption = this.form.get('structureRDV').value; + const structures$: Observable<any>[] = []; + this.structures = []; + this.orientationService.rdvUser.structuresLink.forEach((structureId) => { + structures$.push( + this.structureService.getStructure(structureId).pipe( + tap((structure) => { + this.structures.push(new Structure(structure)); + }) + ) + ); + }); + forkJoin(structures$).subscribe(() => { + this.structures.sort((a, b) => a.structureName.localeCompare(b.structureName)); + + // filter structures that match selected needs + let filteredStructures = []; + // for each structure + this.structures.forEach((structure) => { + // check each of its personnalOffers + structure.personalOffers?.forEach((po) => { + //if the needs the user selected are all part of the personalOffer, keep the structure for display + if ( + this.filtersOnOffers.onlineProcedures.every((offer) => po.categories.onlineProcedures.includes(offer)) && + this.filtersOnOffers.baseSkills.every((offer) => po.categories.baseSkills.includes(offer)) + ) { + filteredStructures.push(structure); + } + }); + }); + + this.structures = filteredStructures; + + if (this.structures.length === 0) { + this.setResetOrientation.emit(); + } + this.structuresListReady = true; + }); + } + } + + private findOwners(structureId: string): Observable<Owner[]> { + return this.structureService.getStructureWithOwners(structureId).pipe(map((result) => result.owners)); + } + + public getStructureControl(nameControl: string): AbstractControl { + return this.form.get(nameControl); + } + + public onSocialWorkerRadioChange(socialWorker: Owner): void { + this.socialWorker.emit(socialWorker); + this.checkValidation.emit(); + } + + public onStructureRadioChange(structure: Structure): void { + this.selectedOption = structure._id; + this.form.get('socialWorkerId').setValue(this.orientationService.rdvUser._id); + this.selectedStructureRDV.emit(structure); + this.checkValidation.emit(structure); + } + + public onDetailsChange(): void { + this.checkValidation.emit(); + } +} diff --git a/src/app/form/orientation-form-view/online-demarch/mediation-language-selection/mediation-language-selection.component.html b/src/app/form/orientation-form-view/online-demarch/mediation-language-selection/mediation-language-selection.component.html index 8efeb4f4ac3c2260a42103cf857ad847cd15d38f..eacdee046e120b91e895f427bd77835fa54d45e1 100644 --- a/src/app/form/orientation-form-view/online-demarch/mediation-language-selection/mediation-language-selection.component.html +++ b/src/app/form/orientation-form-view/online-demarch/mediation-language-selection/mediation-language-selection.component.html @@ -1,4 +1,4 @@ -<h2>Dans quelle langue le bénéficiaire souhaite-t-il être rappelé ?</h2> +<h2>Dans quelle langue la personne souhaite-t-elle être rappelée ?</h2> <app-multi-radio-form [items]="languages" diff --git a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.html b/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.html deleted file mode 100644 index e7842d47850d4be1265d51bf39bc3d671b43f8d3..0000000000000000000000000000000000000000 --- a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.html +++ /dev/null @@ -1,9 +0,0 @@ -<form [formGroup]="form"> - <div class="title"> - <h3>Le bénéficiaire dispose-t-il de Pass numériques ?</h3> - <p>Facultatif</p> - </div> - - <app-radio-form [selectedOption]="form.get('digitalPass').value" (selectedEvent)="handleChange($event)"> - </app-radio-form> -</form> diff --git a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.ts b/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.ts deleted file mode 100644 index 9a424f86029c56ca82f3bf8ea5aaf22160e1cd17..0000000000000000000000000000000000000000 --- a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { UntypedFormGroup } from '@angular/forms'; - -@Component({ - selector: 'app-meeting-digital-pass', - templateUrl: './meeting-digital-pass.component.html', -}) -export class MeetingDigitalPassComponent implements OnInit { - @Input() form: UntypedFormGroup; - @Output() checkValidation = new EventEmitter<any>(); - - ngOnInit(): void { - this.checkValidation.emit(); - } - public handleChange(val: boolean) { - this.form.get('digitalPass').patchValue(val); - this.checkValidation.emit(); - } - - public isSelected(): boolean { - return this.form.get('digitalPass').value; - } -} diff --git a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.html b/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.html deleted file mode 100644 index 797174e970e8c1afae85a5f15985ce0fd1ae1e44..0000000000000000000000000000000000000000 --- a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.html +++ /dev/null @@ -1,10 +0,0 @@ -<div *ngIf="!shouldReset" class="container"> - <img src="../../../../../../assets/form/rdvsImage.svg" alt="rdvs illustration" /> - <h2>Votre orientation sur Rés'in est terminée !</h2> - <p>Si toutefois votre recherche n'a pas aboutie, nous vous invitons à renouveler votre recherche en modifiant certains critères ou vous orienter vers la cartographie</p> -</div> -<div *ngIf="shouldReset" class="container"> - <img src="../../../../../../assets/form/rdvsImageNotFound.svg" alt="rdvs illustration" /> - <h2>Aucune structure correspondant à votre recherche ne propose de rendez-vous</h2> - <p>Renouvellez votre recherche avec des critères différents ou accédez à la cartographie</p> -</div> diff --git a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.ts b/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.ts deleted file mode 100644 index 76c2e2a18a35b1aebe9ff04bd9607b1a2d3e470c..0000000000000000000000000000000000000000 --- a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { UntypedFormGroup } from '@angular/forms'; -import { lastValueFrom } from 'rxjs'; -import { Structure } from '../../../../../models/structure.model'; -import { GeojsonService } from '../../../../../services/geojson.service'; -import { NotificationService } from '../../../../../services/notification.service'; -import { RdvsService } from '../../../../../services/rdvs.service'; -import { StructureService } from '../../../../../services/structure.service'; -import { Filter } from '../../../../../structure-list/models/filter.model'; - -@Component({ - selector: 'app-meeting-rdvs-doing', - templateUrl: './meeting-rdvs-doing.component.html', - styleUrls: ['./meeting-rdvs-doing.component.scss'], -}) -export class MeetingRdvsDoingComponent implements OnInit { - @Input() form: UntypedFormGroup; - public structureList: Structure[] = []; - public filters: Filter[] = []; - public shouldReset = false; - @Output() setResetOrientation = new EventEmitter(); - constructor( - private structureService: StructureService, - private rdvsService: RdvsService, - private notificationService: NotificationService, - private geoJsonService: GeojsonService - ) {} - - async ngOnInit(): Promise<void> { - try { - this.buildFilters(); - await this.getData(); - - const addressCoords = this.form.get('address')?.value?.coordinates; - - if (addressCoords) { - this.structureList = this.sortByDistance(this.structureList, addressCoords); - } - - if (this.structureList.length === 0) { - this.shouldReset = true; - this.setResetOrientation.emit(); - return; - } - - this.rdvsService.sendStructureArray(this.structureList); - this.setResetOrientation.emit(); - } catch (error) { - console.error(error); - this.notificationService.showError('Une erreur est survenue', error.message); - } - } - - private async getData(): Promise<void> { - try { - // Get structures based on the filters - const structures = await lastValueFrom(this.structureService.getStructures(this.filters)); - - // Filter out structures that have no idCNFS or have a duplicate idCNFS - this.structureList = structures.reduce((acc, curr) => { - if (!curr.idCNFS || acc.some(structure => structure.idCNFS === curr.idCNFS)) { - // If current structure has no idCNFS or a duplicate idCNFS, skip it - return acc; - } - // If current structure has a unique idCNFS, add it to the list - return [...acc, curr]; - }, []); - } catch (error) { - console.error(error); - this.notificationService.showError('Error fetching structures', error.message); - } - } - - private buildFilters(): void { - const filters = []; - for (let [categ, moduleIdArray] of Object.entries(this.form.get('categories').value)) { - const idArray = moduleIdArray as string[]; - if (idArray.length) - idArray.forEach((filterId: string) => { - filters.push(new Filter(categ, filterId)); - }); - } - if (this.form.get('pmrAccess').value) filters.push(new Filter('pmrAccess', this.form.get('pmrAccess').value)); - if (this.form.get('digitalPass').value) filters.push(new Filter('labelsQualifications', 'passNumerique')); - filters.push(...this.form.get('onlineDemarcheType').value); - this.filters = filters; - } - private sortByDistance(structures: Structure[], addresscoords: number[]): Structure[] { - return structures.sort( - (a, b) => - parseInt(this.geoJsonService.getDistance(a.getLat(), a.getLon(), addresscoords[1], addresscoords[0], 'M')) - - parseInt(this.geoJsonService.getDistance(b.getLat(), b.getLon(), addresscoords[1], addresscoords[0], 'M')) - ); - } -} diff --git a/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.html b/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.html index 5cf5caeb6747723aedd09128e11aa9b47846f8e3..813fa15a50c24d3296e22e94416ca9c0928bdad2 100644 --- a/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.html +++ b/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.html @@ -1,3 +1,3 @@ -<h2>De quel accompagnement a besoin le bénéficiaire ?</h2> +<h2>De quel accompagnement la personne a-t-elle besoin ?</h2> <app-multi-radio-form [items]="accompanimentTypes" [selected]="selected" (handleSelect)="handleSelect($event)" /> diff --git a/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.ts b/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.ts index 7764df13b4689efc2da8469fe7d03bf24a4f61b9..f913c9647112724c2c3dd2a55d931ce9b1501116 100644 --- a/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.ts +++ b/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.ts @@ -15,18 +15,17 @@ export class AccompanimentTypeComponent implements OnInit { public accompanimentTypes: INeedItem[] = [ { title: "Trouver une structure proposant l'accompagnement adapté", - hint: "Le bénéficiaire pourra prendre contact avec la structure ou s'y rendre directement", + hint: 'La personne pourra prendre contact avec la structure ou s’y rendre directement', key: OnlineDemarche.structureList, }, - /* rdv disabled waiting for reworking { - title: 'Prendre RDV auprès d’un conseiller ou une conseillère numérique', - hint: 'Redirection vers RDV Aide Numérique pour voir les disponibilités', - key: OnlineDemarche.meetings, - },*/ + title: 'Prendre RDV auprès d’un conseiller ou une conseillère numérique', + hint: 'La demande de RDV sera transmise à un conseiller numérique', + key: OnlineDemarche.appointment, + }, { title: 'Choisir un créneau de médiation numérique à distance', - hint: 'Le bénéficiaire sera contacté par téléphone sur le créneau de son choix', + hint: 'La personne sera recontactée par téléphone sur le créneau de son choix', key: OnlineDemarche.onlineMediation, }, ]; diff --git a/src/app/form/orientation-form-view/online-demarch/online-demarch-common/online-demarch.component.html b/src/app/form/orientation-form-view/online-demarch/online-demarch-common/online-demarch.component.html index 81d97fa02a53330afdb9bd6b6d9e8fc22f8cfdbf..63b824b88a10c8e633887bea0ce6d1fb761fc68e 100644 --- a/src/app/form/orientation-form-view/online-demarch/online-demarch-common/online-demarch.component.html +++ b/src/app/form/orientation-form-view/online-demarch/online-demarch-common/online-demarch.component.html @@ -1,4 +1,4 @@ -<h2>Quelle démarche en ligne le bénéficiaire a-t-il besoin de réaliser ?</h2> +<h2>Quelle démarche en ligne la personne a-t-elle besoin de réaliser ?</h2> <div class="btn-grid btnContainer"> <span *ngFor="let module of accompanimentType"> <app-button diff --git a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component.html b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.html similarity index 59% rename from src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component.html rename to src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.html index 4bafb78e65016e717f0110dafea3e9a8ca36e9e1..8cc5163b731877f16de1f142a37fff0757768cd0 100644 --- a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component.html +++ b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.html @@ -1,4 +1,5 @@ -<h2>Quelles sont les informations du bénéficiaire ?</h2> +<h2 *ngIf="currentType !== 'RDV Conseiller Numérique'">Quelles sont les informations de la personne ?</h2> +<h2 *ngIf="currentType === 'RDV Conseiller Numérique'">Quelles sont les coordonnées de la personne ?</h2> <form [formGroup]="form"> <div class="form-group" fxLayout="column"> <label for="name">Prénom</label> @@ -39,8 +40,33 @@ </div> </div> + <div *ngIf="isEmail()" class="form-group" fxLayout="column"> + <label for="email">Email <sup *ngIf="isOrientationRdv" class="footnote-nb">1</sup></label> + <div fxLayout="row" fxLayoutGap="13px"> + <input + type="text" + autocomplete="on" + formControlName="email" + class="form-input" + (input)="updatedForm('email', $event.target)" + /> + <app-svg-icon + *ngIf="form.get('email').value && form.get('email').valid" + [iconClass]="'validation'" + [type]="'form'" + [icon]="'validate'" + /> + <app-svg-icon + *ngIf="form.get('email').value && !form.get('email').valid" + [iconClass]="'validation'" + [type]="'form'" + [icon]="'notValidate'" + /> + </div> + </div> + <div *ngIf="isPhone()" class="form-group" fxLayout="column"> - <label for="phone">Téléphone</label> + <label for="phone">Téléphone<sup *ngIf="isOrientationRdv" class="footnote-nb">1</sup></label> <div fxLayout="row" fxLayoutGap="13px"> <input type="phone" @@ -58,4 +84,8 @@ /> </div> </div> + <p *ngIf="isOrientationRdv && isPhone() && isEmail()" class="footnote"> + <sup class="footnote-nb">1</sup> Un moyen de communication (email et/ou téléphone) est obligatoire pour valider + cette étape + </p> </form> diff --git a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.scss b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..9059e80a0a42626129551f52623fca0b9ea0b748 --- /dev/null +++ b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.scss @@ -0,0 +1,11 @@ +@import 'color'; +@import 'typography'; + +sup { + color: red; + font-size: $font-size-xxsmall; +} +.footnote { + margin-top: 2em; + font-size: $font-size-xmsmall; +} diff --git a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component.ts b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.ts similarity index 62% rename from src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component.ts rename to src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.ts index f1713ddb0d929ee3e0f138685c5a25d19b87a682..8c67872fc54084d636edd683d40d84abbedc510f 100644 --- a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component.ts +++ b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.ts @@ -1,14 +1,18 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { UntypedFormGroup } from '@angular/forms'; import { Utils } from '../../../../../utils/utils'; +import { MediationType } from '../../../types/mediation.type'; @Component({ - selector: 'app-mediation-beneciary-info', - templateUrl: './mediation-beneciary-info.component.html', + selector: 'app-mediation-beneficiary-info', + templateUrl: './mediation-beneficiary-info.component.html', + styleUrls: ['./mediation-beneficiary-info.component.scss'], }) -export class MediationBeneciaryInfoComponent implements OnInit { +export class MediationBeneficiaryInfoComponent implements OnInit { @Input() form: UntypedFormGroup; @Output() checkValidation = new EventEmitter<any>(); + @Input() currentType: MediationType; + @Input() public isOrientationRdv = false; public utils = new Utils(); ngOnInit(): void { @@ -18,6 +22,9 @@ export class MediationBeneciaryInfoComponent implements OnInit { public isPhone(): boolean { return Boolean(this.form.get('phone')); } + public isEmail(): boolean { + return Boolean(this.form.get('email')); + } public updatedForm(field: string, target: EventTarget) { const value = (target as HTMLInputElement).value; diff --git a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-hours-selection/mediation-hours-selection.component.html b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-hours-selection/mediation-hours-selection.component.html index f710da40eb57330831ec9d6a0e980477d4147c12..963e7803612cc0aa234187c9d7c79501ea808593 100644 --- a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-hours-selection/mediation-hours-selection.component.html +++ b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-hours-selection/mediation-hours-selection.component.html @@ -1,4 +1,4 @@ -<h2>Sur quel créneau horaire le bénéficiaire souhaite-t-il être rappelé ?</h2> +<h2>Sur quel créneau horaire la personne souhaite-t-elle être rappelée ?</h2> <div class="subtitle">Horaires de la Hotline</div> <div class="container"> <div *ngFor="let slot of timeSlots" class="slot"> diff --git a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html index 4259b8ace0421ff487704f15b66efc2065f48b10..f361b712e534582ff9add2b5a868b2a5855b17e2 100644 --- a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html +++ b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html @@ -1,7 +1,7 @@ <!-- COMMON FORM --> <ng-container *ngIf="currentType === onlineDemarcheTypeEnum.common"> <app-online-demarch - *ngIf="currentStep === onlineDemarchesCommonStepsEnum.onlineDemarche" + *ngIf="needType === needEnum.onlineDemarch && currentStep === onlineDemarchesCommonStepsEnum.onlineDemarche" [form]="form" (checkValidation)="checkValidation()" /> @@ -10,54 +10,68 @@ [form]="form" (checkValidation)="checkValidation()" /> + <app-base-skills + *ngIf="needType === needEnum.learnSkills && currentStep === onlineDemarchesCommonStepsEnum.onlineDemarche" + [currentStep]="currentStep" + [currentType]="currentType" + [form]="filtersForm" + (validatePage)="checkValidation()" + /> </ng-container> -<!-- MEETING FORM (RDVS) --> -<ng-container *ngIf="currentType === onlineDemarcheTypeEnum.meetings"> +<!-- APPOINTMENT FORM --> +<ng-container *ngIf="currentType === onlineDemarcheTypeEnum.appointment"> <app-information-screen - *ngIf="currentStep === onlineDemarchesMeetingSteps.infoScreen" + *ngIf="currentStep === onlineDemarchesAppointmentSteps.infoScreen" [currentType]="currentType" (checkValidation)="checkValidation()" /> <app-structure-orientator - *ngIf="currentStep === onlineDemarchesMeetingSteps.structureOrientator" + *ngIf="currentStep === onlineDemarchesAppointmentSteps.structureOrientator" [profile]="profile" [form]="form" (validatePage)="checkValidation()" /> - <app-structure-public-target - *ngIf=" - currentStep === onlineDemarchesMeetingSteps.publicTypeMandatory || - currentStep === onlineDemarchesMeetingSteps.publicTypeOptional - " - [structureForm]="form" - [languageAndIlliteracy]="categories.languageAndIlliteracy" - [handicaps]="categories.handicaps" - [genre]="categories.genre" - [age]="categories.age" - [isMandatoryFields]="currentStep === onlineDemarchesMeetingSteps.publicTypeMandatory" - (validateForm)="checkValidation()" - (updateChoice)="updatePublicChoice($event)" - > - </app-structure-public-target> <app-structure-pmr - *ngIf="currentStep === onlineDemarchesMeetingSteps.pmrAccess" + *ngIf="currentStep === onlineDemarchesAppointmentSteps.pmrAccess" [structureForm]="form" (validateForm)="checkValidation()" (radioChange)="onRadioChange($event)" /> - <app-meeting-digital-pass - *ngIf="currentStep === onlineDemarchesMeetingSteps.digitalPass" + <app-orientation-structure-address + *ngIf="currentStep === onlineDemarchesAppointmentSteps.location" + [form]="form" + (addressStructure)="checkValidation()" + /> + <app-carto + *ngIf="currentStep === onlineDemarchesAppointmentSteps.carto" + [isOrientationForm]="true" + [isOrientationRdv]="true" + [filters]="filters" + [userLongitude]="form.get('address').value?.coordinates[0]" + [userLatitude]="form.get('address').value?.coordinates[1]" + (structureSelectionRDV)="checkValidation($event)" + /> + <app-make-appointment + *ngIf="currentStep === onlineDemarchesAppointmentSteps.makeAppointment" [form]="form" + [structureRDV]="structureRDV" (checkValidation)="checkValidation()" + (socialWorker)="getSocialWorker($event)" + (selectedStructureRDV)="getSelectedStructureRDV($event)" + (setResetOrientation)="showResetOrientation()" /> - <app-orientation-structure-address - *ngIf="currentStep === onlineDemarchesMeetingSteps.location" + <app-mediation-beneficiary-info + *ngIf="currentStep === onlineDemarchesAppointmentSteps.mediationBeneficiaryInfo" [form]="form" - (addressStructure)="checkValidation()" + [isOrientationRdv]="true" + (checkValidation)="checkValidation()" /> - <app-meeting-rdvs-doing - *ngIf="currentStep === onlineDemarchesMeetingSteps.rdvsDoing" + <app-appointment-end + *ngIf="currentStep === onlineDemarchesAppointmentSteps.rdvEnd" [form]="form" + [structureRDV]="structureRDV" + [selectedStructureRDV]="selectedStructureRDV" + [socialWorker]="socialWorker" (checkValidation)="checkValidation()" (setResetOrientation)="showResetOrientation()" /> @@ -69,8 +83,8 @@ [currentType]="currentType" (checkValidation)="checkValidation()" /> - <app-mediation-beneciary-info - *ngIf="currentStep === HotlineMediationStepsEnum.mediationBeneciaryInfo" + <app-mediation-beneficiary-info + *ngIf="currentStep === HotlineMediationStepsEnum.mediationBeneficiaryInfo" [form]="form" (checkValidation)="checkValidation()" /> diff --git a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts index 558eda13ab287b5f5acca3ebb1a24518836699dc..c1e9227b959437fd42a200f337bc070e819786bc 100644 --- a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts +++ b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts @@ -1,15 +1,20 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; -import { UntypedFormArray, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; +import { FormGroup, UntypedFormArray, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; +import { Owner } from '../../../models/owner.model'; +import { Structure } from '../../../models/structure.model'; import { User } from '../../../models/user.model'; +import { OrientationService } from '../../../services/orientation.service'; import { Category } from '../../../structure-list/models/category.model'; import { Filter } from '../../../structure-list/models/filter.model'; import { OrientationUtils } from '../../../utils/orientationUtils'; +import { AppointmentSteps } from '../enums/AppointmentSteps.enum'; import { HotlineMediationSteps } from '../enums/hotlineMediationSteps.enum'; -import { MeetingRDVSSteps } from '../enums/MeetingRDVSSteps.enum'; +import { NeedsType } from '../enums/needs.enum'; import { OnlineDemarche } from '../enums/onlineDemarche.enum'; import { OnlineDemarchesCommonSteps } from '../enums/onlineDemarchesCommonSteps.enum'; import { RecapsType } from '../enums/recapsType.enum'; import { StructuresListSteps } from '../enums/structuresListSteps.enum'; +import { FiltersForm } from '../interfaces/filtersForm.interface'; import { MediationType } from '../types/mediation.type'; import { MediationStepType } from '../types/mediationStep.type'; import { OnlineMediationSteps } from '../types/onlineDemarcheStep.type'; @@ -19,27 +24,36 @@ import { OnlineMediationSteps } from '../types/onlineDemarcheStep.type'; templateUrl: './onlineDemarch-form.component.html', }) export class OnlineDemarchFormComponent { - @Input() currentStep: OnlineMediationSteps | StructuresListSteps | MeetingRDVSSteps | MediationStepType; + @Input() needType: NeedsType; + @Input() currentStep: OnlineMediationSteps | StructuresListSteps | AppointmentSteps | MediationStepType; @Input() currentType: OnlineDemarche | MediationType; @Input() form: UntypedFormGroup; @Input() filters: Filter[] = []; + @Input() filtersForm: FormGroup<FiltersForm>; @Input() profile: User; @Input() categories: { [key: string]: Category }; + @Input() structureRDV: Structure; + @Input() selectedStructureRDV: Structure; @Output() validatePage = new EventEmitter<any>(); + @Output() validateStructureRDV = new EventEmitter<Structure>(); @Output() setResetOrientation = new EventEmitter<any>(); public orientationUtils = new OrientationUtils(); public pagesValidation: any[] = []; + public socialWorker: Owner; // Enums public HotlineMediationStepsEnum = HotlineMediationSteps; public onlineDemarchesCommonStepsEnum = OnlineDemarchesCommonSteps; public structuresListStepsEnum = StructuresListSteps; public onlineDemarcheTypeEnum = OnlineDemarche; - public onlineDemarchesMeetingSteps = MeetingRDVSSteps; + public onlineDemarchesAppointmentSteps = AppointmentSteps; + public needEnum = NeedsType; public recapsType = RecapsType; - public checkValidation(): void { + constructor(public orientationService: OrientationService) {} + + public checkValidation(event?: any): void { switch (this.currentType) { case OnlineDemarche.onlineMediation: this.orientationUtils.setValidationsOnlineMediationForm( @@ -58,19 +72,38 @@ export class OnlineDemarchFormComponent { ); break; case OnlineDemarche.common: - this.orientationUtils.setValidationsOnlineDemarchesForm( - this.pagesValidation, - this.form, - (isValid) => this.validatePage.emit(isValid), - this.currentStep as OnlineDemarchesCommonSteps - ); + if (this.needType === NeedsType.learnSkills) { + this.orientationUtils.setValidationsLearnSkillsForm( + this.pagesValidation, + this.filtersForm, + this.form, + (isValid) => this.validatePage.emit(isValid), + this.currentStep as OnlineDemarchesCommonSteps + ); + } else { + this.orientationUtils.setValidationsOnlineDemarchesForm( + this.pagesValidation, + this.form, + (isValid) => this.validatePage.emit(isValid), + this.currentStep as OnlineDemarchesCommonSteps + ); + } break; - case OnlineDemarche.meetings: - this.orientationUtils.setValidationsOnlineMeetingForm( + case OnlineDemarche.appointment: + if (this.currentStep === AppointmentSteps.carto - 1) { + // if rdv from structure details, don't reinit the structureRDV variable + if (!this.orientationService.rdvStructure) this.structureRDV = null; + } + if (this.currentStep === AppointmentSteps.carto) { + this.structureRDV = event; + this.validateStructureRDV.emit(event); + return; + } + this.orientationUtils.setValidationsAppointmentForm( this.pagesValidation, this.form, (isValid) => this.validatePage.emit(isValid), - this.currentStep as MeetingRDVSSteps + this.currentStep as AppointmentSteps ); break; default: @@ -78,6 +111,13 @@ export class OnlineDemarchFormComponent { } } + public getSocialWorker(item: Owner) { + this.socialWorker = item; + } + public getSelectedStructureRDV(structure: Structure) { + this.selectedStructureRDV = structure; + } + public updatePublicChoice({ formControlName, choice }: { formControlName: string; choice: string }): void { const event = !this.isInArray({ formControlName, term: choice }); this.onCheckChange({ event, formControlName, value: choice }); @@ -110,9 +150,10 @@ export class OnlineDemarchFormComponent { } return false; } - public onRadioChange(nameAndEvent: { name: string; value: boolean }): void { - const { name, value } = nameAndEvent; + public onRadioChange(event: { name: string; value: boolean }): void { + const { name, value } = event; this.form.get(name).setValue(value); + this.orientationUtils.manuallySetOfPmr(this.filters, event); this.checkValidation(); } public showResetOrientation(): void { diff --git a/src/app/form/orientation-form-view/orientation-form-view.component.html b/src/app/form/orientation-form-view/orientation-form-view.component.html index adea40f644adadd0fd79a8582543e39c997da884..db70064d360d2e18c52badc4392a4ce58b3ae168 100644 --- a/src/app/form/orientation-form-view/orientation-form-view.component.html +++ b/src/app/form/orientation-form-view/orientation-form-view.component.html @@ -30,23 +30,20 @@ (validatePage)="validatePage($event)" ></app-equipment-buy> <app-online-demarch-form - *ngIf="needType === needEnum.onlineDemarch" + *ngIf="needType === needEnum.onlineDemarch || needType === needEnum.learnSkills" + [needType]="needType" [currentStep]="currentStep" [currentType]="currentType" [form]="onlineDemarcheForm" [filters]="filters" + [filtersForm]="filtersForm" [profile]="profile" [categories]="categories" + [structureRDV]="orientationService.rdvStructure" (validatePage)="validatePage($event)" + (validateStructureRDV)="validateStructureRDV($event)" (setResetOrientation)="setResetOrientation()" /> - <app-base-skills - *ngIf="needType === needEnum.learnSkills" - [currentStep]="currentStep" - [currentType]="currentType" - [form]="filtersForm" - (validatePage)="validatePage($event)" - /> </ng-container> </div> <div class="navButtons"> @@ -56,11 +53,11 @@ [needType]="needType" [currentType]="currentType" [isPageValid]="isPageValid" - [isRdvsWindowStep]="isRdvsWindowStep" [hideNavButtons]="hideNavButtons" [shouldResetOrientation]="shouldResetOrientation" (goNext)="nextPage()" (goPrev)="prevPage()" + (goReset)="reset()" /> </div> <app-modal-confirmation diff --git a/src/app/form/orientation-form-view/orientation-form-view.component.ts b/src/app/form/orientation-form-view/orientation-form-view.component.ts index 223d9a059e629d944e75c37f51a20f8fe7969df6..de82fa49ec35b910b0ced3504aa17505b5ea9929 100644 --- a/src/app/form/orientation-form-view/orientation-form-view.component.ts +++ b/src/app/form/orientation-form-view/orientation-form-view.component.ts @@ -1,10 +1,13 @@ import { AfterContentChecked, ChangeDetectorRef, Component, OnInit } from '@angular/core'; -import { FormGroup, UntypedFormGroup } from '@angular/forms'; +import { AbstractControl, FormGroup, UntypedFormGroup } from '@angular/forms'; +import { lastValueFrom } from 'rxjs'; +import { Structure } from '../../models/structure.model'; import { User } from '../../models/user.model'; import { ProfileService } from '../../profile/services/profile.service'; import { AuthService } from '../../services/auth.service'; +import { IndicatorService } from '../../services/indicator.service'; import { NotificationService } from '../../services/notification.service'; -import { OnlineMediationService } from '../../services/online-mediation.service'; +import { OrientationService } from '../../services/orientation.service'; import { StructureService } from '../../services/structure.service'; import { CategoryEnum } from '../../shared/enum/category.enum'; import { Category } from '../../structure-list/models/category.model'; @@ -13,7 +16,7 @@ import { Module } from '../../structure-list/models/module.model'; import { SearchService } from '../../structure-list/services/search.service'; import { OrientationUtils } from '../../utils/orientationUtils'; import { Utils } from '../../utils/utils'; -import { MeetingRDVSSteps } from './enums/MeetingRDVSSteps.enum'; +import { AppointmentSteps } from './enums/AppointmentSteps.enum'; import { FiltersSteps } from './enums/filtersSteps.enum'; import { GenericOrientationSteps } from './enums/genericOrientationSteps.enum'; import { HotlineMediationSteps } from './enums/hotlineMediationSteps.enum'; @@ -21,8 +24,14 @@ import { NeedsType } from './enums/needs.enum'; import { OnlineDemarche } from './enums/onlineDemarche.enum'; import { OnlineDemarchesCommonSteps } from './enums/onlineDemarchesCommonSteps.enum'; import { StructuresListSteps } from './enums/structuresListSteps.enum'; +import { IAppointment } from './interfaces/appointment.interface'; import { FiltersForm } from './interfaces/filtersForm.interface'; import { IOnlineMediation } from './interfaces/onlineMediation.interface'; +import { + IOrientationIndicator, + OrientationIndicatorStructure, + OrientationIndicatorType, +} from './interfaces/orientationIndicator.interface'; import { StructureOrientationForm } from './interfaces/structureOrientationForm.interface'; import { StructureOrientator } from './interfaces/structureOrientator.interface'; import { MediationType } from './types/mediation.type'; @@ -37,7 +46,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked public static readonly MAX_STEP = (Math.max( Object.keys(HotlineMediationSteps).length, - Object.keys(MeetingRDVSSteps).length, + Object.keys(AppointmentSteps).length, Object.keys(StructuresListSteps).length ) + Object.keys(OnlineDemarchesCommonSteps).length) / @@ -56,11 +65,11 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked public needEnum = NeedsType; // Global public needType: NeedsType; + public indicatorNeedType: NeedsType; public previousNeedType: NeedsType; public currentType: MediationType = OnlineDemarche.common; public currentStep: MediationStepType = null; public isLastStep = false; - public isRdvsWindowStep = false; public hideNavButtons = false; public nbSteps: number = OrientationFormViewComponent.MAX_STEP; public isPageValid: boolean = false; @@ -103,17 +112,29 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked private resolve: Function; constructor( - private onlineMediationService: OnlineMediationService, + public orientationService: OrientationService, private notificationService: NotificationService, private authService: AuthService, private profileService: ProfileService, private searchService: SearchService, private structureService: StructureService, - private cdref: ChangeDetectorRef + private cdref: ChangeDetectorRef, + private indicatorService: IndicatorService ) { this.setCategories(); } async ngOnInit() { + this.orientationService.rdvUser = null; + if (history.state.rdvUser) { + this.orientationService.rdvUser = new User(history.state.rdvUser); + } + + this.orientationService.rdvStructure = null; + if (history.state.rdvStructure) { + // Create new Structure object to call Structure functions (getTypeStructureIcon,...) + this.orientationService.rdvStructure = new Structure(history.state.rdvStructure); + } + if (!this.authService.isLoggedIn()) { this.showLoginModal = true; } else { @@ -146,6 +167,11 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked this.isPageValid = event; } + public validateStructureRDV(event: Structure) { + this.onlineDemarcheForm.get('structureRDV').patchValue(event._id); + this.nextPage(); + } + public setStepNumber(enumLength: number): void { this.nbSteps = enumLength / 2; } @@ -172,47 +198,61 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked } public checkLastStep(): void { - if ( - this.needType === NeedsType.onlineDemarch && - this.currentType === OnlineDemarche.meetings && - this.currentStep === MeetingRDVSSteps.location - ) { - this.isRdvsWindowStep = true; - } - if ( - this.needType === NeedsType.onlineDemarch && + const isOnlineDemarcheOrLearnSkills = + this.needType === NeedsType.onlineDemarch || this.needType === NeedsType.learnSkills; + const isOnlineMediationOrientationRecap = + isOnlineDemarcheOrLearnSkills && this.currentType === OnlineDemarche.onlineMediation && - this.currentStep === HotlineMediationSteps.orientationRecap - ) { - this.isLastStep = true; - } else if (this.isStructureListForm() && this.currentStep === StructuresListSteps.orientationRecap) { - this.isLastStep = true; - } else this.isLastStep = false; + this.currentStep === HotlineMediationSteps.orientationRecap; + const isStructureListOrientationRecap = + this.currentType === OnlineDemarche.structureList && this.currentStep === StructuresListSteps.orientationRecap; + const isAppointmentRdvEnd = + isOnlineDemarcheOrLearnSkills && + this.currentType === OnlineDemarche.appointment && + this.currentStep === AppointmentSteps.rdvEnd; + this.isLastStep = isOnlineMediationOrientationRecap || isStructureListOrientationRecap || isAppointmentRdvEnd; + } + + /** + * Handle appointment, send to server + */ + public async handleAppointment(): Promise<void> { + const appointment: IAppointment = { + ...this.onlineDemarcheForm.value, + }; + + // pmrAccess filter must not be send in the onlineDemarcheType array of the appointment + appointment.onlineDemarcheType = appointment.onlineDemarcheType.filter((item) => item['name'] != 'pmrAccess'); + + await lastValueFrom(this.orientationService.createAppointment(appointment)); + this.canDeactivate = true; } /** - * Handle online mediation finish by sending appointements to server + * Handle online mediation, send to server then print */ - public handleOnlineAppointment(): void { + public async handleOnlineAppointment(): Promise<void> { const toCreate: IOnlineMediation = { ...this.onlineDemarcheForm.value, - onlineDemarchType: this.onlineDemarcheForm.value.filters.map((module: Module) => module.displayText), + onlineDemarcheType: this.onlineDemarcheForm.value.filters.map((module: Module) => module.displayText), }; - this.onlineMediationService.createOnlineMediation(toCreate).subscribe((data) => { - if (data) { + await lastValueFrom(this.orientationService.createOnlineMediation(toCreate)) + .then(() => { this.canDeactivate = true; this.notificationService.showSuccess('Votre démarche en ligne a bien été enregistrée'); - } else { - this.notificationService.showError('Echec de la création de votre démarche en ligne'); - } - this.printForm(); - }); + }) + .catch((error) => { + this.notificationService.showErrorPleaseRetry('Echec de la création de votre démarche en ligne'); + }) + .finally(() => this.printForm()); } public printForm(): void { + this.sendOrientationIndicator(this.structureOrientationForm ?? this.onlineDemarcheForm); window.print(); setTimeout(() => { this.canDeactivate = true; + history.pushState({ rdvStructure: null, rdvUser: null }, '', '/orientation'); window.location.reload(); }, 100); } @@ -238,12 +278,11 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked this.utils.convertFiltersToModule(this.filters) ); break; - case OnlineDemarche.meetings: - this.currentType = OnlineDemarche.meetings; - this.currentStep = MeetingRDVSSteps.infoScreen; - this.setStepNumber(Object.keys(MeetingRDVSSteps).length); - this.skipStructureOrientator(); - this.onlineDemarcheForm = this.orientationUtils.createMeetingRDVSForm(this.filters, this.orientator); + case OnlineDemarche.appointment: + this.currentType = OnlineDemarche.appointment; + this.currentStep = AppointmentSteps.infoScreen; + this.setStepNumber(Object.keys(AppointmentSteps).length); + this.onlineDemarcheForm = this.orientationUtils.createAppointmentForm(this.filters, this.orientator); break; case OnlineDemarche.onlineMediation: this.currentType = OnlineDemarche.onlineMediation; @@ -282,10 +321,14 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked }); } - public skipStructureOrientator() { + private skipStructureOrientator(isNextPage: boolean) { if (this.profile?.structuresLink?.length === 1) { - // skip first step - this.currentStep++; + // skip structureOrientator if user with only one structure + if (isNextPage) { + this.currentStep++; + } else { + this.currentStep--; + } } } @@ -304,9 +347,8 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked }); } - public nextPage(): void { + public async nextPage(): Promise<void> { this.isPageValid = false; - this.isRdvsWindowStep = false; this.hideNavButtons = false; // Handle filters form if ( @@ -314,37 +356,53 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked this.currentType === GenericOrientationSteps.common && this.currentStep === FiltersSteps.filterChoice ) { + this.indicatorNeedType = this.needType; switch (this.needType) { case NeedsType.equipmentAccess: this.previousNeedType = NeedsType.equipmentAccess; this.setFilters('selfServiceMaterial'); // Switch to structure list form this.setOnlineEquipmentsForm(); - break; + return; case NeedsType.equipmentBuy: this.previousNeedType = NeedsType.equipmentBuy; this.setFilters('solidarityMaterial'); // Switch to structure list form this.setOnlineEquipmentsForm(); - break; + return; case NeedsType.learnSkills: this.previousNeedType = NeedsType.learnSkills; this.setFilters('baseSkills'); this.needType = NeedsType.onlineDemarch; - this.currentStep = OnlineDemarchesCommonSteps.accompanimentType; + this.indicatorNeedType = NeedsType.learnSkills; // ugly but would need a big refacto to stop changing needtype to fit onlinedemarch form + if (this.orientationService.rdvStructure || this.orientationService.rdvUser) { + // if rdv from structure details or user, continue function below to skip accompanimentType and init onlineDemarcheForm + this.currentStep = OnlineDemarchesCommonSteps.accompanimentType - 1; + } else { + this.currentStep = OnlineDemarchesCommonSteps.accompanimentType; + return; + } break; } - return; } - // Online demarches - if (this.needType === NeedsType.onlineDemarch) { + // Online demarches or learn skills + if (this.needType === NeedsType.onlineDemarch || this.needType === NeedsType.learnSkills) { + if ( + this.currentType === OnlineDemarche.common && + this.currentStep === OnlineDemarchesCommonSteps.accompanimentType - 1 && + (this.orientationService.rdvStructure || this.orientationService.rdvUser) + ) { + this.onlineDemarcheForm.get('accompanimentType').patchValue(OnlineDemarche.appointment); + this.currentStep++; + } + if ( this.currentType === OnlineDemarche.common && this.currentStep === OnlineDemarchesCommonSteps.accompanimentType ) { this.setOnlineProcedureFilters(); this.setOnlineProceduresForm(); - this.previousNeedType = NeedsType.onlineDemarch; + this.previousNeedType = this.needType; return; } // Handle last screen Online appointment and print @@ -352,13 +410,24 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked this.currentType === OnlineDemarche.onlineMediation && this.currentStep === HotlineMediationSteps.orientationRecap ) { - this.handleOnlineAppointment(); + await this.handleOnlineAppointment(); return; } + // Handle last screen appointment + if (this.currentType === OnlineDemarche.appointment && this.currentStep === AppointmentSteps.rdvEnd - 1) { + try { + await this.handleAppointment(); + } catch (e) { + console.log(e); + this.notificationService.showErrorPleaseRetry("Echec de l'envoi de votre demande de RDV"); + // If appointment fails, don't go to next page + return; + } + } } // Structure list handling - if (this.isStructureListForm()) { + if (this.currentType === OnlineDemarche.structureList) { // Print last screen if (this.currentStep === StructuresListSteps.orientationRecap) { this.printForm(); @@ -372,10 +441,59 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked // Unset fullscreen if (this.currentStep === StructuresListSteps.structureChoice) { this.fullScreen = false; - this.skipStructureOrientator(); + this.skipStructureOrientator(true); } } + // Appointment handling + if (this.currentType === OnlineDemarche.appointment) { + if (this.currentStep === AppointmentSteps.structureOrientator - 1) { + this.skipStructureOrientator(true); + } + + // If no structure found, go to the end + if (this.currentStep === AppointmentSteps.pmrAccess) { + if ( + (await lastValueFrom(this.structureService.getStructures(this.filters))).filter( + (structure) => structure.hasUserWithAppointmentDN + ).length == 0 + ) { + this.sendOrientationIndicator(this.structureOrientationForm ?? this.onlineDemarcheForm); + this.currentStep = AppointmentSteps.rdvEnd - 1; + } + } + + // Carto display case for full screen + // Set to full screen + if (this.currentStep === AppointmentSteps.location) { + this.fullScreen = true; + } + // Unset fullscreen + if (this.currentStep === AppointmentSteps.carto) { + this.fullScreen = false; + } + + // after last page, go to new orientation + if (this.currentStep === AppointmentSteps.rdvEnd) { + this.sendOrientationIndicator(this.structureOrientationForm ?? this.onlineDemarcheForm); + history.pushState({ rdvStructure: null, rdvUser: null }, '', '/orientation'); + window.location.reload(); + return; + } + } + + if ( + this.currentType === OnlineDemarche.appointment && + this.currentStep === AppointmentSteps.pmrAccess - 1 && + (this.orientationService.rdvStructure || this.orientationService.rdvUser) + ) { + if (this.orientationService.rdvStructure) { + this.onlineDemarcheForm.get('structureRDV').patchValue(this.orientationService.rdvStructure._id); + } + // skip pmrAccess, location and carto + this.currentStep += 3; + } + // Default case if (this.currentStep === null) { // handle the form start @@ -390,28 +508,60 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked } public prevPage(): void { - this.isRdvsWindowStep = false; this.hideNavButtons = false; // Structure list previous page - if (this.isStructureListForm()) { + if (this.currentType === OnlineDemarche.structureList) { if (this.currentStep === StructuresListSteps.structureChoice) { this.fullScreen = false; } - if (this.currentStep === StructuresListSteps.structureOrientator) { + if (this.currentStep === StructuresListSteps.structureOrientator + 1) { + this.skipStructureOrientator(false); + } + if (this.currentStep === StructuresListSteps.structureChoice + 1) { this.fullScreen = true; } } + // Appointment previous page + if (this.currentType === OnlineDemarche.appointment) { + if ( + this.currentStep === AppointmentSteps.pmrAccess + 1 && + (this.orientationService.rdvStructure || this.orientationService.rdvUser) + ) { + this.currentStep--; + } + if (this.currentStep === AppointmentSteps.structureOrientator + 1) { + this.skipStructureOrientator(false); + } + if (this.currentStep === AppointmentSteps.carto) { + this.fullScreen = false; + } + if (this.currentStep === AppointmentSteps.makeAppointment) { + this.fullScreen = true; + } + if ( + this.currentStep === AppointmentSteps.makeAppointment && + (this.orientationService.rdvStructure || this.orientationService.rdvUser) + ) { + this.fullScreen = false; + this.currentStep -= 3; + this.skipStructureOrientator(false); + } + } + // Default case for first form step. If there was a previous form (like filterForm) we go back to this form if (this.currentStep === 0) { switch (this.previousNeedType) { + case NeedsType.learnSkills: case NeedsType.onlineDemarch: this.currentType = OnlineDemarche.common; this.currentStep = OnlineDemarchesCommonSteps.accompanimentType; this.onlineDemarcheForm = this.orientationUtils.createOnlineDemarchesForm(); this.previousNeedType = null; + if (this.orientationService.rdvStructure || this.orientationService.rdvUser) { + this.currentStep--; + } return; - case NeedsType.learnSkills: case NeedsType.equipmentAccess: case NeedsType.equipmentBuy: this.needType = this.previousNeedType; @@ -428,13 +578,6 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked // handle the form start } if (this.currentStep > 0) { - // Special case for learnSkills - if (this.previousNeedType === NeedsType.learnSkills && this.currentStep === 1) { - this.needType = this.previousNeedType; - this.currentType = OnlineDemarche.common; - this.currentStep = OnlineDemarchesCommonSteps.accompanimentType; - this.previousNeedType = null; - } this.currentStep--; this.checkLastStep(); this.checkHideNavButtons(); @@ -447,24 +590,14 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked this.filtersForm = undefined; this.currentStep = null; this.currentType = OnlineDemarche.common; + this.isLastStep = false; + this.shouldResetOrientation = false; this.nbSteps = OrientationFormViewComponent.MAX_STEP; this.isPageValid = false; this.needType = undefined; this.filters = []; } - /** - * Return if it's a Structure List form - * @returns - */ - private isStructureListForm(): boolean { - return ( - (this.needType === NeedsType.onlineDemarch || - this.needType === NeedsType.equipmentAccess || - this.needType === NeedsType.equipmentBuy) && - this.currentType === OnlineDemarche.structureList - ); - } /** * Return if it's a filter form * @returns @@ -491,13 +624,82 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked } public hasRedirectionAccepted(hasAccept: boolean): void { this.resolve(hasAccept); + if (hasAccept) { + this.sendOrientationIndicator(this.structureOrientationForm ?? this.onlineDemarcheForm); + } this.showConfirmationModal = false; } + + private targetStructures(structureChoice: AbstractControl): OrientationIndicatorStructure[] { + const targetStructures: OrientationIndicatorStructure[] = []; + if (structureChoice && structureChoice.value) { + structureChoice.value.forEach((structure: Structure) => { + targetStructures.push({ + nom: structure.structureName, + adresse: structure.address, + zoneCTM: structure.categories.ctm?.join(',') ?? null, + distance: structure.distance ?? null, + }); + }); + } + return targetStructures; + } + + private displayTextNeedType(needType: NeedsType): string { + switch (needType) { + case NeedsType.equipmentAccess: + return 'accès matériel'; + case NeedsType.equipmentBuy: + return 'achat matériel'; + case NeedsType.learnSkills: + return 'compétences'; + case NeedsType.onlineDemarch: + return 'démarche en ligne'; + default: + return ''; + } + } + + private orientationType(filters: Filter[]): OrientationIndicatorType { + const orientationType: OrientationIndicatorType = { + typeOrientation: this.displayTextNeedType(this.indicatorNeedType ?? this.needType), + filtres: [], + typeAccompagnement: this.currentType, + }; + filters.forEach((filter: Filter) => { + orientationType.filtres.push(filter.text); + }); + return orientationType; + } + + private getProgress(): number { + if (this.isLastStep) { + return 100; + } + return Math.round((this.currentStep / this.nbSteps) * 100); + } + + private sendOrientationIndicator(orientationForm: FormGroup): void { + const orientationCompleted: boolean = this.isLastStep; + const orientationIndicator: IOrientationIndicator = { + origin: { + nom: orientationForm?.get('structureOrientator')?.value.structureName ?? null, + adresse: orientationForm?.get('address')?.value ?? null, + }, + target: this.targetStructures(orientationForm.get('structureChoice')) ?? null, + type: this.orientationType(this.filters), + connected: this.authService.isLoggedIn(), + completed: orientationCompleted, + progress: this.getProgress(), + }; + + this.indicatorService.createOrientationIndicator(orientationIndicator).subscribe(); + } public checkHideNavButtons(): void { if ( - this.needType === NeedsType.onlineDemarch && - this.currentType === OnlineDemarche.meetings && - this.currentStep === MeetingRDVSSteps.rdvsDoing + (this.needType === NeedsType.onlineDemarch || this.needType === NeedsType.learnSkills) && + this.currentType === OnlineDemarche.appointment && + this.currentStep === AppointmentSteps.carto ) { this.hideNavButtons = true; } diff --git a/src/app/form/orientation-form-view/orientation-structure-list/orientation-comments/orientation-comments.component.html b/src/app/form/orientation-form-view/orientation-structure-list/orientation-comments/orientation-comments.component.html index ee6537cde5b6d60d3194080e1276261c1651c118..151949484e90dff643cbbbfdcf3649d50dcbc451 100644 --- a/src/app/form/orientation-form-view/orientation-structure-list/orientation-comments/orientation-comments.component.html +++ b/src/app/form/orientation-form-view/orientation-structure-list/orientation-comments/orientation-comments.component.html @@ -5,7 +5,7 @@ <p>Facultatif</p> </div> </div> - <p>Ces informations accompagneront la fiche d'orientation du bénéficiaire</p> + <p>Ces informations accompagneront la fiche d'orientation de la personne</p> <div class="textareaBlock" fxLayout="column"> <textarea rows="8" diff --git a/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.html b/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.html index eccf3745bacca2f1e9aa028e7939392c50fa6b94..15c93ca9de872ab5b833d52453d86aed28e8a87c 100644 --- a/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.html +++ b/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.html @@ -26,8 +26,8 @@ (validatePage)="checkValidation($event)" /> - <app-mediation-beneciary-info - *ngIf="currentStep === structuresListStepsEnum.mediationBeneciaryInfo" + <app-mediation-beneficiary-info + *ngIf="currentStep === structuresListStepsEnum.mediationBeneficiaryInfo" [form]="form" (checkValidation)="checkValidation()" /> diff --git a/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.ts b/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.ts index 2966825a0e50f81b18c778cfa9b6e3155d4ea3d2..52dd666472fcf548f33f601cf77167c1946cdd20 100644 --- a/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.ts +++ b/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.ts @@ -3,7 +3,9 @@ import { UntypedFormGroup } from '@angular/forms'; import { Structure } from '../../../models/structure.model'; import { User } from '../../../models/user.model'; import { Filter } from '../../../structure-list/models/filter.model'; +import { OrientationUtils } from '../../../utils/orientationUtils'; import { FiltersSteps } from '../enums/filtersSteps.enum'; +import { NeedsType } from '../enums/needs.enum'; import { RecapsType } from '../enums/recapsType.enum'; import { StructuresListSteps } from '../enums/structuresListSteps.enum'; import { MediationStepType } from '../types/mediationStep.type'; @@ -13,11 +15,14 @@ import { MediationStepType } from '../types/mediationStep.type'; templateUrl: './orientation-structure-list.component.html', }) export class OrientationStructureListComponent implements OnChanges { - @Input() currentStep: StructuresListSteps | FiltersSteps | MediationStepType; + @Input() currentStep: StructuresListSteps | FiltersSteps | MediationStepType | NeedsType; @Input() profile: User; @Input() form: UntypedFormGroup; @Input() filters: Filter[] = []; @Output() validatePage = new EventEmitter<any>(); + + public orientationUtils = new OrientationUtils(); + // Enum public structuresListStepsEnum = StructuresListSteps; public recapsType = RecapsType; @@ -31,7 +36,8 @@ export class OrientationStructureListComponent implements OnChanges { public radioChange(event: { name: string; value: boolean }): void { const { name, value } = event; this.form.get(name).setValue(value); - this.manuallySetOfPmr(event); + this.orientationUtils.manuallySetOfPmr(this.filters, event); + this.checkValidation(); } public checkValidation(event?: any): void { @@ -49,16 +55,4 @@ export class OrientationStructureListComponent implements OnChanges { } this.validatePage.emit(event); } - - private manuallySetOfPmr(event: { name: string; value: boolean }): void { - // Handle special PMR access case - if (event.name === 'pmrAccess') { - if (event.value) { - this.filters.push(new Filter('pmrAccess', 'True', 'PMR')); - } else { - this.filters = this.filters.filter((module) => module.name !== 'pmrAccess'); - } - } - this.checkValidation(); - } } diff --git a/src/app/form/orientation-form-view/orientation.module.ts b/src/app/form/orientation-form-view/orientation.module.ts index 7509686d8568e535b3bed9f4dbf66e3b8cb442be..31dd2922656d208272c70eebcb44bec2f12853b9 100644 --- a/src/app/form/orientation-form-view/orientation.module.ts +++ b/src/app/form/orientation-form-view/orientation.module.ts @@ -16,12 +16,12 @@ import { OrientationRecapComponent } from './global-components/orientation-recap import { PrintHeaderComponent } from './global-components/print-header/print-header.component'; import { SelectComponent } from './global-components/select/select.component'; import { StructureOrientatorComponent } from './global-components/structure-orientator/structure-orientator.component'; +import { AppointmentEndComponent } from './online-demarch/appointment/appointment-end/appointment-end.component'; +import { MakeAppointmentComponent } from './online-demarch/appointment/make-appointment/make-appointment.component'; import { MediationLanguageSelectionComponent } from './online-demarch/mediation-language-selection/mediation-language-selection.component'; -import { MeetingDigitalPassComponent } from './online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component'; -import { MeetingRdvsDoingComponent } from './online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component'; import { AccompanimentTypeComponent } from './online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component'; import { OnlineDemarchComponent } from './online-demarch/online-demarch-common/online-demarch.component'; -import { MediationBeneciaryInfoComponent } from './online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component'; +import { MediationBeneficiaryInfoComponent } from './online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component'; import { MediationHoursSelectionComponent } from './online-demarch/online-mediation/mediation-hours-selection/mediation-hours-selection.component'; import { OnlineDemarchFormComponent } from './online-demarch/onlineDemarch-form.component'; import { OrientationFormViewComponent } from './orientation-form-view.component'; @@ -38,7 +38,7 @@ import { OrientationStructureListComponent } from './orientation-structure-list/ MultiRadioFormComponent, OnlineDemarchComponent, AccompanimentTypeComponent, - MediationBeneciaryInfoComponent, + MediationBeneficiaryInfoComponent, MediationHoursSelectionComponent, OrientationRecapComponent, OnlineDemarchFormComponent, @@ -56,8 +56,8 @@ import { OrientationStructureListComponent } from './orientation-structure-list/ BaseSkillsChoiceComponent, MediationLanguageSelectionComponent, SelectComponent, - MeetingDigitalPassComponent, - MeetingRdvsDoingComponent, + MakeAppointmentComponent, + AppointmentEndComponent, InformationScreenComponent, ], imports: [OrientationRoutingModule, CartoModule, SharedModule], diff --git a/src/app/form/orientation-form-view/types/onlineDemarcheStep.type.ts b/src/app/form/orientation-form-view/types/onlineDemarcheStep.type.ts index f79cbe32c8687411c09b08f22e3ea742f2186421..4134976e9518457e79da9cf46045fc5afd29e28a 100644 --- a/src/app/form/orientation-form-view/types/onlineDemarcheStep.type.ts +++ b/src/app/form/orientation-form-view/types/onlineDemarcheStep.type.ts @@ -1,10 +1,10 @@ +import { AppointmentSteps } from '../enums/AppointmentSteps.enum'; import { HotlineMediationSteps } from '../enums/hotlineMediationSteps.enum'; import { OnlineDemarchesCommonSteps } from '../enums/onlineDemarchesCommonSteps.enum'; -import { MeetingRDVSSteps } from '../enums/MeetingRDVSSteps.enum'; import { StructuresListSteps } from '../enums/structuresListSteps.enum'; export type OnlineMediationSteps = | HotlineMediationSteps | StructuresListSteps | OnlineDemarchesCommonSteps - | MeetingRDVSSteps; + | AppointmentSteps; diff --git a/src/app/form/orientation-form-view/types/orientation.type.ts b/src/app/form/orientation-form-view/types/orientation.type.ts deleted file mode 100644 index c77c285bc69429d9a1bb955eac65873fe907cf65..0000000000000000000000000000000000000000 --- a/src/app/form/orientation-form-view/types/orientation.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { GenericOrientationSteps } from '../enums/genericOrientationSteps.enum'; -import { OnlineDemarche } from '../enums/onlineDemarche.enum'; - -export type OrientationType = OnlineDemarche | GenericOrientationSteps; diff --git a/src/app/guards/deactivate.guard.ts b/src/app/guards/deactivate.guard.ts index a0e8f3d14fc5fe715bc76d69d16215687362a0e9..00075b2be2df6bd5a1977036c9dd3948c5b47984 100644 --- a/src/app/guards/deactivate.guard.ts +++ b/src/app/guards/deactivate.guard.ts @@ -14,6 +14,6 @@ export class DeactivateGuard implements CanDeactivate<Object> { component: Object; canDeactivate(component: IDeactivateComponent): Observable<boolean> | Promise<boolean> | boolean { - return component.canExit(); + return component?.canExit(); } } diff --git a/src/app/map/components/map.component.scss b/src/app/map/components/map.component.scss index f09fccb0d19f83804a0a669bd96bf066c42c0874..1208aabedcb55c075cb2603052900a5badf01bae 100644 --- a/src/app/map/components/map.component.scss +++ b/src/app/map/components/map.component.scss @@ -89,17 +89,6 @@ @include lato-bold-14; font-size: 16px; } - - .orientationButton { - display: flex; - padding: 10px 20px; - border-radius: 20px; - margin: 0 4px; - color: $black; - background-color: $white; - border: solid 1px $grey-3; - min-width: 120px; - } } span { margin-right: 4px; diff --git a/src/app/map/components/map.component.ts b/src/app/map/components/map.component.ts index 58a2c3108a36b713b9babaa166d8e2ba47efcf7d..7cfd44066fa116d2cd761ad6e49340a5d7a7dded 100644 --- a/src/app/map/components/map.component.ts +++ b/src/app/map/components/map.component.ts @@ -16,6 +16,7 @@ import { ZoomLevel } from './zoomLevel.enum'; }) export class MapComponent implements OnChanges { @Input() public isOrientationForm = false; + @Input() public isOrientationRdv = false; @Input() public structures: Structure[] = []; @Input() public structuresToPrint: Structure[] = []; @Input() public togglePopupId: string; diff --git a/src/app/models/owner.model.ts b/src/app/models/owner.model.ts index c26356932dec46df5409d660d368dd4be9810979..89c4226c11f77f48a3603a30be24301660dbaad5 100644 --- a/src/app/models/owner.model.ts +++ b/src/app/models/owner.model.ts @@ -1,5 +1,6 @@ import { Employer } from './employer.model'; import { Job } from './job.model'; +import { PersonalOffer } from './personalOffer.model'; export class Owner { email: string; @@ -8,4 +9,6 @@ export class Owner { surname: string; job?: Job; employer?: Employer; + withAppointment?: boolean; + personalOffers: PersonalOffer[]; } diff --git a/src/app/models/structure.model.ts b/src/app/models/structure.model.ts index ba4ed7504aa129e18934bf056c0d39f00f23eea3..1e4cd5c613a648487c0b1ca6338e07c1bc219fd8 100644 --- a/src/app/models/structure.model.ts +++ b/src/app/models/structure.model.ts @@ -60,8 +60,8 @@ export class Structure { public personalOffers: PersonalOffer[] = []; public alreadySelected? = false; - public isClaimed?: boolean = null; - public idCNFS?: string; + public hasNoUserDN?: boolean = null; + public hasUserWithAppointmentDN?: boolean = null; constructor(obj?: any) { Object.assign(this, obj, { @@ -78,6 +78,7 @@ export class Structure { genre: obj?.categories?.genre || [], selfServiceMaterial: obj?.categories?.selfServiceMaterial || [], solidarityMaterial: obj?.categories?.solidarityMaterial || [], + ctm: obj?.categories?.ctm || [], }, }); } diff --git a/src/app/models/subscription-model.ts b/src/app/models/subscription.model.ts similarity index 100% rename from src/app/models/subscription-model.ts rename to src/app/models/subscription.model.ts diff --git a/src/app/models/user.model.ts b/src/app/models/user.model.ts index d1a07e3f8409947bc8926bd74798c93dd53c5b6b..b4b1cd129be1e4014cc26232c684e5c29d8d52dc 100644 --- a/src/app/models/user.model.ts +++ b/src/app/models/user.model.ts @@ -20,6 +20,7 @@ export class User { job: Job; employer: Employer; description?: string; + withAppointment?: boolean; constructor(obj?: any) { Object.assign(this, obj); this.surname = this.surname.toUpperCase(); diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.ts b/src/app/newsletter-subscription/newsletter-subscription.component.ts index 3a2b4c5667b28543cca0cca6a129dc77e4e07537..b8b38399d70409d0a8049fc9675a804f18a525c1 100644 --- a/src/app/newsletter-subscription/newsletter-subscription.component.ts +++ b/src/app/newsletter-subscription/newsletter-subscription.component.ts @@ -50,7 +50,7 @@ export class NewsletterSubscriptionComponent implements OnInit { } this.loading = true; if (this.subscriptionMod) { - await lastValueFrom(this.newsletterService.newsletterSubscribe(this.f.email.value)) + await lastValueFrom(this.newsletterService.subscribe(this.f.email.value)) .then(() => { this.notificationService.showSuccess(`L'email ${this.f.email.value} a bien été ajouté à la newsletter`); this.router.navigate(['']); @@ -70,7 +70,7 @@ export class NewsletterSubscriptionComponent implements OnInit { }); } if (!this.subscriptionMod) { - await lastValueFrom(this.newsletterService.newsletterUnsubscribe(this.f.email.value)) + await lastValueFrom(this.newsletterService.unsubscribe(this.f.email.value)) .then(() => { this.notificationService.showSuccess(`L'email ${this.f.email.value} a bien été retiré de la newsletter`); this.router.navigate(['']); diff --git a/src/app/profile/edit/edit.component.html b/src/app/profile/edit/edit.component.html index 154bf772d36e4737916abae3bf87ff98165d3a17..aefb46b00b5b93d0d1ec536e8e72bd10a17508c8 100644 --- a/src/app/profile/edit/edit.component.html +++ b/src/app/profile/edit/edit.component.html @@ -171,7 +171,21 @@ /> </div> </div> + <app-appointment-choice + *ngIf="hasPersonalOffer" + [selectedRdvChoice]="selectedRdvChoice === undefined ? null : selectedRdvChoice" + (rdvChoice)="onRdvRadioChange($event)" + (validateForm)="isPageValid()" + ></app-appointment-choice> </div> + <app-custom-modal + customValidationButton="OK" + [opened]="showConfirmationModal" + [content]=" + 'Veuillez indiquer si vous souhaitez proposer la fonctionnalité \'être rappelé\' dans l\'onglet \'Employeur et fonction\'.' + " + (closed)="closeExitModal()" + /> <div *ngIf="currentTab === tabsEnum.description" class="descriptionTab"> <p class="subTitle">Description</p> diff --git a/src/app/profile/edit/edit.component.scss b/src/app/profile/edit/edit.component.scss index 19ad102f2f0d476dc09dbba47d10ff3d18c4bcca..223f0844fb9a6f11368896ebe74b9ec65159586d 100644 --- a/src/app/profile/edit/edit.component.scss +++ b/src/app/profile/edit/edit.component.scss @@ -95,7 +95,7 @@ } .content { - padding-top: 24px; + padding: 24px 0; flex: 1; max-width: 600px; p.subTitle { @@ -126,6 +126,9 @@ .credentialsTab ::ng-deep .secondary .text { place-content: center center !important; } + .btn-grid { + margin-bottom: 1em; + } .descriptionTab { p.descriptionLength { diff --git a/src/app/profile/edit/edit.component.ts b/src/app/profile/edit/edit.component.ts index 3e7790eedaf60b4ff5783c3d2309a6a9682f4ebb..7a15626dd5ed895acc9a683617219df364dd9647 100644 --- a/src/app/profile/edit/edit.component.ts +++ b/src/app/profile/edit/edit.component.ts @@ -56,9 +56,15 @@ export class EditComponent implements OnInit { private selectedJob: Job; public employers: Employer[]; private selectedEmployer: Employer; + public selectedRdvChoice: boolean; public isAlreadySearching = false; public isNewUser = false; public isNewEmployer: boolean; + public hasPersonalOffer: boolean = false; + + // Modal canExit var + public showConfirmationModal = false; + @ViewChild('searchEmployer') searchEmployer: ElementRef; @ViewChild('newJobInput') newJobInput: ElementRef; @@ -76,9 +82,11 @@ export class EditComponent implements OnInit { } this.profileService.getProfile().then((profile) => { + if (profile.hasOwnProperty('withAppointment')) this.selectedRdvChoice = profile.withAppointment; this.userProfile = new User(profile); this.initialUserProfile = new User({ ...profile }); this.selectedEmployer = { ...profile.employer }; + this.hasPersonalOffer = profile.job?.hasPersonalOffer; if (!profile.employer || !profile.job) { this.isNewUser = true; } @@ -173,7 +181,8 @@ export class EditComponent implements OnInit { return true; } else if ( this.selectedEmployer?.name !== this.userProfile.employer?.name || - this.selectedJob?.name !== this.userProfile.job?.name + (this.selectedJob?.name !== this.userProfile.job?.name && !this.hasPersonalOffer) || + (this.hasPersonalOffer && this.selectedRdvChoice !== null) ) { return true; } @@ -235,15 +244,21 @@ export class EditComponent implements OnInit { }); } - this.profileService.updateProfile(this.selectedEmployer.name, this.selectedJob.name).subscribe({ - next: () => { - this.router.navigate(['/profile']); - this.notificationService.showSuccess('Vos informations ont bien été enregistrées'); - }, - error: () => { - this.notificationService.showError("Vos informations n'ont pas été enregistrées", 'Une erreur est survenue'); - }, - }); + this.profileService + .updateProfile(this.selectedEmployer.name, this.selectedJob.name, this.selectedRdvChoice) + .subscribe({ + next: () => { + this.router.navigate(['/profile']); + this.notificationService.showSuccess('Vos informations ont bien été enregistrées'); + }, + error: () => { + this.notificationService.showError("Vos informations n'ont pas été enregistrées", 'Une erreur est survenue'); + }, + }); + } + + public onRdvRadioChange(value: boolean): void { + this.selectedRdvChoice = value; } public confirmDescription(): void { @@ -311,8 +326,10 @@ export class EditComponent implements OnInit { public selectJob(job: Job): void { this.selectedJob = job; this.newJob = null; + this.hasPersonalOffer = job.hasPersonalOffer; } public isSelectedJob(job: Job): boolean { + if (this.selectedJob?.name === job.name) this.hasPersonalOffer = job.hasPersonalOffer; return this.selectedJob && this.selectedJob.name === job.name; } public isUnexistingJob(): boolean { @@ -352,4 +369,18 @@ export class EditComponent implements OnInit { }); } } + + public canExit(): Promise<boolean> { + if (this.hasPersonalOffer && this.selectedRdvChoice == undefined) { + return new Promise((resolve) => this.showModal(resolve)); + } + } + + private showModal(resolve: Function): void { + this.showConfirmationModal = true; + } + + public closeExitModal(): void { + this.showConfirmationModal = false; + } } diff --git a/src/app/profile/profile-newsletter/profile-newsletter.component.html b/src/app/profile/profile-newsletter/profile-newsletter.component.html new file mode 100644 index 0000000000000000000000000000000000000000..81011d3fc6b5afdca246f28a4790e186f6e4980b --- /dev/null +++ b/src/app/profile/profile-newsletter/profile-newsletter.component.html @@ -0,0 +1,18 @@ +<div *ngIf="isSubscribed"> + <p>Vous êtes abonné·e à la newsletter Rés'in.</p> + <app-button + [text]="'Me désabonner de la newsletter'" + [style]="buttonTypeEnum.Secondary" + [disabled]="isLoading" + (click)="handleUnsubscribe()" + /> +</div> +<div *ngIf="!isSubscribed"> + <p>Vous n’êtes pas encore abonné·e à la newsletter Rés'in.</p> + <app-button + [text]="'M\'abonner à la newsletter'" + [style]="buttonTypeEnum.Primary" + [disabled]="isLoading" + (click)="handleSubscribe()" + /> +</div> diff --git a/src/app/profile/profile-newsletter/profile-newsletter.component.ts b/src/app/profile/profile-newsletter/profile-newsletter.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..4594eddb6b42a300febba6b35a1413cd2502a26b --- /dev/null +++ b/src/app/profile/profile-newsletter/profile-newsletter.component.ts @@ -0,0 +1,72 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { NewsletterService } from '../../services/newsletter.service'; +import { NotificationService } from '../../services/notification.service'; +import { ButtonType } from '../../shared/components/button/buttonType.enum'; + +@Component({ + selector: 'app-profile-newsletter', + templateUrl: './profile-newsletter.component.html', +}) +export class ProfileNewsletterComponent implements OnInit { + @Input() public userEmail: string; + public buttonTypeEnum = ButtonType; + public isSubscribed = false; + public isLoading = true; + + constructor(private newsletterService: NewsletterService, private notificationService: NotificationService) {} + + ngOnInit(): void { + this.newsletterService.find(this.userEmail).subscribe({ + next: (result) => { + this.isSubscribed = result !== null; + this.isLoading = false; + }, + }); + } + + public handleSubscribe() { + this.isLoading = true; + this.newsletterService.subscribe(this.userEmail).subscribe({ + next: (result) => { + this.notificationService.showSuccess(`L'email ${result.email} a bien été ajouté à la newsletter`); + this.isSubscribed = true; + this.isLoading = false; + }, + error: (error) => { + if (error.status === 418) { + this.notificationService.showError( + "Merci de vérifier l'email que vous souhaitez inscrire", + `L'email ${this.userEmail} semble factice ou invalide` + ); + } else { + this.notificationService.showErrorPleaseRetry(`L'email ${this.userEmail} n'a pu être ajouté à la newsletter`); + } + this.isLoading = false; + }, + }); + } + + public handleUnsubscribe() { + this.isLoading = true; + this.newsletterService.unsubscribe(this.userEmail).subscribe({ + next: (result) => { + this.notificationService.showSuccess(`L'email ${result.email} a bien été retiré à la newsletter`); + this.isSubscribed = false; + this.isLoading = false; + }, + error: (error) => { + if (error.status === 404) { + this.notificationService.showError( + "Merci de vérifier l'email que vous souhaitez désinscrire", + `L'email ${this.userEmail} n'est pas inscrit à la newsletter` + ); + } else { + this.notificationService.showErrorPleaseRetry( + `L'email ${this.userEmail} n'a pu être retiré de la newsletter` + ); + } + this.isLoading = false; + }, + }); + } +} diff --git a/src/app/profile/profile-routing.module.ts b/src/app/profile/profile-routing.module.ts index 0037e27099652abd7ac84d978db616ac0e5b1a67..ecd292897d495d247e816a8826e9f0a09bcd120e 100644 --- a/src/app/profile/profile-routing.module.ts +++ b/src/app/profile/profile-routing.module.ts @@ -2,6 +2,7 @@ import { NgModule } from '@angular/core'; import { Route, RouterModule, Routes } from '@angular/router'; import { FooterComponent } from '../footer/footer.component'; import { AuthGuard } from '../guards/auth.guard'; +import { DeactivateGuard } from '../guards/deactivate.guard'; import { IsPersonalOfferOwnerGuard } from '../guards/isPersonalOfferOwner.guard'; import { RoleGuard } from '../guards/role.guard'; import { PersonalOfferResolver } from '../resolvers/personal-offer.resolver'; @@ -24,6 +25,7 @@ const routes: Routes = [ { path: 'edit', canActivate: [AuthGuard], + canDeactivate: [DeactivateGuard], component: EditComponent, }, { diff --git a/src/app/profile/profile-structure/profile-structure.component.html b/src/app/profile/profile-structure/profile-structure.component.html index 82acb144439cb89eaff2001fd11545d564276946..8a0ed24d17a9e795d3ebde6b62b75371984efe3e 100644 --- a/src/app/profile/profile-structure/profile-structure.component.html +++ b/src/app/profile/profile-structure/profile-structure.component.html @@ -108,9 +108,9 @@ [isPublic]="isPublic" > </app-personal-offer> - <div *ngIf="members.length > 0" class="section"> + <div *ngIf="membersWithJobWithPO.length > 0" class="section"> <div class="sectionHeader"> - <p class="sectionTitle">membres</p> + <p class="sectionTitle">Accompagnant·es numériques</p> <app-button *ngIf="!isPublic && !isPending" class="hide-on-mobile" @@ -130,7 +130,7 @@ /> </div> <div class="sectionContent members"> - <app-profile-structure-member *ngFor="let member of members; let i = index" [member]="member" /> + <app-profile-structure-member *ngFor="let member of membersWithJobWithPO; let i = index" [member]="member" /> </div> </div> <div diff --git a/src/app/profile/profile-structure/profile-structure.component.scss b/src/app/profile/profile-structure/profile-structure.component.scss index 0b23a41c4ef7008728f0770cb39a3c93a820d171..7399e19ad33f6c06ecae874a0adca16c90f86d59 100644 --- a/src/app/profile/profile-structure/profile-structure.component.scss +++ b/src/app/profile/profile-structure/profile-structure.component.scss @@ -82,6 +82,7 @@ display: flex; justify-content: space-between; align-items: center; + min-height: 2.25em; .sectionTitle { text-transform: uppercase; diff --git a/src/app/profile/profile-structure/profile-structure.component.ts b/src/app/profile/profile-structure/profile-structure.component.ts index 89c924064a239b0295ec65f52d2a09c6d4adae5a..f79f395a453d33c7b1b78e1ac14736dfc89d5cdf 100644 --- a/src/app/profile/profile-structure/profile-structure.component.ts +++ b/src/app/profile/profile-structure/profile-structure.component.ts @@ -6,7 +6,6 @@ import { DateTime } from 'luxon'; import { structureFormStep } from '../../form/form-view/structure-form/structureFormStep.enum'; import { Structure } from '../../models/structure.model'; import { StructureWithOwners } from '../../models/structureWithOwners.model'; -import { StructureService } from '../../services/structure.service'; import { ButtonType } from '../../shared/components/button/buttonType.enum'; import { SearchService } from '../../structure-list/services/search.service'; import { formUtils } from '../../utils/formUtils'; @@ -37,7 +36,7 @@ export class ProfileStructureComponent implements OnInit { @Input() public joinRequestDate: string | null; @Output() cancelJoin = new EventEmitter<any>(); - public members: User[] = []; + public membersWithJobWithPO: User[] = []; public structureForm: FormGroup; public buttonTypeEnum = ButtonType; public showDetails: boolean = false; @@ -49,7 +48,6 @@ export class ProfileStructureComponent implements OnInit { private router: Router, private userService: UserService, private searchService: SearchService, - private structureService: StructureService, public utils: Utils ) {} @@ -57,7 +55,7 @@ export class ProfileStructureComponent implements OnInit { this.structureForm = new formUtils().createStructureForm(this.structureWithOwners.structure, true); this.structureWithOwners.owners.forEach((owner) => { this.userService.getUser(owner._id).subscribe((user) => { - this.members.push(user); + if (user.job?.hasPersonalOffer) this.membersWithJobWithPO.push(user); }); }); this.structure = new Structure(this.structureWithOwners.structure); diff --git a/src/app/profile/profile.component.html b/src/app/profile/profile.component.html index d0bd78298863ca3ca835e070fbe8d9fe2ca53083..b8b4e41e19497d81ce124fd10f4d32335ebeac7a 100644 --- a/src/app/profile/profile.component.html +++ b/src/app/profile/profile.component.html @@ -12,6 +12,17 @@ (keyup.enter)="goBack()" /> <h1>Profil</h1> + <app-button + *ngIf="isPublic && userProfile.withAppointment" + class="hide-on-mobile rdv" + tabindex="none" + [routerLink]="['/orientation']" + [state]="{ rdvUser: userProfile }" + [iconBtn]="'rdv'" + [text]="'Prendre rendez-vous'" + [style]="buttonTypeEnum.SecondaryWide" + [routerLinkActive]="'active'" + /> <app-button *ngIf="!isPublic" class="hide-on-mobile" @@ -133,15 +144,17 @@ </div> </section> - <!-- Features not implemented yet --> - <!-- <section *ngIf="!isPublic"> + <section *ngIf="!isPublic"> <div class="header"> - <h1>Ressources</h1> + <h1>Newsletter</h1> </div> + <app-profile-newsletter [userEmail]="this.userProfile.email" /> </section> - <section *ngIf="!isPublic"> + + <!-- Features not implemented yet --> + <!-- <section *ngIf="!isPublic"> <div class="header"> - <h1>Newsletter</h1> + <h1>Ressources</h1> </div> </section> --> </div> diff --git a/src/app/profile/profile.component.scss b/src/app/profile/profile.component.scss index 1ba97cd1212e2b6c19d1fda3a4220c75c00df310..ac86e1701cb92f66ba3b8c1d212c777f171e553b 100644 --- a/src/app/profile/profile.component.scss +++ b/src/app/profile/profile.component.scss @@ -104,3 +104,7 @@ section { .addStructure { margin: auto; } + +::ng-deep .rdv svg { + top: 0.3em; +} diff --git a/src/app/profile/profile.module.ts b/src/app/profile/profile.module.ts index 52be3a2ed3b1c4a1c2037378fc31017c06e61df1..09caf05d99205fbd10f80c3e9f5a619759472fd6 100644 --- a/src/app/profile/profile.module.ts +++ b/src/app/profile/profile.module.ts @@ -14,6 +14,7 @@ import { NoInformationComponent } from './structure-edition-summary/no-informati import { StructureEditionSummaryComponent } from './structure-edition-summary/structure-edition-summary.component'; import { StructureMembersManagementComponent } from './structure-members-management/structure-members-management.component'; import { StructuresManagementComponent } from './structures-management/structures-management.component'; +import { ProfileNewsletterComponent } from './profile-newsletter/profile-newsletter.component'; @NgModule({ declarations: [ @@ -29,6 +30,7 @@ import { StructuresManagementComponent } from './structures-management/structure StructuresManagementComponent, PersonalOfferComponent, PersonalOfferEditionComponent, + ProfileNewsletterComponent, ], imports: [CommonModule, ProfileRoutingModule, SharedModule], }) diff --git a/src/app/profile/services/profile.service.ts b/src/app/profile/services/profile.service.ts index a7dea50d123e3f25546a12adb475e6b03e2e1335..9ef8564810d6741d7c1955a38506eb0e59f9d53f 100644 --- a/src/app/profile/services/profile.service.ts +++ b/src/app/profile/services/profile.service.ts @@ -102,8 +102,8 @@ export class ProfileService { return this.http.post<Employer>(`api/employer`, value); } - public updateProfile(employerName: string, jobName: string): Observable<User> { - return this.http.post<User>(`${this.baseUrl}/profile`, { employerName, jobName }); + public updateProfile(employerName: string, jobName: string, withAppointment?: boolean): Observable<User> { + return this.http.post<User>(`${this.baseUrl}/profile`, { employerName, jobName, withAppointment }); } public updateDetails(newDetails: { name: string; surname: string; phone: string }): Observable<User | Error> { diff --git a/src/app/profile/structure-edition-summary/structure-edition-summary.component.html b/src/app/profile/structure-edition-summary/structure-edition-summary.component.html index a40d195115d33be33ae45d851c6bf5b01bf483d0..5b6997023bb9f0b20e10b90f5f6af96d3b62d4ae 100644 --- a/src/app/profile/structure-edition-summary/structure-edition-summary.component.html +++ b/src/app/profile/structure-edition-summary/structure-edition-summary.component.html @@ -62,7 +62,10 @@ /> </div> <div class="content"> - <p>{{ structure.structureType?.category }} - {{ structure.getLabelTypeStructure() }}</p> + <app-missing-information *ngIf="!isFieldValid('structureType')" /> + <p *ngIf="isFieldValid('structureType')"> + {{ structure.structureType?.category }} - {{ structure.getLabelTypeStructure() }} + </p> </div> </div> @@ -84,7 +87,7 @@ /> </div> <div class="content"> - <app-missing-information *ngIf="!isFieldValid('contactPhone') && !isFieldValid('contactMail')" /> + <app-missing-information *ngIf="requiredPhoneOrMailError()" /> <p *ngIf="isFieldValid('contactPhone')"> {{ structure.contactPhone }} </p> diff --git a/src/app/profile/structure-edition-summary/structure-edition-summary.component.ts b/src/app/profile/structure-edition-summary/structure-edition-summary.component.ts index 695642504bb08940ee6e2ca15929a07df7a58f2e..d0ab70c027fb40e59bd615e0419b80384e85aadd 100644 --- a/src/app/profile/structure-edition-summary/structure-edition-summary.component.ts +++ b/src/app/profile/structure-edition-summary/structure-edition-summary.component.ts @@ -126,6 +126,10 @@ export class StructureEditionSummaryComponent implements OnInit { return this.structureForm.get([field]).valid; } + public requiredPhoneOrMailError(): boolean { + return this.structureForm.hasError('requirePhoneOrMail'); + } + public hasSocialNetworks(): boolean { return this.utils.hasSocialNetwork(this.structure); } diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index 924bdb3cdb47bcd3e555a96c194571ed7d1a4731..ccde5794d142cbcc5454374ed24c93a63da04f35 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -68,16 +68,14 @@ export class AuthService { } public login(email: string, password: string): Observable<any> { - return this.http - .post<UserAuth>('api/auth/login', { email, password }) - .pipe( - map((user) => { - // store user details and jwt token in local storage to keep user logged in between page refreshes - localStorage.setItem('user', JSON.stringify(user)); - this.userSubject.next(user); - return user; - }) - ); + return this.http.post<UserAuth>('api/auth/login', { email, password }).pipe( + map((user) => { + // store user details and jwt token in local storage to keep user logged in between page refreshes + localStorage.setItem('user', JSON.stringify(user)); + this.userSubject.next(user); + return user; + }) + ); } public verifyUser(userId: string, token: string): Observable<any> { diff --git a/src/app/services/indicator.service.ts b/src/app/services/indicator.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..40bd90d6694733eb670521c5ed493b44dd439096 --- /dev/null +++ b/src/app/services/indicator.service.ts @@ -0,0 +1,18 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { IOrientationIndicator } from '../form/orientation-form-view/interfaces/orientationIndicator.interface'; + +@Injectable({ + providedIn: 'root', +}) +export class IndicatorService { + constructor(private http: HttpClient) {} + + /** + * Send orientation indicator to server + */ + public createOrientationIndicator(newOrientationIndicator: IOrientationIndicator): Observable<IOrientationIndicator> { + return this.http.post<IOrientationIndicator>('/api/indicator/orientation', newOrientationIndicator); + } +} diff --git a/src/app/services/newsletter.service.ts b/src/app/services/newsletter.service.ts index f4a0131ffa43bab37adbf373c5e0082535386439..4635c10d871562b4d920512bb3f33daec575da3c 100644 --- a/src/app/services/newsletter.service.ts +++ b/src/app/services/newsletter.service.ts @@ -1,6 +1,7 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; +import { NewsletterSubscription } from '../models/subscription.model'; @Injectable({ providedIn: 'root', @@ -8,11 +9,15 @@ import { Observable } from 'rxjs'; export class NewsletterService { constructor(private http: HttpClient) {} - public newsletterSubscribe(email: string): Observable<any> { - return this.http.post('/api/newsletter/subscribe', {email}); + public subscribe(email: string): Observable<NewsletterSubscription> { + return this.http.post<NewsletterSubscription>('/api/newsletter/subscribe', { email }); } - public newsletterUnsubscribe(email: string): Observable<any> { - return this.http.post('/api/newsletter/unsubscribe', {email}); + public unsubscribe(email: string): Observable<NewsletterSubscription> { + return this.http.post<NewsletterSubscription>('/api/newsletter/unsubscribe', { email }); + } + + public find(email: string): Observable<NewsletterSubscription> { + return this.http.get<NewsletterSubscription>(`/api/newsletter?email=${email}`); } } diff --git a/src/app/services/online-mediation.service.spec.ts b/src/app/services/online-mediation.service.spec.ts deleted file mode 100644 index 6cae33a636ee30b9811a151c3bd1bf441676d0bc..0000000000000000000000000000000000000000 --- a/src/app/services/online-mediation.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { OnlineMediationService } from './online-mediation.service'; - -describe('OnlineMediationService', () => { - let service: OnlineMediationService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(OnlineMediationService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/src/app/services/online-mediation.service.ts b/src/app/services/online-mediation.service.ts deleted file mode 100644 index 4e542a5046f87d000eafbd3472aa7e77784f4db3..0000000000000000000000000000000000000000 --- a/src/app/services/online-mediation.service.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; -import { IOnlineMediation } from '../form/orientation-form-view/interfaces/onlineMediation.interface'; - -@Injectable({ - providedIn: 'root', -}) -export class OnlineMediationService { - constructor(private http: HttpClient) {} - - /** - * Retrive all tcl stop point around given coord - */ - public createOnlineMediation(newMediation: IOnlineMediation): Observable<IOnlineMediation> { - return this.http.post<IOnlineMediation>('/api/online-mediation', newMediation); - } -} diff --git a/src/app/services/rdvs.service.spec.ts b/src/app/services/orientation.service.spec.ts similarity index 51% rename from src/app/services/rdvs.service.spec.ts rename to src/app/services/orientation.service.spec.ts index d524bab9207bebe53ab875738caeafdefae3218e..3288082bab79baeef6899fc1150da0655838f6d8 100644 --- a/src/app/services/rdvs.service.spec.ts +++ b/src/app/services/orientation.service.spec.ts @@ -1,13 +1,13 @@ import { TestBed } from '@angular/core/testing'; -import { RdvsService } from './rdvs.service'; +import { OrientationService } from './orientation.service'; -describe('RdvsService', () => { - let service: RdvsService; +describe('OrientationService', () => { + let service: OrientationService; beforeEach(() => { TestBed.configureTestingModule({}); - service = TestBed.inject(RdvsService); + service = TestBed.inject(OrientationService); }); it('should be created', () => { diff --git a/src/app/services/orientation.service.ts b/src/app/services/orientation.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..aedbef8a92882dc1d52012de29161d2c7023a889 --- /dev/null +++ b/src/app/services/orientation.service.ts @@ -0,0 +1,34 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { IAppointment } from '../form/orientation-form-view/interfaces/appointment.interface'; +import { IOnlineMediation } from '../form/orientation-form-view/interfaces/onlineMediation.interface'; +import { Structure } from '../models/structure.model'; +import { User } from '../models/user.model'; + +@Injectable({ + providedIn: 'root', +}) +export class OrientationService { + constructor(private http: HttpClient) {} + + // User for rdv from annuaire + public rdvUser: User; + + // Structure for rdv from structure-details + public rdvStructure: Structure; + + /** + * Send appointment to server + */ + public createAppointment(newAppointment: IAppointment): Observable<IAppointment> { + return this.http.post<IAppointment>('/api/appointment', newAppointment); + } + + /** + * Send online mediation to server + */ + public createOnlineMediation(newMediation: IOnlineMediation): Observable<IOnlineMediation> { + return this.http.post<IOnlineMediation>('/api/online-mediation', newMediation); + } +} diff --git a/src/app/services/rdvs.service.ts b/src/app/services/rdvs.service.ts deleted file mode 100644 index 6cb428ff1e819887e72e8eb191fbc76ac2997396..0000000000000000000000000000000000000000 --- a/src/app/services/rdvs.service.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { Structure } from '../models/structure.model'; - -@Injectable({ - providedIn: 'root', -}) -export class RdvsService { - private readonly rdvsBaseUrl = 'https://www.rdv-aide-numerique.fr/resin'; - constructor(private http: HttpClient) {} - - public sendStructureArray(structureArray: Structure[]): void { - const idsArray = structureArray.map((_structure) => _structure.idCNFS); - const url = `${this.rdvsBaseUrl}/${idsArray.join(',')}`; - window.open(url, '_blank'); - } - - public goToRDVS(idCnfs) { - const url = this.rdvsBaseUrl + '/' + idCnfs; - window.open(url, '_blank'); - } -} diff --git a/src/app/services/structure.service.ts b/src/app/services/structure.service.ts index 6555db827e67d456a3da86a31cbfef2c8ed9e648..55df4380277a10b10ac787e1639621ac7c845a26 100644 --- a/src/app/services/structure.service.ts +++ b/src/app/services/structure.service.ts @@ -38,10 +38,6 @@ export class StructureService { .pipe(map((item: Structure) => new Structure(item))); } - public isClaimed(id: string, profile: User): Observable<boolean> { - return this.http.post<boolean>(`${this.baseUrl}/${id}/isClaimed`, profile); - } - public claimStructureWithAccount(id: string, email: string): Observable<string[]> { return this.http.post<any>(`${this.baseUrl}/${id}/claim`, { email }); } @@ -73,8 +69,9 @@ export class StructureService { } public getStructures(filters: Filter[], searchUrl: string = 'search', limit?: number): Observable<Structure[]> { + let requestUrl = `${this.baseUrl}/${searchUrl}`; + let requestFilters = null; if (filters && filters.length > 0) { - let requestUrl = `${this.baseUrl}/${searchUrl}`; const queryString = _.find(filters, { name: 'query' }); if (queryString) { _.remove(filters, { name: 'query' }); @@ -86,12 +83,11 @@ export class StructureService { const andFormatedFilters = this.formatFilters(filters.filter((e) => !e.orOperator)); const orFormatedFilters = this.formatFilters(filters.filter((e) => e.orOperator)); - return this.http - .post(requestUrl, { filters: [andFormatedFilters, orFormatedFilters], limit: limit }) - .pipe(map((data: any[]) => data.map((item) => new Structure(item)))); - } else { - return this.http.get(`${this.baseUrl}`).pipe(map((data: any[]) => data.map((item) => new Structure(item)))); + requestFilters = { filters: [andFormatedFilters, orFormatedFilters], limit: limit }; } + return this.http + .post(requestUrl, requestFilters) + .pipe(map((data: any[]) => data.map((item) => new Structure(item)))); } private formatFilters(filters: Filter[]): object { diff --git a/src/app/shared/components/appointment-choice/appointment-choice.component.html b/src/app/shared/components/appointment-choice/appointment-choice.component.html new file mode 100644 index 0000000000000000000000000000000000000000..0c83bc27d984a5f35f7c5190376b7e4ade277018 --- /dev/null +++ b/src/app/shared/components/appointment-choice/appointment-choice.component.html @@ -0,0 +1,9 @@ +<div> + <p class="subtitle">Souhaitez-vous proposer la fonctionnalité "être rappelé" ?</p> + <p class="details"> + Si vous l'activez, les professionnels (travailleurs sociaux, conseillers emploi...) pourront vous transmettre les + coordonnées d'une personne en situation de fragilité numérique afin de convenir d'un rendez-vous. + </p> + <app-radio-form [selectedOption]="selectedRdvChoice" [horizontal]="true" (selectedEvent)="onRdvRadioChange($event)"> + </app-radio-form> +</div> diff --git a/src/app/shared/components/appointment-choice/appointment-choice.component.scss b/src/app/shared/components/appointment-choice/appointment-choice.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..7d4777cd2f9618e79590eecd12191994e98d1e1a --- /dev/null +++ b/src/app/shared/components/appointment-choice/appointment-choice.component.scss @@ -0,0 +1,10 @@ +@import 'typography'; +@import 'color'; + +.subtitle { + @include lato-regular-18; + font-weight: 500; +} +.details { + color: $grey-3; +} diff --git a/src/app/shared/components/appointment-choice/appointment-choice.component.ts b/src/app/shared/components/appointment-choice/appointment-choice.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..632061ab517961ea382cf7eac75cb25819652b41 --- /dev/null +++ b/src/app/shared/components/appointment-choice/appointment-choice.component.ts @@ -0,0 +1,19 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { Job } from '../../../models/job.model'; + +@Component({ + selector: 'app-appointment-choice', + templateUrl: './appointment-choice.component.html', + styleUrls: ['./appointment-choice.component.scss'], +}) +export class AppointmentChoiceComponent { + @Input() selectedRdvChoice: boolean; + @Output() validateForm = new EventEmitter<Job>(); + @Output() rdvChoice = new EventEmitter<boolean>(); + + public onRdvRadioChange(value: boolean): void { + this.selectedRdvChoice = value; + this.rdvChoice.emit(this.selectedRdvChoice); + this.validateForm.emit(); + } +} diff --git a/src/app/shared/components/button/button.component.html b/src/app/shared/components/button/button.component.html index 1856dafa975a57f22cc9593d2308e4b845525e9c..c0ea8b8c5b6298aecf1c51b8f41dbb3e05829df2 100644 --- a/src/app/shared/components/button/button.component.html +++ b/src/app/shared/components/button/button.component.html @@ -311,21 +311,6 @@ </button> </ng-container> -<ng-container *ngIf="style === buttonTypeEnum.RdvsButton"> - <button class="btn-rdvs" type="{{ type }}" [disabled]="disabled" [ngClass]="extraClass" (click)="doAction()"> - <div *ngIf="!iconBtn" class="text" [ngClass]="variant">{{ text }}</div> - <div - *ngIf="iconBtn && iconPos === 'left'" - fxLayout="row center" - class="text withIcon left" - fxLayoutAlign="space-around center" - [ngClass]="variant" - > - <app-svg-icon [type]="iconType" [icon]="iconBtn" [iconColor]="'currentColor'" /> - <span [ngClass]="extraClass">{{ text }}</span> - </div> - </button> -</ng-container> <ng-container *ngIf="style === buttonTypeEnum.TagCloudResetButton"> <button type="button" class="flex row btn-tags-cloud reset" (click)="doAction()"> <span>Supprimer les filtres</span> diff --git a/src/app/shared/components/button/button.component.scss b/src/app/shared/components/button/button.component.scss index fcfdc6592e5f03e3b53ff46b328e16d53ae85c82..056791fe3c4ad216f9956928b1cc0c3b98a0190c 100644 --- a/src/app/shared/components/button/button.component.scss +++ b/src/app/shared/components/button/button.component.scss @@ -317,17 +317,3 @@ button:disabled { opacity: 0.4; cursor: not-allowed; } -.btn-rdvs { - background: $blueRdvs; - width: 140px; - - height: 36px; - span { - color: white; - } - ::ng-deep svg { - stroke: none !important; - top: 3px; - left: 3px; - } -} diff --git a/src/app/shared/components/button/buttonType.enum.ts b/src/app/shared/components/button/buttonType.enum.ts index 4e7b5ac5d384aeb09a3a9859399a905a813208b8..1026afb543e00f80eece3d332874cbd9ebd47de6 100644 --- a/src/app/shared/components/button/buttonType.enum.ts +++ b/src/app/shared/components/button/buttonType.enum.ts @@ -15,6 +15,5 @@ export enum ButtonType { modalPrimary, modalSecondary, TagCloudButton, - RdvsButton, TagCloudResetButton, } diff --git a/src/app/shared/components/index.ts b/src/app/shared/components/index.ts index 83d568ae7ad1d7f7aa7d1613d8cd3fd3279c0ea8..f2037d7b5546f62537895fde7bbc327ced5bc499 100644 --- a/src/app/shared/components/index.ts +++ b/src/app/shared/components/index.ts @@ -3,6 +3,7 @@ import { ProgressBarComponent } from '../../form/form-view/global-components/pro import { StructurePublicTargetComponent } from '../../form/form-view/structure-form/structure-public-target/structure-public-target.component'; import { AccompanimentPickerComponent } from './accompaniment-picker/accompaniment-picker.component'; import { AddressAutocompleteComponent } from './address-autocomplete/address-autocomplete.component'; +import { AppointmentChoiceComponent } from './appointment-choice/appointment-choice.component'; import { ButtonComponent } from './button/button.component'; import { CheckboxFormComponent } from './checkbox-form/checkbox-form.component'; import { CustomModalComponent } from './custom-modal/custom-modal.component'; @@ -23,25 +24,26 @@ import { TrainingTypePickerComponent } from './training-type-picker/training-typ // tslint:disable-next-line: max-line-length export { AccompanimentPickerComponent, - LogoCardComponent, - SvgIconComponent, - ButtonComponent, AddressAutocompleteComponent, - StructureTypePickerComponent, + AppointmentChoiceComponent, + ButtonComponent, CheckboxFormComponent, + CustomModalComponent, HourPickerComponent, - RadioFormComponent, + InformationStepComponent, + LogoCardComponent, ModalConfirmationComponent, - CustomModalComponent, - TextInputModalComponent, PasswordFormComponent, - TrainingTypePickerComponent, - InformationStepComponent, - StructurePmrComponent, - StructureListPrintComponent, - StructureDetailPrintComponent, ProgressBarComponent, + RadioFormComponent, + StructureDetailPrintComponent, + StructureListPrintComponent, + StructurePmrComponent, StructurePublicTargetComponent, + StructureTypePickerComponent, + SvgIconComponent, + TextInputModalComponent, + TrainingTypePickerComponent, }; // tslint:disable-next-line:variable-name @@ -54,6 +56,7 @@ export const SharedComponents = [ StructureTypePickerComponent, CheckboxFormComponent, HourPickerComponent, + AppointmentChoiceComponent, RadioFormComponent, ModalConfirmationComponent, CustomModalComponent, diff --git a/src/app/shared/components/structure-pmr/structure-pmr.component.html b/src/app/shared/components/structure-pmr/structure-pmr.component.html index 36b0ca2dba39425854f7ecb6ad1e1583c3efa8c4..c56c7b3e2cdf586650a87e3984eb7e26eac36ffd 100644 --- a/src/app/shared/components/structure-pmr/structure-pmr.component.html +++ b/src/app/shared/components/structure-pmr/structure-pmr.component.html @@ -10,7 +10,7 @@ (keyup.enter)="goBack()" /> <div class="titleContent"> - <h3>{{ title ? title : 'La structure doit-elle être accessible pour les personnes à mobilité réduite ?' }}</h3> + <h3>{{ title ? title : 'La personne a-t-elle besoin d’un accès mobilité réduite ?' }}</h3> </div> </div> <p *ngIf="isEditMode && !structureForm.get('pmrAccess').valid" class="missing-information"> diff --git a/src/app/shared/components/structure-type-picker/structure-type-picker.component.ts b/src/app/shared/components/structure-type-picker/structure-type-picker.component.ts index a0782ecb41d2a18de1beaedc4668b1baf6f69cad..690178cfd1885c1786ec2fa24264177fb23a4d1a 100644 --- a/src/app/shared/components/structure-type-picker/structure-type-picker.component.ts +++ b/src/app/shared/components/structure-type-picker/structure-type-picker.component.ts @@ -34,6 +34,7 @@ export class StructureTypePickerComponent implements OnInit { this.structureTypeService.getStructureTypes().subscribe((types) => { // Filter "other" structure type types = types.filter((type) => type.selectable); + types = types.sort((a, b) => a.value.localeCompare(b.value)); this.publicTypes = types.filter((type) => type.category === this.structureTypeCategoryEnum.public); this.privateTypes = types.filter((type) => type.category === this.structureTypeCategoryEnum.private); this.privateLucrativeTypes = types.filter( diff --git a/src/app/shared/enum/structureType.enum.ts b/src/app/shared/enum/structureType.enum.ts index 2a32ad6cf8a9e6e69f1491ccac0dea70a800d313..a43e115ae7083dc9536c21e87cddf27b87b51a4f 100644 --- a/src/app/shared/enum/structureType.enum.ts +++ b/src/app/shared/enum/structureType.enum.ts @@ -24,6 +24,9 @@ export enum StructureTypeEnum { laPoste = 'La Poste', espaceEmploi = 'Espace emploi', CPAM = 'CPAM', + AFPA = 'AFPA', + centreDeGestion = 'Centre de gestion', + EPIC = 'EPIC', autre = 'Autre', // Privée à but non lucratif diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index c0829cf6b1ac5f9abd45de845b404f473f5ed840..e6051cdfe7a26cfc3f32f144439aa1b93ab8c5cc 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -1,14 +1,15 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; -import { FlexLayoutModule } from '@angular/flex-layout'; import { SharedComponents } from './components'; -import { SharedPipes } from './pipes'; -import { SharedDirectives } from './directives'; -import { SvgIconComponent } from './components/svg-icon/svg-icon.component'; import { AddressAutocompleteComponent } from './components/address-autocomplete/address-autocomplete.component'; +import { AppointmentChoiceComponent } from './components/appointment-choice/appointment-choice.component'; import { HourPickerComponent } from './components/hour-picker/hour-picker.component'; +import { SvgIconComponent } from './components/svg-icon/svg-icon.component'; +import { SharedDirectives } from './directives'; +import { SharedPipes } from './pipes'; @NgModule({ imports: [CommonModule, FormsModule, RouterModule, FlexLayoutModule, ReactiveFormsModule], declarations: [ @@ -18,6 +19,7 @@ import { HourPickerComponent } from './components/hour-picker/hour-picker.compon SvgIconComponent, AddressAutocompleteComponent, HourPickerComponent, + AppointmentChoiceComponent, ], exports: [ ...SharedPipes, diff --git a/src/app/structure-list/components/card/card.component.html b/src/app/structure-list/components/card/card.component.html index 78113ca64025b37c538481943bd75bbd5d22217a..39017ebc97fa5be6da4cdb291195a2c882fa7a9f 100644 --- a/src/app/structure-list/components/card/card.component.html +++ b/src/app/structure-list/components/card/card.component.html @@ -13,11 +13,15 @@ <app-svg-icon [type]="'ico'" [icon]="structure?.getTypeStructureIcon()" [iconClass]="'icon-52'" /> <div fxLayout="column" fxLayoutAlign="end"> <div fxLayout="row" class="structure-name-container"> - <span class="structure-name" [ngClass]="{ notClaimed: !isClaimed }">{{ structure.structureName }}</span> - <!-- rdv disabled waiting for reworking - <span *ngIf="structure.idCNFS && !isOrientation" class="rdv"> + <span + class="structure-name" + [ngClass]="{ notClaimed: structure.hasNoUserDN && profileService.isAdmin() }" + >{{ structure.structureName }}</span + > + <!-- rdv --> + <span *ngIf="structure.hasUserWithAppointmentDN && !isOrientation" class="rdv"> <app-svg-icon [type]="'ico'" [icon]="'rdv'" [iconColor]="'black'" [iconClass]="'icon-22'"></app-svg-icon> - </span> --> + </span> </div> <span class="typeStructure" [ngClass]="{ typeStructureOrientation: isOrientation }">{{ structure.getLabelTypeStructure() @@ -37,7 +41,7 @@ </div> </div> </div> - <div *ngIf="isOrientation" class="actions right"> + <div *ngIf="isOrientation && !isOrientationRdv" class="actions right"> <div *ngIf="!isSelected" fxLayout="row" @@ -63,4 +67,19 @@ <span>Ajouté</span> </div> </div> + <div *ngIf="isOrientation && isOrientationRdv" class="actions right"> + <app-button + tabindex="0" + fxLayout="row" + fxLayoutGap="6px" + class="rdv-button" + [style]="buttonTypeEnum.modalPrimary" + [type]="'form'" + [text]="' Prendre RDV'" + [iconBtn]="'appointement'" + [iconPos]="'left'" + (click)="cardRDV(); $event.stopPropagation()" + (keyup.enter)="cardRDV(); $event.stopPropagation()" + /> + </div> </div> diff --git a/src/app/structure-list/components/card/card.component.scss b/src/app/structure-list/components/card/card.component.scss index bf1bbe2e6e21169abf5aa4b5f19508180f174f2f..de3a0976c2ff219a61ca284bbf6f9158b1354ee9 100644 --- a/src/app/structure-list/components/card/card.component.scss +++ b/src/app/structure-list/components/card/card.component.scss @@ -62,6 +62,10 @@ border-radius: 20px; } +.rdv-button ::ng-deep app-svg-icon { + padding: 6px 8px 0 0; +} + .selected { border: solid 1px $grey-4; background-color: $white; diff --git a/src/app/structure-list/components/card/card.component.ts b/src/app/structure-list/components/card/card.component.ts index dcaf3e41ed7ec38e22426173315ad8f29faab86d..c311fa1e051a9d9c13394bd289979ea437b15da6 100644 --- a/src/app/structure-list/components/card/card.component.ts +++ b/src/app/structure-list/components/card/card.component.ts @@ -1,39 +1,27 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { Structure } from '../../../models/structure.model'; import { ProfileService } from '../../../profile/services/profile.service'; -import { StructureService } from '../../../services/structure.service'; +import { ButtonType } from '../../../shared/components/button/buttonType.enum'; @Component({ selector: 'app-card', templateUrl: './card.component.html', styleUrls: ['./card.component.scss'], }) -export class CardComponent implements OnInit { +export class CardComponent { @Input() public structure: Structure; @Input() public isSelected: boolean; @Input() public isOrientation: boolean = false; + @Input() public isOrientationRdv: boolean = false; + @Input() public noDetails: boolean = false; @Output() public showDetails: EventEmitter<Structure> = new EventEmitter<Structure>(); @Output() public addToList: EventEmitter<Structure> = new EventEmitter<Structure>(); + @Output() public selectRDV: EventEmitter<Structure> = new EventEmitter<Structure>(); @Output() public hover: EventEmitter<Structure> = new EventEmitter<Structure>(); - public isClaimed = true; + public buttonTypeEnum = ButtonType; - constructor( - private route: ActivatedRoute, - private router: Router, - private profileService: ProfileService, - private structureService: StructureService - ) {} - ngOnInit(): void { - if (this.profileService.isAdmin()) { - this.setClaimIndicator(); - } - } - - // Check if structure haven't owners to help admin vision. - async setClaimIndicator() { - this.isClaimed = await this.structureService.isClaimed(this.structure._id, null).toPromise(); - } + constructor(private route: ActivatedRoute, private router: Router, public profileService: ProfileService) {} /** * Display distance in m or km according to value @@ -47,19 +35,21 @@ export class CardComponent implements OnInit { } public cardClicked(): void { - this.showDetails.emit(this.structure); - const queryString = this.route.snapshot.queryParamMap.get('search'); - this.router.navigate([], { - relativeTo: this.route, - queryParams: queryString - ? { - id: this.structure._id, - search: queryString, - } - : { - id: this.structure._id, - }, - }); + if (!this.noDetails) { + this.showDetails.emit(this.structure); + const queryString = this.route.snapshot.queryParamMap.get('search'); + this.router.navigate([], { + relativeTo: this.route, + queryParams: queryString + ? { + id: this.structure._id, + search: queryString, + } + : { + id: this.structure._id, + }, + }); + } } public cardHover(): void { @@ -69,4 +59,8 @@ export class CardComponent implements OnInit { public cardAddToList(): void { this.addToList.emit(this.structure); } + + public cardRDV(): void { + this.selectRDV.emit(this.structure); + } } diff --git a/src/app/structure-list/components/structure-details/structure-details.component.html b/src/app/structure-list/components/structure-details/structure-details.component.html index f2a9beee4f60176d9867ac1a413654b3c14b090b..74a675ef1525230fed47fcbb92ad4ad1c1dbf0dc 100644 --- a/src/app/structure-list/components/structure-details/structure-details.component.html +++ b/src/app/structure-list/components/structure-details/structure-details.component.html @@ -18,7 +18,7 @@ <img class="loader-gif" src="/assets/gif/loader_circle.gif" alt /> </div> <!-- Content --> - <div *ngIf="!isLoading && structure.categories && structure.categoriesDisplay" class="structure-details-content"> + <div *ngIf="!isLoading && structure.categoriesDisplay" class="structure-details-content"> <!-- Action buttons bar --> <div class="structure-buttons hide-on-print" fxLayout="row" fxLayoutAlign="space-evenly"> <!-- Voir le conseiller numérique - Hidden until functionnality is developed --> @@ -33,12 +33,12 @@ <div class="iconTitle">Voir le conseiller numérique</div> </div--> <div - *ngIf="structure.idCNFS && showRdv" + *ngIf="structure.hasUserWithAppointmentDN" class="clickableDiv" role="button" tabindex="0" - (click)="goToRDVS()" - (keyup.enter)="goToRDVS()" + [routerLink]="['/orientation']" + [state]="{ rdvStructure: structure }" > <app-svg-icon class="icon" [type]="'ico'" [icon]="'rdvDetail'" [iconClass]="'icon-32'"></app-svg-icon> <div class="iconTitle">Prendre rdv</div> @@ -78,10 +78,7 @@ </div> <!-- Je travaille ici --> <div - *ngIf=" - !profileService.isLinkedToStructure(structure._id) && - !profileService.isPendingLinkedToStructure(structure._id) - " + *ngIf="!profileService.isLinkedToStructure(structure._id)" class="clickableDiv" role="button" tabindex="0" @@ -316,15 +313,15 @@ <!-- Members --> <div - *ngIf="userIsLoggedIn() && structureAdmins.length" + *ngIf="userIsLoggedIn() && membersWithJobWithPO.length" fxLayout="column" class="structure-details-block" fxLayoutAlign="baseline baseline" fxLayoutGap="8px" > - <h2>Membres</h2> + <h2>Accompagnant·es numériques</h2> <div fxLayout="column" fxLayoutGap="8px" fxLayoutAlign="baseline baseline"> - <div *ngFor="let member of structureAdmins" class="member-card"> + <div *ngFor="let member of membersWithJobWithPO" class="member-card"> <app-svg-icon class="avatar" [type]="'avatar'" [icon]="'defaultAvatar'" [iconClass]="'icon-40'" /> <div class="info-member"> <a class="member" routerLink="/profile/{{ member._id }}"> @@ -339,7 +336,7 @@ <!-- Démarches en lignes --> <div *ngIf=" - (structure.categories.onlineProcedures && structure.categories.onlineProcedures.length) || + (structure.categoriesDisplay.onlineProcedures && structure.categoriesDisplay.onlineProcedures.length) || structure.otherDescription " fxLayout="column" @@ -435,7 +432,7 @@ <!-- Vente de matériel --> <div - *ngIf="structure.categories.solidarityMaterial && structure.categories.solidarityMaterial.length" + *ngIf="structure.categoriesDisplay.solidarityMaterial && structure.categoriesDisplay.solidarityMaterial.length" fxLayout="column" class="structure-details-block" fxLayoutAlign="baseline baseline" @@ -513,7 +510,7 @@ [opened]="pendingModalOpened" [title]="'Travaillez-vous ici ?'" [primaryContent]=" - 'Un message a déjà été envoyé aux administrateurs Rés\'IN pour validation, vous recevrez un email quand votre compte sera rattaché à la structure' + 'Un message a déjà été envoyé pour validation, vous recevrez un email quand votre compte sera rattaché à la structure' " [secondaryContent]="structure?.structureName" [customConfirmationText]="'OK'" diff --git a/src/app/structure-list/components/structure-details/structure-details.component.ts b/src/app/structure-list/components/structure-details/structure-details.component.ts index 89ffc57736330a8ea3918dd910e042dd51794418..bbcf78bb5f8f545bc34b1b7e19697ec09e31de6c 100644 --- a/src/app/structure-list/components/structure-details/structure-details.component.ts +++ b/src/app/structure-list/components/structure-details/structure-details.component.ts @@ -2,23 +2,26 @@ import { animate, style, transition, trigger } from '@angular/animations'; import { Location } from '@angular/common'; import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; +import * as _ from 'lodash'; import { ParametersService } from '../../../admin/services/parameters.service'; import { Owner } from '../../../models/owner.model'; +import { PersonalOffer } from '../../../models/personalOffer.model'; import { Structure } from '../../../models/structure.model'; import { TclStopPoint } from '../../../models/tclStopPoint.model'; import { User } from '../../../models/user.model'; import { ProfileService } from '../../../profile/services/profile.service'; import { AuthService } from '../../../services/auth.service'; -import { RdvsService } from '../../../services/rdvs.service'; import { StructureService } from '../../../services/structure.service'; import { TclService } from '../../../services/tcl.service'; import { UserService } from '../../../services/user.service'; import { PrintService } from '../../../shared/service/print.service'; import { FreeWorkshop } from '../../../structure/enums/freeWorkshop.enum'; +import { Utils } from '../../../utils/utils'; import { AccessModality } from '../../enum/access-modality.enum'; import { Equipment } from '../../enum/equipment.enum'; import { Category } from '../../models/category.model'; import { SearchService } from '../../services/search.service'; + @Component({ selector: 'app-structure-details', templateUrl: './structure-details.component.html', @@ -40,7 +43,6 @@ import { SearchService } from '../../services/search.service'; export class StructureDetailsComponent implements OnInit { @Input() public structure: Structure; @Output() public closeDetails: EventEmitter<boolean> = new EventEmitter<boolean>(); - public showRdv = true; public accessModality = AccessModality; public categories: Category[] = []; public tclStopPoints: TclStopPoint[] = []; @@ -54,6 +56,7 @@ export class StructureDetailsComponent implements OnInit { public joinModalOpened = false; public pendingModalOpened = false; public structureAdmins: Owner[] = []; + public membersWithJobWithPO: Owner[] = []; public fullScreen = false; public Equipment = Equipment; public FreeWorkshop = FreeWorkshop; @@ -69,8 +72,8 @@ export class StructureDetailsComponent implements OnInit { private route: ActivatedRoute, private location: Location, private router: Router, - private usersService: UserService, - private rdvsService: RdvsService + private utils: Utils, + private usersService: UserService ) { this.route.url.subscribe((url) => { if (url.length > 0 && url[0].path === 'structure') { @@ -99,9 +102,6 @@ export class StructureDetailsComponent implements OnInit { if (data.fullScreen) { this.fullScreen = true; } - if (data.meeting == false) { - this.showRdv = data.meeting; - } }); } @@ -110,11 +110,9 @@ export class StructureDetailsComponent implements OnInit { this.currentProfile = await this.profileService.getProfile(); this.structureService.getStructureWithOwners(this.structure._id).subscribe((res) => { this.structureAdmins = res.owners; + this.membersWithJobWithPO = res.owners.filter((owner) => owner.job?.hasPersonalOffer); }); } - this.structure.isClaimed = await this.structureService - .isClaimed(this.structure._id, this.currentProfile) - .toPromise(); // GetTclStopPoints this.getTclStopPoints(); @@ -189,20 +187,20 @@ export class StructureDetailsComponent implements OnInit { } public handleJoin(): void { - if (this.userIsLoggedIn()) { - if (this.structure.isClaimed) { - if (this.profileService.isPendingLinkedToStructure(this.structure._id)) { - this.togglePendingModal(); - } else { - this.toggleJoinModal(); - } - } else { - this.toggleClaimModal(); - } - } else { + if (!this.userIsLoggedIn()) { this.router.navigate(['login'], { queryParams: { returnUrl: `acteurs?id=${this.structure._id}` } }); + return; + } + + if (this.profileService.isPendingLinkedToStructure(this.structure._id)) { + this.togglePendingModal(); + } else if (this.structure.hasNoUserDN) { + this.toggleClaimModal(); + } else { + this.toggleJoinModal(); } } + public handleModify(): void { this.router.navigateByUrl(`/profile/edit-structure/${this.structure._id}`); } @@ -227,7 +225,7 @@ export class StructureDetailsComponent implements OnInit { this.structureService .claimStructureWithAccount(this.structure._id, this.authService.userValue.username) .subscribe(); - this.router.navigate(['join-request', this.structure._id], { state: { isClaimed: this.structure.isClaimed } }); + this.router.navigate(['join-request', this.structure._id], { state: { isClaimed: !this.structure.hasNoUserDN } }); } } @@ -235,38 +233,42 @@ export class StructureDetailsComponent implements OnInit { this.toggleJoinModal(); if (shouldJoin) { this.usersService.joinStructure(this.structure._id, this.authService.userValue.username).subscribe(); - this.router.navigate(['join-request', this.structure._id], { state: { isClaimed: this.structure.isClaimed } }); + this.router.navigate(['join-request', this.structure._id], { state: { isClaimed: !this.structure.hasNoUserDN } }); } } /** - * Map categories ids to there real names + * Map categories ids to their real names */ public setServiceCategories(): void { - this.categories.forEach((category) => { - const structureModuleIds = this.structure.categories[category.id]; - if (structureModuleIds) { - const moduleNames = category.modules - .map((module) => { - if (structureModuleIds.includes(module.id)) { - return module.name; - } - }) - .filter((value) => value !== undefined) - .filter((value) => value !== 'Autres'); // Filter other categories - this.structure.categoriesDisplay = { - ...this.structure.categoriesDisplay, - [category.id]: moduleNames, - }; - } + // Set category names in this.structure.categoriesDisplay + this.utils.setServiceCategories(this.categories, this.structure); + + // Merge the structure offer with the personal offers of all members of the structure + this.structure.personalOffers.forEach((personalOffer: PersonalOffer) => { + const personalOfferDisplay = this.utils.setServiceCategories(this.categories, personalOffer); + + // use lodash _.union fonction to concat array without duplicates + this.structure.categoriesDisplay.onlineProcedures = _.union( + this.structure.categoriesDisplay.onlineProcedures, + personalOfferDisplay.categoriesDisplay.onlineProcedures + ); + this.structure.categoriesDisplay.baseSkills = _.union( + this.structure.categoriesDisplay.baseSkills, + personalOfferDisplay.categoriesDisplay.baseSkills + ); + this.structure.categoriesDisplay.advancedSkills = _.union( + this.structure.categoriesDisplay.advancedSkills, + personalOfferDisplay.categoriesDisplay.advancedSkills + ); }); } public hasBaseSkills(): boolean { - return this.structure.categories.baseSkills?.length > 0; + return this.structure.categoriesDisplay.baseSkills?.length > 0; } public hasAdvancedSkills(): boolean { - return this.structure.categories.advancedSkills?.length > 0; + return this.structure.categoriesDisplay.advancedSkills?.length > 0; } public getTclStopPoints(): void { @@ -287,7 +289,10 @@ export class StructureDetailsComponent implements OnInit { } public multipleWorkshop(): boolean { - if (this.structure.categories.baseSkills.length + this.structure.categories.advancedSkills.length > 1) { + if ( + this.structure.categoriesDisplay.baseSkills.length + this.structure.categoriesDisplay.advancedSkills.length > + 1 + ) { return true; } return false; @@ -301,10 +306,6 @@ export class StructureDetailsComponent implements OnInit { window.open(url, '_blank'); } - public goToRDVS(): void { - this.rdvsService.goToRDVS(this.structure.idCNFS); - } - public displayTrainings(): boolean { if (this.structure.categoriesDisplay === undefined) return false; diff --git a/src/app/structure-list/structure-list.component.html b/src/app/structure-list/structure-list.component.html index 2e2db9d8a05d1df0ce905ef58c25568c5f53d131..236b25601868adf1501a6abd775c844f3677cf0b 100644 --- a/src/app/structure-list/structure-list.component.html +++ b/src/app/structure-list/structure-list.component.html @@ -29,11 +29,13 @@ role="listitem" [structure]="structure" [isOrientation]="isOrientation" + [isOrientationRdv]="isOrientationRdv" [isSelected]="isInPrintList(structure._id)" (showDetails)="showDetails(structure)" (keyup.enter)="showDetails(structure)" (hover)="handleCardHover($event)" (addToList)="addToList($event)" + (selectRDV)="selectRDV($event)" /> <p *ngIf="structureList.length === 0" class="noStructureFound"> Il n'y a aucune réponse correspondant à votre recherche diff --git a/src/app/structure-list/structure-list.component.ts b/src/app/structure-list/structure-list.component.ts index 49569c04962bce07a6aa42e218cc3efd79146c81..5b5c13852d9cdd892f85e957fb62acb9b5b17fa5 100644 --- a/src/app/structure-list/structure-list.component.ts +++ b/src/app/structure-list/structure-list.component.ts @@ -14,6 +14,7 @@ import { PrintService } from '../shared/service/print.service'; }) export class StructureListComponent implements OnChanges, OnInit { @Input() public isOrientation: boolean = false; + @Input() public isOrientationRdv: boolean = false; @Input() public structureList: Structure[]; @Input() public isLoading = true; @Input() public location: GeoJson; @@ -22,6 +23,7 @@ export class StructureListComponent implements OnChanges, OnInit { @Output() public displayMapMarkerId: EventEmitter<string> = new EventEmitter<string>(); @Output() public selectedMarkerId: EventEmitter<string> = new EventEmitter<string>(); @Output() public structureSelected: EventEmitter<Structure[]> = new EventEmitter<Structure[]>(); + @Output() public structureRDVSelected: EventEmitter<Structure> = new EventEmitter<Structure>(); public buttonTypeEnum = ButtonType; public structure: Structure; @@ -62,6 +64,10 @@ export class StructureListComponent implements OnChanges, OnInit { } } + public selectRDV(structure: Structure): void { + this.structureRDVSelected.emit(structure); + } + public addToList(structure: Structure): void { let index = this.selectedStructureList.findIndex((elem) => elem._id == structure._id); if (index > -1) { diff --git a/src/app/utils/formUtils.ts b/src/app/utils/formUtils.ts index a9decacb97d3253c5b2047d6cb18e90f5ac1c2c1..ed9bef3193b80787f7cc3772285794a67633ca2f 100644 --- a/src/app/utils/formUtils.ts +++ b/src/app/utils/formUtils.ts @@ -5,6 +5,7 @@ import { Structure } from '../models/structure.model'; import { Time } from '../models/time.model'; import { Week } from '../models/week.model'; import { CustomRegExp } from './CustomRegExp'; +import { FormValidators } from './formValidators'; export interface IStructureSummary { step: structureFormStep; @@ -68,97 +69,96 @@ export class formUtils { * @returns */ public createStructureForm(structure: Structure, isEditMode?: boolean): UntypedFormGroup { - return new UntypedFormGroup({ - _id: new UntypedFormControl(structure._id, Validators.required), - coord: new UntypedFormControl(structure.coord), - structureType: new UntypedFormControl(structure.structureType?._id, Validators.required), - structureName: new UntypedFormControl(structure.structureName, Validators.required), - description: new UntypedFormControl(structure.description), - lockdownActivity: new UntypedFormControl(structure.lockdownActivity), - address: new UntypedFormGroup({ - numero: new UntypedFormControl(structure.address.numero), - street: new UntypedFormControl(structure.address.street, Validators.required), - commune: new UntypedFormControl(structure.address.commune, Validators.required), - }), - contactMail: new UntypedFormControl(structure.contactMail === '' ? null : structure.contactMail, [ - Validators.required, - Validators.pattern(CustomRegExp.EMAIL), - ]), - contactPhone: new UntypedFormControl(structure.contactPhone, [ - Validators.required, - Validators.pattern(CustomRegExp.PHONE), - ]), - contactPersonFirstname: new UntypedFormControl( - structure.contactPersonLastName, - !isEditMode && Validators.required - ), - contactPersonLastname: new UntypedFormControl( - structure.contactPersonLastName, - !isEditMode && Validators.required - ), - contactPersonEmail: new UntypedFormControl( - structure.contactPersonEmail, - !isEditMode && [Validators.pattern(CustomRegExp.EMAIL), Validators.required] - ), - website: new UntypedFormControl(structure.website, Validators.pattern(CustomRegExp.WEBSITE)), - facebook: new UntypedFormControl(structure.facebook, Validators.pattern(CustomRegExp.FACEBOOK)), - twitter: new UntypedFormControl(structure.twitter, Validators.pattern(CustomRegExp.TWITTER)), - instagram: new UntypedFormControl(structure.instagram, Validators.pattern(CustomRegExp.INSTAGRAM)), - linkedin: new UntypedFormControl(structure.linkedin, Validators.pattern(CustomRegExp.LINKEDIN)), - hours: new UntypedFormGroup({}), - pmrAccess: new UntypedFormControl(structure.pmrAccess, Validators.required), - placeOfReception: new UntypedFormControl(structure.placeOfReception, !isEditMode && Validators.required), - choiceCompletion: new UntypedFormControl(structure.choiceCompletion, !isEditMode && Validators.required), - exceptionalClosures: new UntypedFormControl(structure.exceptionalClosures), - categories: new UntypedFormGroup({ - labelsQualifications: this.loadArrayForCheckbox(structure.categories?.labelsQualifications, false), - accessModality: this.loadArrayForCheckbox(structure.categories?.accessModality, true), - publicsAccompaniment: this.loadArrayForCheckbox(structure.categories?.age, false), - onlineProcedures: this.loadArrayForCheckbox(structure.categories?.onlineProcedures, false), - handicaps: this.loadArrayForCheckbox(structure.categories?.handicaps, false), - age: this.loadArrayForCheckbox(structure.categories?.age, true), - languageAndIlliteracy: this.loadArrayForCheckbox(structure.categories?.languageAndIlliteracy, false), - selfServiceMaterial: this.loadArrayForCheckbox(structure.categories?.selfServiceMaterial, false), - genre: this.loadArrayForCheckbox(structure.categories?.genre, false), - baseSkills: new UntypedFormControl(structure.categories?.baseSkills), - advancedSkills: new UntypedFormControl(structure.categories?.advancedSkills), - solidarityMaterial: this.loadArrayForCheckbox(structure.categories?.solidarityMaterial, false), - }), - //TODO: remettre ou migrer les données de accompagnements à distance - remoteAccompaniment: new UntypedFormControl(false), - otherDescription: new UntypedFormControl(structure.otherDescription), - nbComputers: new UntypedFormControl( - structure.categories.selfServiceMaterial.includes('computer') ? structure.nbComputers : 0, - [ - Validators.required, - Validators.pattern(CustomRegExp.NO_NEGATIVE_NUMBER), - Validators.min(0), - Validators.max(1000), - ] - ), - nbPrinters: new UntypedFormControl( - structure.categories.selfServiceMaterial.includes('printer') ? structure.nbPrinters : 0, - [ - Validators.required, - Validators.pattern(CustomRegExp.NO_NEGATIVE_NUMBER), - Validators.min(0), - Validators.max(1000), - ] - ), - nbScanners: new UntypedFormControl( - structure.categories.selfServiceMaterial.includes('scanner') ? structure.nbScanners : 0, - [ - Validators.required, - Validators.pattern(CustomRegExp.NO_NEGATIVE_NUMBER), - Validators.min(0), - Validators.max(1000), - ] - ), - freeWorkShop: new UntypedFormControl(structure.freeWorkShop, [Validators.required]), - freeWifi: new UntypedFormControl(null, isEditMode ? [] : [Validators.required]), // Field used has a pivot, not sent in final form. - dataShareConsentDate: new UntypedFormControl(structure.dataShareConsentDate), - personalOffers: new UntypedFormControl(structure.personalOffers), - }); + return new UntypedFormGroup( + { + _id: new UntypedFormControl(structure._id, Validators.required), + coord: new UntypedFormControl(structure.coord), + structureType: new UntypedFormControl(structure.structureType?._id, Validators.required), + structureName: new UntypedFormControl(structure.structureName, Validators.required), + description: new UntypedFormControl(structure.description), + lockdownActivity: new UntypedFormControl(structure.lockdownActivity), + address: new UntypedFormGroup({ + numero: new UntypedFormControl(structure.address.numero), + street: new UntypedFormControl(structure.address.street, Validators.required), + commune: new UntypedFormControl(structure.address.commune, Validators.required), + }), + contactMail: new UntypedFormControl(structure.contactMail === '' ? null : structure.contactMail, [ + Validators.pattern(CustomRegExp.EMAIL), + ]), + contactPhone: new UntypedFormControl(structure.contactPhone, [Validators.pattern(CustomRegExp.PHONE)]), + contactPersonFirstname: new UntypedFormControl( + structure.contactPersonLastName, + !isEditMode && Validators.required + ), + contactPersonLastname: new UntypedFormControl( + structure.contactPersonLastName, + !isEditMode && Validators.required + ), + contactPersonEmail: new UntypedFormControl( + structure.contactPersonEmail, + !isEditMode && [Validators.pattern(CustomRegExp.EMAIL), Validators.required] + ), + website: new UntypedFormControl(structure.website, Validators.pattern(CustomRegExp.WEBSITE)), + facebook: new UntypedFormControl(structure.facebook, Validators.pattern(CustomRegExp.FACEBOOK)), + twitter: new UntypedFormControl(structure.twitter, Validators.pattern(CustomRegExp.TWITTER)), + instagram: new UntypedFormControl(structure.instagram, Validators.pattern(CustomRegExp.INSTAGRAM)), + linkedin: new UntypedFormControl(structure.linkedin, Validators.pattern(CustomRegExp.LINKEDIN)), + hours: new UntypedFormGroup({}), + pmrAccess: new UntypedFormControl(structure.pmrAccess, Validators.required), + placeOfReception: new UntypedFormControl(structure.placeOfReception, !isEditMode && Validators.required), + choiceCompletion: new UntypedFormControl(structure.choiceCompletion, !isEditMode && Validators.required), + exceptionalClosures: new UntypedFormControl(structure.exceptionalClosures), + categories: new UntypedFormGroup({ + labelsQualifications: this.loadArrayForCheckbox(structure.categories?.labelsQualifications, false), + accessModality: this.loadArrayForCheckbox(structure.categories?.accessModality, true), + publicsAccompaniment: this.loadArrayForCheckbox(structure.categories?.age, false), + onlineProcedures: this.loadArrayForCheckbox(structure.categories?.onlineProcedures, false), + handicaps: this.loadArrayForCheckbox(structure.categories?.handicaps, false), + age: this.loadArrayForCheckbox(structure.categories?.age, true), + languageAndIlliteracy: this.loadArrayForCheckbox(structure.categories?.languageAndIlliteracy, false), + selfServiceMaterial: this.loadArrayForCheckbox(structure.categories?.selfServiceMaterial, false), + genre: this.loadArrayForCheckbox(structure.categories?.genre, false), + baseSkills: new UntypedFormControl(structure.categories?.baseSkills), + advancedSkills: new UntypedFormControl(structure.categories?.advancedSkills), + solidarityMaterial: this.loadArrayForCheckbox(structure.categories?.solidarityMaterial, false), + }), + //TODO: remettre ou migrer les données de accompagnements à distance + remoteAccompaniment: new UntypedFormControl(false), + otherDescription: new UntypedFormControl(structure.otherDescription), + nbComputers: new UntypedFormControl( + structure.categories.selfServiceMaterial.includes('computer') ? structure.nbComputers : 0, + [ + Validators.required, + Validators.pattern(CustomRegExp.NO_NEGATIVE_NUMBER), + Validators.min(0), + Validators.max(1000), + ] + ), + nbPrinters: new UntypedFormControl( + structure.categories.selfServiceMaterial.includes('printer') ? structure.nbPrinters : 0, + [ + Validators.required, + Validators.pattern(CustomRegExp.NO_NEGATIVE_NUMBER), + Validators.min(0), + Validators.max(1000), + ] + ), + nbScanners: new UntypedFormControl( + structure.categories.selfServiceMaterial.includes('scanner') ? structure.nbScanners : 0, + [ + Validators.required, + Validators.pattern(CustomRegExp.NO_NEGATIVE_NUMBER), + Validators.min(0), + Validators.max(1000), + ] + ), + freeWorkShop: new UntypedFormControl(structure.freeWorkShop, [Validators.required]), + freeWifi: new UntypedFormControl(null, isEditMode ? [] : [Validators.required]), // Field used has a pivot, not sent in final form. + dataShareConsentDate: new UntypedFormControl(structure.dataShareConsentDate), + personalOffers: new UntypedFormControl(structure.personalOffers), + }, + FormValidators.requirePhoneOrMail(['contactPhone', 'contactMail']) + ); } public loadArrayForCheckbox(array: string[], isRequired: boolean): UntypedFormArray { diff --git a/src/app/utils/formValidators.ts b/src/app/utils/formValidators.ts new file mode 100644 index 0000000000000000000000000000000000000000..53a2cf674ab2e1ed15a3502d7b1197f4395abd8d --- /dev/null +++ b/src/app/utils/formValidators.ts @@ -0,0 +1,14 @@ +import { FormGroup, ValidationErrors } from '@angular/forms'; + +export class FormValidators { + public static requirePhoneOrMail(controls: string[] = null) { + return (group: FormGroup): ValidationErrors | null => { + if (!controls) { + controls = Object.keys(group.controls); + } + + const hasAtLeastOne = controls.some((k) => group.controls[k].valid && group.controls[k].value); + return hasAtLeastOne ? null : { requirePhoneOrMail: true }; + }; + } +} diff --git a/src/app/utils/orientationUtils.ts b/src/app/utils/orientationUtils.ts index 25dad14d50e784b55f74f9bf67780a452b370d0a..e17c8fee09fd70db2044a0a6599e4dcd1aa69df8 100644 --- a/src/app/utils/orientationUtils.ts +++ b/src/app/utils/orientationUtils.ts @@ -1,24 +1,18 @@ -import { - FormControl, - FormGroup, - UntypedFormArray, - UntypedFormControl, - UntypedFormGroup, - Validators, -} from '@angular/forms'; +import { FormControl, FormGroup, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { structureFormStep } from '../form/form-view/structure-form/structureFormStep.enum'; -import { MeetingRDVSSteps } from '../form/orientation-form-view/enums/MeetingRDVSSteps.enum'; +import { AppointmentSteps } from '../form/orientation-form-view/enums/AppointmentSteps.enum'; import { FiltersSteps } from '../form/orientation-form-view/enums/filtersSteps.enum'; import { HotlineMediationSteps } from '../form/orientation-form-view/enums/hotlineMediationSteps.enum'; import { NeedsType } from '../form/orientation-form-view/enums/needs.enum'; import { OnlineDemarchesCommonSteps } from '../form/orientation-form-view/enums/onlineDemarchesCommonSteps.enum'; import { PreferredLanguages } from '../form/orientation-form-view/enums/preferredLanguages.enum'; import { StructuresListSteps } from '../form/orientation-form-view/enums/structuresListSteps.enum'; +import { AppointmentForm } from '../form/orientation-form-view/interfaces/appointmentForm.interface'; import { FiltersForm } from '../form/orientation-form-view/interfaces/filtersForm.interface'; -import { MeetingRDVSForm } from '../form/orientation-form-view/interfaces/meetingRDVSForm.interface'; import { OnlineDemarchesForm } from '../form/orientation-form-view/interfaces/onlineDemarchesForm.interface'; import { StructureOrientationForm } from '../form/orientation-form-view/interfaces/structureOrientationForm.interface'; import { StructureOrientator } from '../form/orientation-form-view/interfaces/structureOrientator.interface'; +import { Filter } from '../structure-list/models/filter.model'; import { Module } from '../structure-list/models/module.model'; import { CustomRegExp } from './CustomRegExp'; @@ -108,27 +102,47 @@ export class OrientationUtils { structurePhone: new FormControl(orientator?.structurePhone || '', [Validators.pattern(CustomRegExp.PHONE)]), }); } - public createMeetingRDVSForm( + public createAppointmentForm( onlineDemarcheType, orientatorForm?: FormGroup<StructureOrientator> - ): FormGroup<MeetingRDVSForm> { - return new FormGroup<MeetingRDVSForm>({ + ): FormGroup<AppointmentForm> { + return new FormGroup<AppointmentForm>({ structureOrientator: orientatorForm || this.createStructureOrientatorForm(), - categories: new UntypedFormGroup( - { - age: new UntypedFormArray([], Validators.required), - languageAndIlliteracy: new UntypedFormArray([]), - genre: new UntypedFormArray([]), - handicaps: new UntypedFormArray([]), - }, - Validators.required - ), + structureRDV: new FormControl('', Validators.required), pmrAccess: new FormControl(null, Validators.required), - digitalPass: new FormControl(null, Validators.required), address: new FormControl(''), onlineDemarcheType: new FormControl(onlineDemarcheType), + socialWorkerId: new FormControl('', Validators.required), + details: new FormControl(''), + name: new FormControl('', [Validators.required, Validators.pattern(CustomRegExp.TEXT_WITHOUT_NUMBER)]), + surname: new FormControl('', [Validators.required, Validators.pattern(CustomRegExp.TEXT_WITHOUT_NUMBER)]), + email: new UntypedFormControl('', [Validators.required, Validators.pattern(CustomRegExp.EMAIL)]), + phone: new UntypedFormControl('', [Validators.required, Validators.pattern(CustomRegExp.PHONE)]), }); } + /** + * + * @param pagesValidation + * @param filterForm + * @param form + * @param updatePageValid + * @param step + */ + public setValidationsLearnSkillsForm( + pagesValidation: any[], + filterForm: FormGroup<FiltersForm>, + form: UntypedFormGroup, + updatePageValid: (isValid: boolean) => void, + step: OnlineDemarchesCommonSteps + ): void { + pagesValidation[OnlineDemarchesCommonSteps.onlineDemarche] = { + valid: filterForm.get('filters').value.length > 0, + }; + pagesValidation[OnlineDemarchesCommonSteps.accompanimentType] = { + valid: form.get('accompanimentType')?.value !== null, + }; + updatePageValid(pagesValidation[step].valid); + } /** * * @param pagesValidation @@ -167,7 +181,7 @@ export class OrientationUtils { pagesValidation[HotlineMediationSteps.infoScreen] = { valid: true, }; - pagesValidation[HotlineMediationSteps.mediationBeneciaryInfo] = { + pagesValidation[HotlineMediationSteps.mediationBeneficiaryInfo] = { valid: form.get('name').valid && form.get('surname').valid && form.get('phone').valid, }; pagesValidation[HotlineMediationSteps.mediationHoursSelection] = { @@ -205,7 +219,7 @@ export class OrientationUtils { pagesValidation[StructuresListSteps.structureOrientator] = { valid: form.get('structureOrientator').valid, }; - pagesValidation[StructuresListSteps.mediationBeneciaryInfo] = { + pagesValidation[StructuresListSteps.mediationBeneficiaryInfo] = { valid: form.get('name').valid && form.get('surname').valid, }; pagesValidation[StructuresListSteps.comments] = { valid: true }; @@ -220,31 +234,35 @@ export class OrientationUtils { * @param updatePageValid * @param step */ - public setValidationsOnlineMeetingForm( + public setValidationsAppointmentForm( pagesValidation: any[], - form: FormGroup<MeetingRDVSForm>, + form: FormGroup<AppointmentForm>, updatePageValid: (isValid: boolean) => void, - step: MeetingRDVSSteps + step: AppointmentSteps ): void { - pagesValidation[MeetingRDVSSteps.infoScreen] = { + pagesValidation[AppointmentSteps.infoScreen] = { valid: true, }; - pagesValidation[MeetingRDVSSteps.structureOrientator] = { + pagesValidation[AppointmentSteps.structureOrientator] = { valid: form.get('structureOrientator').valid, }; - pagesValidation[MeetingRDVSSteps.publicTypeMandatory] = { - valid: form.get('categories').valid && form.get('categories').get('age').valid, + pagesValidation[AppointmentSteps.pmrAccess] = { + valid: form.get('pmrAccess').valid, }; - pagesValidation[MeetingRDVSSteps.publicTypeOptional] = { + pagesValidation[AppointmentSteps.location] = { valid: true, }; - pagesValidation[MeetingRDVSSteps.pmrAccess] = { - valid: form.get('pmrAccess').valid, - }; - pagesValidation[MeetingRDVSSteps.digitalPass] = { + pagesValidation[AppointmentSteps.carto] = { valid: true, }; - pagesValidation[MeetingRDVSSteps.location] = { + pagesValidation[AppointmentSteps.makeAppointment] = { + valid: form.get('socialWorkerId').valid && form.get('structureRDV').valid, + }; + pagesValidation[AppointmentSteps.mediationBeneficiaryInfo] = { + valid: + form.get('name').valid && form.get('surname').valid && (form.get('phone').valid || form.get('email').valid), + }; + pagesValidation[AppointmentSteps.rdvEnd] = { valid: true, }; @@ -269,4 +287,20 @@ export class OrientationUtils { }; updatePageValid(pagesValidation[step].valid); } + + /** + * + * @param filters + * @param event + */ + public manuallySetOfPmr(filters: Filter[], event: { name: string; value: boolean }): void { + // Handle special PMR access case + if (event.name === 'pmrAccess') { + if (event.value) { + filters.push(new Filter('pmrAccess', 'True', 'PMR')); + } else { + filters = filters.filter((module) => module.name !== 'pmrAccess'); + } + } + } } diff --git a/src/assets/form/rdvsImage.svg b/src/assets/form/rdvsImage.svg deleted file mode 100644 index 538893ef5990a2ccb18997c389b2cedd53b290a2..0000000000000000000000000000000000000000 --- a/src/assets/form/rdvsImage.svg +++ /dev/null @@ -1,228 +0,0 @@ -<svg width="200" height="201" viewBox="0 0 200 201" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M116.463 134.905L184.883 95.4026C191.101 91.8127 191.101 85.9924 184.883 82.4026L148.679 61.5" stroke="#706F6F" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/> -<path d="M20.9996 126.54L44.0803 113.214C50.2981 109.624 60.3792 109.624 66.597 113.214L101.944 133.622" stroke="#706F6F" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/> -<path d="M145.673 140.952C146.992 141.714 146.997 142.953 145.691 143.715L103.532 168.215C102.221 168.977 100.078 168.977 98.7585 168.215L54.3282 142.564C53.0087 141.802 52.9998 140.562 54.3105 139.801L96.4692 115.301C97.7799 114.539 99.923 114.539 101.243 115.301L145.673 140.952Z" fill="white" stroke="#DA3635" stroke-miterlimit="10"/> -<path d="M136.825 141.112C137.888 141.728 137.892 142.729 136.838 143.34L102.845 163.093C101.787 163.708 100.06 163.708 98.9969 163.093L63.1702 142.41C62.1075 141.794 62.0986 140.798 63.1569 140.183L97.1504 120.429C98.2087 119.814 99.9356 119.814 100.998 120.429L136.825 141.112Z" fill="#EDEDED"/> -<path d="M68.0088 103.646V140.948L100.616 159.594V122.297L68.0088 103.646Z" fill="white"/> -<path d="M68.0088 103.646V140.948L100.616 159.594V122.297L68.0088 103.646Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.616 122.299L133.175 103.626L100.616 84.9355L68.0088 103.648L100.616 122.299Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.638 119.544L128.335 103.657L100.638 87.7559L72.9014 103.679L100.638 119.544Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M133.175 103.625L133.224 140.948L100.616 159.595V122.298L133.175 103.625Z" fill="white"/> -<path d="M133.175 103.625L133.224 140.948L100.616 159.595V122.298L133.175 103.625Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.616 80.6709L68.0088 99.3879L100.616 118.034L133.175 99.3614L100.616 80.6709ZM72.9017 99.4189L100.638 83.4959L128.34 99.3968L100.638 115.28L72.9017 99.4189Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M68.0088 99.3887V106.075L100.616 124.721V118.035L68.0088 99.3887Z" fill="white"/> -<path d="M68.0088 99.3887V106.075L100.616 124.721V118.035L68.0088 99.3887Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.616 118.033V124.351L133.175 105.674V99.3555L100.616 118.033Z" fill="white"/> -<path d="M100.616 118.033V124.351L133.175 105.674V99.3555L100.616 118.033Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.639 83.4961V87.7558L124.621 101.527L128.336 99.3969L100.639 83.4961Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M72.9014 99.4191L100.638 83.4961V87.7558L76.5855 101.527L72.9014 99.4191Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.428 115.62V125.37L128.729 121.775L129.756 121.195V111.436L122.428 115.62Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.428 115.624V124.303L128.729 120.708V112.033L122.428 115.624Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.134 120.735V130.49L119.435 126.894L120.462 126.31V116.555L113.134 120.735Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.134 120.74V129.423L119.435 125.827V117.148L113.134 120.74Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.034 125.491V135.241L110.335 131.65L111.367 131.065V121.311L104.034 125.491Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.034 125.495V134.179L110.335 130.583V121.904L104.034 125.495Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.45 127.523V137.278L128.751 133.683L129.783 133.094V123.339L122.45 127.523Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.45 127.528V136.211L128.751 132.615V123.937L122.45 127.528Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.156 132.638V142.388L119.457 138.797L120.489 138.213V128.458L113.156 132.638Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.156 132.643V141.326L119.457 137.731V129.052L113.156 132.643Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.062 137.394V147.149L110.358 143.553L111.39 142.969V133.214L104.062 137.394Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.062 137.402V146.08L110.358 142.485V133.811L104.062 137.402Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M90.6436 151.983L90.6745 127.058L98.4323 131.534L98.4014 156.464L90.6436 151.983Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M69.2617 139.646L69.2927 114.717L77.0505 119.198L77.0195 144.123L69.2617 139.646Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M87.991 129.367L87.9245 152.41L76.2568 145.671L76.3233 122.632L87.991 129.367Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M74.5147 122.513L77.2025 120.95L77.1316 146.19L74.4395 147.753L74.5147 122.513Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M88.0694 128.503L90.7616 126.94L90.6819 154.009L87.9941 155.576L88.0694 128.503Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M72.8701 119.732L75.5623 118.164L90.7591 126.94L88.0669 128.503L72.8701 119.732Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M88.0689 128.503L87.9937 155.576L86.3464 154.624L86.4173 129.389L74.5149 122.512L74.4397 147.752L72.7969 146.8L72.8722 119.731L88.0689 128.503Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M74.4502 126.356L75.2384 125.896L86.4057 132.351L86.4146 133.273L74.4502 126.356Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M86.4151 133.273L86.4018 137.209L74.4375 130.297L74.4507 126.356L86.4151 133.273Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M85.1492 140.492L85.1403 143.645L84.0732 143.03L84.0865 139.877L85.1492 140.492Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M84.2203 141.29L84.0432 141.503C83.9901 141.569 83.8971 141.596 83.8174 141.569L82.8211 141.251C82.6705 141.202 82.52 141.33 82.551 141.49C82.5642 141.569 82.6218 141.631 82.6971 141.653L84.2513 142.141C84.3133 142.158 84.3797 142.149 84.4284 142.114L84.8535 141.835C84.9775 141.751 84.9775 141.565 84.8535 141.485L84.5037 141.255C84.4107 141.189 84.2912 141.211 84.2203 141.29Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M68.0088 63.3496V100.646L100.616 119.293V81.9958L68.0088 63.3496Z" fill="white"/> -<path d="M68.0088 63.3496V100.646L100.616 119.293V81.9958L68.0088 63.3496Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.616 81.9955L133.175 63.3227L100.616 44.6367L68.0088 63.3493L100.616 81.9955Z" fill="white"/> -<path d="M100.616 81.9955L133.175 63.3227L100.616 44.6367L68.0088 63.3493L100.616 81.9955Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M133.175 63.3223L133.224 100.646L100.616 119.292V81.995L133.175 63.3223Z" fill="white"/> -<path d="M133.175 63.3223L133.224 100.646L100.616 119.292V81.995L133.175 63.3223Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M77.4734 75.6859V85.4407L71.1724 81.8452L70.1406 81.2607V71.5059L77.4734 75.6859Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M77.469 75.6907V84.3739L71.168 80.774V72.0996L77.469 75.6907Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M86.7683 80.805V90.5598L80.4673 86.9643L79.4355 86.3798V76.625L86.7683 80.805Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M86.7639 80.8034V89.4867L80.4629 85.8912V77.2168L86.7639 80.8034Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M95.8624 85.5609V95.3157L89.5614 91.7202L88.5342 91.1357V81.3809L95.8624 85.5609Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M95.8625 85.5637V94.247L89.5615 90.6515V81.9727L95.8625 85.5637Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M77.5715 87.5887V97.3435L71.2705 93.7524L70.2432 93.1635V83.4131L77.5715 87.5887Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M77.5715 87.593V96.2763L71.2705 92.6808V84.002L77.5715 87.593Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M86.8674 92.7073V102.462L80.5664 98.8666L79.5391 98.2822V88.5273L86.8674 92.7073Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M86.8664 92.7122V101.391L80.5654 97.7999V89.1211L86.8664 92.7122Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M95.9621 97.4632V107.218L89.6655 103.623L88.6338 103.042V93.2832L95.9621 97.4632Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M95.9621 97.4705V106.145L89.6611 102.554V93.875L95.9621 97.4705Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.428 75.3197V85.0745L128.729 81.479L129.756 80.8945V71.1396L122.428 75.3197Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.428 75.3245V84.0033L128.729 80.4122V71.7334L122.428 75.3245Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.134 80.4339V90.1931L119.435 86.5932L120.462 86.0087V76.2539L113.134 80.4339Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.134 80.4417V89.1205L119.435 85.5294V76.8506L113.134 80.4417Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.034 85.1947V94.945L110.34 91.3539L111.367 90.765V81.0146L104.034 85.1947Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.034 85.1975V93.8808L110.34 90.2853V81.6064L104.034 85.1975Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.449 87.22V96.9749L128.75 93.3794L129.782 92.7949V83.04L122.449 87.22Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.449 87.2249V95.9081L128.75 92.3126V83.6338L122.449 87.2249Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.155 92.3392V102.09L119.456 98.4941L120.488 97.9096V88.1592L113.155 92.3392Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.155 92.344V101.027L119.456 97.4317V88.7529L113.155 92.344Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.061 97.095V106.845L110.362 103.254L111.389 102.67V92.915L104.061 97.095Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.061 97.0999V105.779L110.362 102.188V93.5088L104.061 97.0999Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M68.0088 61.4141V63.3491L100.882 82.7569V80.8263L68.0088 61.4141Z" fill="white"/> -<path d="M68.0088 61.4141V63.3491L100.882 82.7569V80.8263L68.0088 61.4141Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.882 80.8262L133.056 62.3749L100.231 42.9229L68.0088 61.4141L100.882 80.8262Z" fill="white"/> -<path d="M100.882 80.8262L133.056 62.3749L100.231 42.9229L68.0088 61.4141L100.882 80.8262Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M133.055 62.374L133.104 64.3356L100.882 82.756V80.8254L133.055 62.374Z" fill="white"/> -<path d="M133.055 62.374L133.104 64.3356L100.882 82.756V80.8254L133.055 62.374Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M98.7614 41.9336L69.8379 58.5385L73.6902 60.7392L100.878 76.547L125.949 62.1694L129.757 59.9864L98.7614 41.9336ZM100.9 74.1028L74.1773 58.565L98.7791 44.4442L125.471 60.0174L123.833 60.9561L100.9 74.1028Z" fill="white"/> -<path d="M98.7614 41.9336L69.8379 58.5385L73.6902 60.7392L100.878 76.547L125.949 62.1694L129.757 59.9864L98.7614 41.9336ZM100.9 74.1028L74.1773 58.565L98.7791 44.4442L125.471 60.0174L123.833 60.9561L100.9 74.1028Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M69.8447 58.5371V60.5784L100.88 78.5914V76.5457L69.8447 58.5371Z" fill="white"/> -<path d="M69.8447 58.5371V60.5784L100.88 78.5914V76.5457L69.8447 58.5371Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.88 76.546V78.5917L129.764 62.0222V59.9854L100.88 76.546Z" fill="white"/> -<path d="M100.88 76.546V78.5917L129.764 62.0222V59.9854L100.88 76.546Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M98.7812 44.4385L98.8122 46.7543L123.467 61.1673L125.469 60.0116L98.7812 44.4385Z" fill="white"/> -<path d="M98.7812 44.4385L98.8122 46.7543L123.467 61.1673L125.469 60.0116L98.7812 44.4385Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M74.1787 58.5637L98.785 44.4385L98.8159 46.7543L76.1935 59.715L74.1787 58.5637Z" fill="white"/> -<path d="M74.1787 58.5637L98.785 44.4385L98.8159 46.7543L76.1935 59.715L74.1787 58.5637Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M107.017 55.6205C110.887 57.8566 110.909 61.4742 107.066 63.7104C103.222 65.9465 96.9655 65.9465 93.0954 63.7104C89.2254 61.4742 89.2077 57.8566 93.0511 55.6205C96.8946 53.3843 103.147 53.3843 107.017 55.6205Z" fill="white" stroke="#DA3635" stroke-miterlimit="10"/> -<path d="M104.372 57.1576C106.772 58.5436 106.786 60.7886 104.403 62.1745C102.021 63.5605 98.1422 63.5605 95.7422 62.1745C93.3422 60.7886 93.3334 58.5436 95.7156 57.1576C98.0978 55.7717 101.972 55.7717 104.372 57.1576Z" fill="#EDEDED"/> -<path d="M123.199 156.5L141.949 167.325C148.167 170.915 148.167 176.735 141.949 180.325L128.462 188.112" stroke="#706F6F" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/> -<path d="M128.208 154.049C130.248 155.225 130.261 157.135 128.233 158.311C126.206 159.487 122.909 159.487 120.869 158.311C118.829 157.135 118.82 155.225 120.848 154.049C122.876 152.873 126.168 152.873 128.208 154.049Z" fill="white" stroke="#DA3635" stroke-miterlimit="10"/> -<path d="M133.362 185.949C138.27 188.784 138.301 193.38 133.42 196.215C128.544 199.049 120.605 199.049 115.698 196.215C110.79 193.38 110.763 188.784 115.645 185.949C120.526 183.115 128.454 183.115 133.362 185.949Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 5"/> -<path d="M131.955 186.648C136.075 189.028 136.101 192.884 132.008 195.264C127.914 197.643 121.251 197.643 117.125 195.264C113.005 192.884 112.984 189.028 117.078 186.648C121.171 184.268 127.83 184.268 131.955 186.648Z" fill="#EDEDED"/> -<path d="M134.208 186.41C134.203 186.458 134.203 186.505 134.198 186.558C134.192 186.601 134.187 186.643 134.182 186.685C134.177 186.733 134.166 186.78 134.161 186.828C134.155 186.87 134.145 186.913 134.134 186.955C134.124 187.003 134.113 187.05 134.097 187.098C134.087 187.14 134.071 187.182 134.06 187.225C134.044 187.272 134.028 187.32 134.013 187.362C133.997 187.405 133.981 187.447 133.965 187.489C133.944 187.537 133.923 187.584 133.901 187.637C133.886 187.68 133.864 187.717 133.843 187.759C133.822 187.806 133.796 187.854 133.769 187.902C133.748 187.939 133.727 187.981 133.706 188.018C133.674 188.076 133.637 188.134 133.6 188.187C133.579 188.224 133.558 188.256 133.531 188.293C133.489 188.357 133.441 188.42 133.394 188.478C133.373 188.505 133.351 188.531 133.33 188.563C133.251 188.663 133.166 188.758 133.082 188.854C133.061 188.88 133.034 188.901 133.013 188.928C132.944 189.002 132.87 189.076 132.796 189.145C132.759 189.176 132.727 189.208 132.69 189.24C132.643 189.282 132.595 189.319 132.548 189.361C132.505 189.398 132.463 189.435 132.415 189.472C132.368 189.515 132.315 189.552 132.262 189.594C132.214 189.631 132.167 189.668 132.119 189.7C132.066 189.737 132.013 189.779 131.955 189.816C131.902 189.853 131.855 189.885 131.802 189.922C131.744 189.959 131.686 189.996 131.627 190.033C131.553 190.081 131.479 190.123 131.405 190.171C131.194 190.292 130.977 190.403 130.755 190.514C130.697 190.541 130.638 190.572 130.575 190.599C130.374 190.694 130.168 190.779 129.956 190.863C129.93 190.874 129.903 190.885 129.872 190.895C129.644 190.98 129.411 191.059 129.179 191.133C129.015 191.186 128.845 191.228 128.682 191.276C128.555 191.313 128.428 191.345 128.301 191.376C128.126 191.419 127.946 191.456 127.767 191.493C127.634 191.519 127.507 191.551 127.375 191.572C127.322 191.583 127.264 191.588 127.211 191.598C126.989 191.636 126.767 191.667 126.54 191.694C126.476 191.699 126.407 191.71 126.344 191.715C126.217 191.731 126.085 191.736 125.953 191.747C125.736 191.762 125.519 191.778 125.297 191.789C125.159 191.794 125.016 191.799 124.879 191.799C124.704 191.805 124.525 191.805 124.35 191.799C124.202 191.799 124.054 191.794 123.906 191.789C123.742 191.784 123.578 191.773 123.414 191.762C123.266 191.752 123.118 191.741 122.964 191.725C122.801 191.71 122.642 191.694 122.483 191.673C122.34 191.657 122.192 191.636 122.05 191.609C121.875 191.583 121.706 191.551 121.537 191.519C121.404 191.493 121.267 191.466 121.135 191.44C120.934 191.398 120.733 191.345 120.532 191.292C120.405 191.26 120.273 191.228 120.146 191.186C120.077 191.165 120.008 191.144 119.945 191.123C119.744 191.059 119.548 190.99 119.358 190.922C119.299 190.9 119.246 190.879 119.188 190.858C119.014 190.789 118.845 190.715 118.675 190.641C118.591 190.604 118.506 190.572 118.427 190.53C118.183 190.414 117.945 190.292 117.718 190.16C115.809 189.06 114.857 187.611 114.862 186.167L114.852 190.329C114.846 191.773 115.798 193.217 117.707 194.322C117.935 194.454 118.173 194.576 118.416 194.692C118.495 194.729 118.585 194.766 118.665 194.803C118.808 194.867 118.95 194.936 119.098 194.994C119.125 195.004 119.151 195.015 119.178 195.02C119.231 195.041 119.289 195.063 119.347 195.084C119.537 195.152 119.738 195.221 119.934 195.285C120.003 195.306 120.072 195.327 120.14 195.348C120.188 195.364 120.23 195.38 120.278 195.39C120.357 195.412 120.442 195.428 120.526 195.449C120.727 195.502 120.923 195.549 121.129 195.597C121.182 195.607 121.235 195.623 121.288 195.634C121.367 195.65 121.447 195.66 121.526 195.676C121.695 195.708 121.87 195.74 122.039 195.766C122.108 195.777 122.176 195.792 122.245 195.803C122.319 195.814 122.399 195.819 122.473 195.829C122.631 195.851 122.795 195.866 122.959 195.882C123.038 195.888 123.113 195.903 123.192 195.909C123.266 195.914 123.335 195.914 123.409 195.919C123.573 195.93 123.737 195.941 123.901 195.946C123.985 195.951 124.065 195.956 124.149 195.956C124.213 195.956 124.281 195.956 124.345 195.956C124.519 195.956 124.699 195.956 124.874 195.956C124.964 195.956 125.048 195.956 125.138 195.956C125.191 195.956 125.244 195.946 125.291 195.946C125.508 195.935 125.73 195.919 125.947 195.903C126.037 195.898 126.122 195.893 126.212 195.888C126.254 195.882 126.296 195.877 126.339 195.872C126.402 195.866 126.471 195.856 126.534 195.851C126.762 195.824 126.984 195.792 127.206 195.755C127.259 195.745 127.317 195.74 127.37 195.729C127.396 195.724 127.423 195.724 127.449 195.718C127.555 195.697 127.656 195.671 127.761 195.65C127.941 195.613 128.121 195.576 128.295 195.533C128.422 195.502 128.549 195.465 128.676 195.433C128.845 195.385 129.009 195.343 129.173 195.29C129.21 195.279 129.247 195.269 129.279 195.258C129.48 195.195 129.676 195.126 129.866 195.052C129.893 195.041 129.919 195.031 129.951 195.02C130.162 194.936 130.369 194.851 130.57 194.756C130.628 194.729 130.691 194.703 130.749 194.671C130.972 194.565 131.194 194.449 131.4 194.327C131.442 194.306 131.479 194.28 131.516 194.259C131.553 194.238 131.585 194.216 131.622 194.19C131.68 194.153 131.738 194.116 131.797 194.079C131.849 194.042 131.902 194.01 131.95 193.973C132.003 193.936 132.061 193.899 132.114 193.857C132.162 193.82 132.209 193.783 132.257 193.746C132.31 193.709 132.357 193.666 132.41 193.629C132.458 193.592 132.5 193.555 132.542 193.518C132.59 193.476 132.637 193.439 132.68 193.397C132.701 193.381 132.717 193.365 132.738 193.349C132.754 193.333 132.77 193.317 132.786 193.301C132.86 193.227 132.934 193.159 133.002 193.085C133.024 193.058 133.05 193.037 133.071 193.011C133.161 192.915 133.246 192.815 133.32 192.72C133.325 192.714 133.325 192.709 133.33 192.709C133.346 192.688 133.362 192.662 133.383 192.64C133.431 192.577 133.478 192.519 133.521 192.455C133.542 192.418 133.568 192.387 133.589 192.349C133.626 192.291 133.664 192.233 133.695 192.18C133.706 192.164 133.716 192.149 133.722 192.133C133.732 192.111 133.743 192.085 133.759 192.064C133.785 192.016 133.812 191.969 133.833 191.921C133.854 191.879 133.87 191.842 133.891 191.799C133.912 191.752 133.933 191.704 133.954 191.651C133.965 191.63 133.976 191.609 133.981 191.588C133.986 191.567 133.991 191.546 134.002 191.53C134.018 191.482 134.034 191.435 134.05 191.392C134.06 191.35 134.076 191.308 134.087 191.265C134.097 191.218 134.113 191.17 134.124 191.123C134.129 191.096 134.139 191.07 134.145 191.048C134.15 191.033 134.15 191.011 134.155 190.996C134.166 190.948 134.171 190.9 134.177 190.853C134.182 190.81 134.187 190.768 134.192 190.726C134.198 190.678 134.198 190.631 134.203 190.578C134.203 190.551 134.208 190.52 134.208 190.493C134.208 190.467 134.208 190.435 134.208 190.409L134.219 186.246C134.219 186.299 134.214 186.352 134.208 186.41Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/> -<path d="M131.357 182.248C135.149 184.437 135.17 187.986 131.405 190.175C127.639 192.365 121.51 192.365 117.718 190.175C113.926 187.986 113.91 184.437 117.675 182.248C121.441 180.058 127.565 180.058 131.357 182.248Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/> -<path d="M129.094 183.966C129.226 184.046 129.231 184.173 129.089 184.252L125.984 186.055C125.852 186.135 125.852 186.262 125.989 186.341L128.951 188.049C129.083 188.129 129.089 188.256 128.946 188.335L128.306 188.705C128.168 188.784 127.941 188.784 127.809 188.71L124.847 187.002C124.71 186.923 124.482 186.923 124.345 187.002L121.214 188.821C121.076 188.901 120.849 188.901 120.717 188.827L119.976 188.398C119.839 188.319 119.833 188.187 119.976 188.107L123.107 186.288C123.245 186.209 123.245 186.077 123.112 186.003L120.172 184.305C120.034 184.226 120.029 184.093 120.172 184.014L120.812 183.644C120.949 183.564 121.177 183.564 121.314 183.644L124.255 185.341C124.387 185.421 124.614 185.421 124.747 185.341L127.851 183.538C127.989 183.459 128.216 183.459 128.354 183.538L129.094 183.966Z" fill="#DA3635"/> -<path d="M24.8715 127.409C28.1368 129.363 28.1555 132.524 24.9126 134.478C21.6697 136.432 16.3906 136.432 13.1253 134.478C9.86 132.524 9.84506 129.363 13.088 127.409C16.3309 125.455 21.6062 125.455 24.8715 127.409Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/> -<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" fill="white"/> -<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" fill="white"/> -<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" fill="white"/> -<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" fill="white"/> -<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" fill="white"/> -<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" fill="white"/> -<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" fill="white"/> -<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" fill="white"/> -<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" fill="white"/> -<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" fill="white"/> -<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" fill="white"/> -<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" fill="white"/> -<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" fill="white"/> -<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" fill="white"/> -<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.7717 109.551C15.3734 109.688 15.0865 109.941 14.7911 110.223C14.4442 110.557 13.9046 110.866 13.6905 111.324C13.3694 112.022 13.2066 113.311 13.1424 114.073C13.0482 114.998 13.1167 115.923 13.1938 116.852C13.1938 116.852 13.1724 117.443 14.5812 116.737C14.5812 116.737 14.3543 118.368 15.1636 118.638C15.9944 119.096 16.8551 118.921 17.7929 118.921C18.812 118.908 19.7927 118.707 20.208 117.713C20.4521 117.289 20.2038 116.03 20.2038 116.03C20.8889 116.433 21.8053 115.713 21.8053 115.713C21.9809 114.399 21.1202 113.003 20.6363 111.821C20.3793 111.204 20.0839 110.72 19.6428 110.211C19.4672 109.997 19.2403 109.568 19.0262 109.418C18.6793 109.149 18.9319 109.243 18.5294 109.337C17.6987 109.538 16.3541 111.08 15.883 109.564C15.8916 109.564 15.883 109.513 15.7717 109.551Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.8919 109.564C16.3629 111.08 17.7032 109.538 18.5383 109.337C18.9408 109.243 18.6839 109.149 19.035 109.418C19.2491 109.564 19.4761 109.997 19.6516 110.211C20.0927 110.72 20.3882 111.204 20.6451 111.821C21.129 113.003 21.9854 114.399 21.8141 115.713C21.8141 115.713 20.902 116.433 20.2126 116.03C20.2126 116.03 20.461 117.289 20.2169 117.713C19.8015 118.707 18.8209 118.908 17.8017 118.921C16.8639 118.921 16.0032 119.096 15.1724 118.638C14.3631 118.368 14.5901 116.737 14.5901 116.737C13.1769 117.443 13.2026 116.852 13.2026 116.852C13.1213 115.927 13.057 115.002 13.1512 114.073C13.2198 113.307 13.3782 112.022 13.6994 111.324C13.9135 110.866 14.453 110.557 14.7999 110.223C15.0954 109.941 15.378 109.675 15.7805 109.551C15.772 109.551 15.8447 109.508 15.8919 109.564Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" fill="white"/> -<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" fill="#DA3635"/> -<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M13 111.282L13.2826 109.92L14.8884 108.986L16.2117 109.415L26.8872 127.789L23.6755 129.657L13 111.282Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M23.6758 129.656L23.9413 128.26L25.5471 127.331L26.8874 127.789L27.5169 132.572L23.6758 129.656Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M25.8594 131.314L26.0478 130.941C26.1934 130.65 26.5017 130.47 26.8314 130.487L27.2468 130.509L27.5209 132.577L25.8594 131.314Z" fill="#DA3635" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M14.8887 108.986L25.5471 127.331L26.8874 127.789L16.2119 109.415L14.8887 108.986Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M23.941 128.261L13.2826 109.92L13 111.282L23.6755 129.657L23.941 128.261Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M13.6992 116.672C13.6992 116.672 15.0952 116.488 15.7632 115.876L15.2879 115.02C15.2879 115.02 14.0504 115.499 13.9262 115.675C13.802 115.855 13.6992 116.672 13.6992 116.672Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.292 115.02C15.292 115.02 15.292 114.245 15.5917 114C15.8958 113.761 15.5917 114.57 15.5917 114.57C15.5917 114.57 16.3069 113.953 16.5124 114.018C16.718 114.082 16.9406 114.75 16.8764 115.071C16.8122 115.392 15.8787 115.739 15.763 115.876L15.292 115.02Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M13.832 117.036C13.832 117.036 15.592 116.073 15.7633 115.876L15.288 115.02C15.288 115.02 14.2688 115.379 13.9733 115.628" fill="white"/> -<path d="M13.832 117.036C13.832 117.036 15.592 116.073 15.7633 115.876L15.288 115.02C15.288 115.02 14.2688 115.379 13.9733 115.628" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M20.6021 114.518C20.6021 114.518 18.8764 114.154 18.5381 113.73L19.4673 115.486C19.4673 115.486 20.0839 116.137 21.1245 116.03" fill="white"/> -<path d="M20.6021 114.518C20.6021 114.518 18.8764 114.154 18.5381 113.73L19.4673 115.486C19.4673 115.486 20.0839 116.137 21.1245 116.03" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M18.8633 111.967C18.8633 111.967 19.4499 114.044 20.0709 114.391Z" fill="white"/> -<path d="M18.8633 111.967C18.8633 111.967 19.4499 114.044 20.0709 114.391" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M153.972 87.8867C154.213 87.8867 154.373 88.0426 154.373 88.2995V94.2098C154.373 94.4499 154.217 94.61 153.972 94.61C153.728 94.61 153.56 94.4541 153.56 94.2098V88.2995C153.576 88.131 153.732 87.8867 153.972 87.8867Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M153.972 90.4776C156.125 90.4776 157.86 88.742 157.86 86.5894C157.86 84.4409 156.125 82.7012 153.972 82.7012C151.82 82.7012 150.084 84.4367 150.084 86.5894C150.084 88.742 151.824 90.4776 153.972 90.4776Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M153.972 90.4776C156.121 90.4776 157.86 88.7378 157.86 86.5894C157.86 84.4409 156.121 82.7012 153.972 82.7012C151.824 82.7012 150.084 84.4409 150.084 86.5894C150.084 88.7378 151.824 90.4776 153.972 90.4776Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M155.114 89.4248C152.919 89.4248 151.226 87.647 151.226 85.5366C151.226 84.6393 151.554 83.8431 151.95 83.2744C150.809 83.9316 150 85.2248 150 86.5939C150 88.7844 151.782 90.4821 153.888 90.4821C155.186 90.4821 156.323 89.8291 157.052 88.8603C156.479 89.2562 155.839 89.4248 155.114 89.4248Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M155.114 89.4248C152.919 89.4248 151.226 87.647 151.226 85.5366C151.226 84.6393 151.554 83.8431 151.95 83.2744C150.809 83.9316 150 85.2248 150 86.5939C150 88.7844 151.782 90.4821 153.888 90.4821C155.186 90.4821 156.323 89.8291 157.052 88.8603C156.479 89.2562 155.839 89.4248 155.114 89.4248Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M177.942 79.6309H178.186C178.515 79.6309 178.755 79.871 178.755 80.1995V89.8379C178.755 90.1665 178.51 90.4066 178.186 90.4066H177.942C177.613 90.4066 177.373 90.1665 177.373 89.8379V80.1995C177.386 79.871 177.63 79.6309 177.942 79.6309Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M178.027 83.6747C181.43 83.6747 184.177 80.9281 184.177 77.5244C184.177 74.1206 181.426 71.374 178.027 71.374C174.623 71.374 171.872 74.1206 171.872 77.5244C171.876 80.9239 174.623 83.6747 178.027 83.6747Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M178.027 83.6747C181.43 83.6747 184.177 80.9281 184.177 77.5244C184.177 74.1206 181.426 71.374 178.027 71.374C174.623 71.374 171.872 74.1206 171.872 77.5244C171.876 80.9239 174.623 83.6747 178.027 83.6747Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M179.892 82.053C176.489 82.053 173.742 79.3064 173.742 75.9026C173.742 74.5209 174.227 73.3119 174.951 72.2588C173.085 73.3119 171.876 75.3339 171.876 77.5961C171.876 80.9998 174.627 83.7464 178.031 83.7464C180.053 83.7464 181.834 82.7775 182.972 81.24C182.07 81.737 181.03 82.053 179.892 82.053Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M179.892 82.053C176.489 82.053 173.742 79.3064 173.742 75.9026C173.742 74.5209 174.227 73.3119 174.951 72.2588C173.085 73.3119 171.876 75.3339 171.876 77.5961C171.876 80.9998 174.627 83.7464 178.031 83.7464C180.053 83.7464 181.834 82.7775 182.972 81.24C182.07 81.737 181.03 82.053 179.892 82.053Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M167.33 73.1514C167.659 73.1514 167.899 73.3957 167.899 73.7201V81.1678C167.899 81.4964 167.655 81.7366 167.33 81.7366C167.002 81.7366 166.762 81.4964 166.762 81.1678V73.7201C166.779 73.3072 167.019 73.1514 167.33 73.1514Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M167.331 76.3827C170.065 76.3827 172.272 74.1753 172.272 71.4413C172.272 68.7074 170.065 66.5 167.331 66.5C164.597 66.5 162.39 68.7074 162.39 71.4413C162.39 74.1795 164.614 76.3827 167.331 76.3827Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M167.331 76.3827C170.065 76.3827 172.272 74.1753 172.272 71.4413C172.272 68.7074 170.065 66.5 167.331 66.5C164.597 66.5 162.39 68.7074 162.39 71.4413C162.39 74.1795 164.614 76.3827 167.331 76.3827Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M168.801 75.0179C166.054 75.0179 163.86 72.8274 163.86 70.0766C163.86 69.0234 164.188 67.9703 164.828 67.1572C163.375 68.0545 162.394 69.5921 162.394 71.3698C162.394 74.1164 164.588 76.3111 167.335 76.3111C168.957 76.3111 170.41 75.4981 171.307 74.2891C170.579 74.7609 169.681 75.0179 168.801 75.0179Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M168.801 75.0179C166.054 75.0179 163.86 72.8274 163.86 70.0766C163.86 69.0234 164.188 67.9703 164.828 67.1572C163.375 68.0545 162.394 69.5921 162.394 71.3698C162.394 74.1164 164.588 76.3111 167.335 76.3111C168.957 76.3111 170.41 75.4981 171.307 74.2891C170.579 74.7609 169.681 75.0179 168.801 75.0179Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M164.913 89.0957C165.313 89.0957 165.726 89.4243 165.726 89.9087V100.6C165.726 101 165.397 101.413 164.913 101.413C164.512 101.413 164.1 101.085 164.1 100.6V89.9087C164.1 89.4243 164.428 89.0957 164.913 89.0957Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M164.913 93.7085C168.801 93.7085 171.965 90.5617 171.965 86.6609C171.965 82.7601 168.805 79.6133 164.913 79.6133C161.025 79.6133 157.865 82.7601 157.865 86.6609C157.861 90.5659 161.025 93.7085 164.913 93.7085Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M164.913 93.7085C168.801 93.7085 171.965 90.5617 171.965 86.6609C171.965 82.7601 168.805 79.6133 164.913 79.6133C161.025 79.6133 157.865 82.7601 157.865 86.6609C157.861 90.5659 161.025 93.7085 164.913 93.7085Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M167.019 91.8468C163.131 91.8468 159.972 88.6874 159.972 84.7992C159.972 83.2616 160.456 81.8083 161.353 80.6709C159.247 81.8799 157.865 84.1463 157.865 86.7496C157.865 90.6378 161.025 93.7972 164.913 93.7972C167.263 93.7972 169.285 92.6598 170.583 90.9622C169.441 91.4466 168.317 91.8468 167.019 91.8468Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M167.019 91.8468C163.131 91.8468 159.972 88.6874 159.972 84.7992C159.972 83.2616 160.456 81.8083 161.353 80.6709C159.247 81.8799 157.865 84.1463 157.865 86.7496C157.865 90.6378 161.025 93.7972 164.913 93.7972C167.263 93.7972 169.285 92.6598 170.583 90.9622C169.441 91.4466 168.317 91.8468 167.019 91.8468Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M156.774 58.6325C160.172 60.583 160.186 63.7466 156.816 65.7041C153.445 67.6546 147.957 67.6546 144.558 65.7041C141.16 63.7535 141.146 60.5899 144.524 58.6325C147.901 56.675 153.383 56.6819 156.774 58.6325Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/> -<path d="M155.437 59.5395C157.837 60.9254 157.85 63.1704 155.468 64.5564C153.085 65.9423 149.207 65.9423 146.807 64.5564C144.407 63.1704 144.398 60.9254 146.78 59.5395C149.162 58.1535 153.037 58.1535 155.437 59.5395Z" fill="#EDEDED"/> -<path d="M159.036 165.114C160.534 165.977 160.54 167.378 159.054 168.245C157.568 169.108 155.148 169.108 153.649 168.245C152.151 167.381 152.145 165.981 153.634 165.114C155.12 164.247 157.54 164.247 159.036 165.114Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M158.092 165.66C159.062 166.222 159.069 167.131 158.104 167.692C157.14 168.254 155.568 168.254 154.595 167.692C153.625 167.131 153.618 166.222 154.583 165.66C155.55 165.102 157.119 165.102 158.092 165.66Z" fill="#EDEDED"/> -<path d="M143.649 127.091C142.853 127.585 143.033 128.849 143.649 129.206L145.007 129.99C145.297 130.158 145.657 130.158 145.947 129.99L150.726 127.231C151.254 126.926 151.409 125.69 150.726 125.352L145.849 127.918L143.649 127.091Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M154.876 124.323C153.747 123.67 152.401 123.67 151.272 124.323L150.109 124.994L149.59 124.695C149.038 124.375 148.354 124.375 147.799 124.695L143.649 127.091C143.032 127.448 143.032 128.339 143.649 128.696L145.007 129.48C145.297 129.648 145.657 129.648 145.947 129.48L150.726 126.721C151.253 126.416 151.253 125.656 150.726 125.351L150.567 125.26L151.501 124.723C152.486 124.155 153.661 124.155 154.647 124.723C155.633 125.29 156.222 126.309 156.222 127.448V153.438H156.679V127.448C156.676 126.142 156.005 124.976 154.876 124.323Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M154.968 166.633C154.968 167.082 155.6 167.445 156.378 167.445C157.156 167.445 157.788 167.082 157.788 166.633V165.821H154.965V166.633H154.968Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M156.381 166.633C157.159 166.633 157.79 166.27 157.79 165.822C157.79 165.373 157.159 165.01 156.381 165.01C155.602 165.01 154.971 165.373 154.971 165.822C154.971 166.27 155.602 166.633 156.381 166.633Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M155.529 165.74C155.529 166.011 155.911 166.228 156.381 166.228C156.851 166.228 157.232 166.008 157.232 165.74V147.519H155.529V165.74Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M156.381 148.007C156.851 148.007 157.232 147.788 157.232 147.519C157.232 147.249 156.851 147.03 156.381 147.03C155.91 147.03 155.529 147.249 155.529 147.519C155.529 147.788 155.91 148.007 156.381 148.007Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100 39.5L100 59.5" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/> -<path d="M114.253 30.5793L107.61 26.7204C107.56 26.689 107.516 26.6513 107.472 26.5947L114.115 30.4536C114.152 30.5101 114.203 30.5478 114.253 30.5793Z" fill="white" stroke="#47C562" stroke-linejoin="round"/> -<path d="M113.593 12.2902L120.236 16.149C120.085 16.061 119.877 16.0673 119.632 16.2119L112.989 12.353C113.234 12.2148 113.442 12.2022 113.593 12.2902Z" fill="white" stroke="#47C562" stroke-linejoin="round"/> -<path d="M117.012 17.7264L110.369 13.8613L112.99 12.3467L119.633 16.2118L117.012 17.7264Z" fill="white" stroke="#47C562" stroke-linejoin="round"/> -<path d="M111.694 27.0538L109.281 23.66L102.632 19.7949L105.051 23.195L107.471 26.595L114.114 30.4539L111.694 27.0538Z" fill="white" stroke="#47C562" stroke-linejoin="round"/> -<path d="M95.0971 43.5006L88.4541 39.6418C90.3835 40.7605 93.0483 40.6096 95.9895 38.9065C98.0635 37.7061 100.062 35.8584 101.772 33.5896C102.136 33.1056 102.545 32.7348 102.959 32.496C103.525 32.1692 104.084 32.1001 104.505 32.3452L111.148 36.204C110.727 35.9589 110.168 36.028 109.602 36.3549C109.194 36.5937 108.779 36.9645 108.415 37.4484C106.711 39.7172 104.706 41.5649 102.633 42.7653C99.6913 44.4622 97.0202 44.6193 95.0971 43.5006Z" fill="white" stroke="#47C562" stroke-linejoin="round"/> -<path d="M110.098 17.6704L103.455 13.8115C104.448 14.3897 105.24 15.301 105.78 16.514L103.367 17.9092C102.714 18.2863 102.305 19.3421 102.638 19.8009L109.281 23.6597C108.948 23.201 109.357 22.1451 110.01 21.768L112.423 20.3728C111.889 19.1599 111.091 18.2486 110.098 17.6704Z" fill="white" stroke="#47C562" stroke-linejoin="round"/> -<path d="M102.55 13.403C106.522 11.109 110.28 10.7382 113.121 12.3597C115 13.4281 116.326 15.2758 117.011 17.7269L119.632 16.2123C120.286 15.8352 120.7 16.4134 120.374 17.2492L117.979 23.4272L115.591 29.5988C115.428 30.0199 115.138 30.353 114.856 30.5164C114.573 30.6798 114.284 30.6861 114.114 30.4535L111.694 27.0535L109.275 23.6534C108.942 23.1946 109.35 22.1388 110.004 21.7617L112.417 20.3665C110.833 16.7967 107.012 15.8226 102.563 18.3931C102.368 18.5062 102.173 18.6256 101.978 18.745C96.6047 22.1765 92.2682 29.6868 92.0043 36.0218C91.6963 43.2242 96.5859 46.2471 102.626 42.7591C104.699 41.5587 106.698 39.711 108.408 37.4422C108.772 36.9583 109.181 36.5875 109.595 36.3486C110.186 36.0093 110.764 35.9464 111.192 36.2292C112.116 36.8389 111.921 38.7683 110.789 40.2703C108.389 43.4693 105.567 46.0712 102.644 47.7555C98.6724 50.0494 94.9204 50.4139 92.0734 48.7988C89.2264 47.1773 87.6552 43.7647 87.6427 39.2019C87.6301 34.6392 89.1761 29.4291 92.0043 24.5333C94.8324 19.6375 98.5719 15.6781 102.55 13.3841V13.403Z" fill="#47C562" stroke="#47C562" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M106.478 8.49447C103.638 6.873 99.8795 7.2438 95.9075 9.53774C91.9356 11.8317 88.1898 15.7911 85.3617 20.6869C82.5336 25.5827 80.9875 30.7928 81.0001 35.3555C81.0126 39.9183 82.5838 43.3309 85.4308 44.9524L92.0738 48.8112C89.2268 47.1897 87.6556 43.7771 87.6431 39.2144C87.6305 34.6516 89.1765 29.4416 92.0047 24.5457C94.8328 19.6499 98.5723 15.6905 102.544 13.3966C106.516 11.1026 110.274 10.7318 113.115 12.3533L106.472 8.49447H106.478Z" fill="white" stroke="#47C562" stroke-linejoin="round"/> -<path d="M151.509 54.6992L148.006 52.6622C147.817 52.5529 147.663 52.384 147.554 52.1505C147.444 51.917 147.38 51.6139 147.38 51.2661C147.38 50.9183 147.435 50.5606 147.549 50.188C147.663 49.8253 147.822 49.4676 148.016 49.1297C148.215 48.7919 148.448 48.4789 148.716 48.1907C148.99 47.9025 149.283 47.664 149.606 47.4802C149.929 47.2964 150.212 47.197 150.48 47.1722C150.753 47.1473 150.987 47.1871 151.191 47.2964L154.693 49.3334C154.49 49.2291 154.256 49.1844 153.983 49.2092C153.715 49.234 153.421 49.3384 153.108 49.5172C152.795 49.6961 152.492 49.9396 152.219 50.2277C151.951 50.5159 151.717 50.8289 151.519 51.1667C151.325 51.5046 151.166 51.8623 151.052 52.225C150.937 52.5927 150.883 52.9504 150.883 53.3031C150.883 53.6559 150.942 53.949 151.056 54.1875C151.171 54.426 151.32 54.5899 151.509 54.6992V54.6992Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/> -<path d="M151.231 47.3158L154.734 49.3528C154.734 49.3528 154.714 49.3429 154.699 49.3329L151.196 47.2959C151.196 47.2959 151.216 47.3058 151.231 47.3158Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/> -<path d="M154.699 49.3286C154.902 49.4379 155.061 49.6068 155.175 49.8403C155.29 50.0788 155.349 50.367 155.349 50.7197C155.349 51.0725 155.295 51.4302 155.18 51.8029C155.066 52.1755 154.907 52.5332 154.708 52.8711C154.505 53.2139 154.271 53.5269 153.998 53.8051C153.73 54.0883 153.437 54.3168 153.124 54.5007C152.811 54.6845 152.507 54.7938 152.234 54.8236C151.966 54.8534 151.727 54.8137 151.529 54.7044C151.33 54.5951 151.171 54.4212 151.057 54.1827C150.942 53.9442 150.883 53.6461 150.883 53.2983C150.883 52.9505 150.937 52.5928 151.052 52.2202C151.166 51.8575 151.325 51.4998 151.519 51.1619C151.717 50.8241 151.951 50.5111 152.219 50.2229C152.493 49.9347 152.786 49.6963 153.109 49.5124C153.432 49.3286 153.715 49.2292 153.983 49.2044C154.256 49.1796 154.49 49.2193 154.694 49.3286H154.699Z" fill="#706F6F" stroke="#706F6F" stroke-miterlimit="10"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M154.748 35.9638L151.25 33.9297C151.54 34.0998 151.683 34.4565 151.683 34.995C151.683 35.4819 151.598 35.9539 151.419 36.411C151.24 36.8731 151.022 37.3202 150.749 37.7624C150.48 38.2046 150.187 38.6418 149.874 39.0691C149.566 39.4964 149.273 39.9236 149 40.3459C148.731 40.7732 148.508 41.1906 148.329 41.6179C148.15 42.0402 148.066 42.4674 148.066 42.8947V42.8947C148.066 42.9543 148.066 43.009 148.071 43.0636C148.073 43.091 148.077 43.1183 148.081 43.1456C148.084 43.1729 148.088 43.2003 148.091 43.2276L148.379 45.4137L151.881 47.4507L151.593 45.2646C151.591 45.2373 151.587 45.21 151.583 45.1827C151.58 45.1553 151.576 45.128 151.573 45.1007C151.573 45.0733 151.572 45.0448 151.571 45.0162C151.57 44.9876 151.568 44.9591 151.568 44.9318C151.568 44.5045 151.653 44.0772 151.832 43.6549C152.011 43.2326 152.234 42.8103 152.502 42.383C152.776 41.9607 153.064 41.5334 153.377 41.1061C153.69 40.6788 153.983 40.2416 154.251 39.7994C154.525 39.3572 154.743 38.9101 154.922 38.448C155.101 37.9909 155.185 37.5239 155.185 37.032C155.185 36.4905 155.041 36.1328 154.748 35.9638ZM149.711 39.0244L149.651 38.9896C149.613 38.9594 149.58 38.9218 149.547 38.8753L146.044 36.8383C146.094 36.9029 146.148 36.9576 146.208 36.9923L149.651 38.9896C149.669 39.0046 149.689 39.0178 149.711 39.0294V39.0244ZM148.542 38.2865C148.737 38.3994 148.941 38.1557 148.795 37.9843L148.52 37.6594C148.505 37.6421 148.488 37.6274 148.468 37.6159L145.999 36.1777C145.805 36.0647 145.6 36.3078 145.745 36.4794L146.021 36.8068C146.036 36.8243 146.054 36.8392 146.074 36.8507L148.542 38.2865Z" fill="white"/> -<path d="M151.25 33.9297L151.502 33.4975C151.263 33.3588 150.958 33.4394 150.819 33.6775C150.68 33.9156 150.759 34.2213 150.997 34.3609L151.25 33.9297ZM154.748 35.9638L154.497 36.3961L154.498 36.3971L154.748 35.9638ZM151.419 36.411L150.954 36.2288L150.953 36.2305L151.419 36.411ZM150.749 37.7624L150.323 37.4995L150.321 37.503L150.749 37.7624ZM149.874 39.0691L149.471 38.7736L149.469 38.7767L149.874 39.0691ZM149 40.3459L148.58 40.0743L148.576 40.0801L149 40.3459ZM148.329 41.6179L148.789 41.8128L148.79 41.8109L148.329 41.6179ZM148.071 43.0636L147.573 43.1089V43.1089L148.071 43.0636ZM148.081 43.1456L148.576 43.0781L148.576 43.0781L148.081 43.1456ZM148.091 43.2276L147.593 43.2729C147.593 43.2796 147.594 43.2863 147.595 43.2929L148.091 43.2276ZM148.379 45.4137L147.883 45.479C147.903 45.6326 147.993 45.7681 148.127 45.8459L148.379 45.4137ZM151.881 47.4507L151.63 47.8829C151.795 47.9788 152 47.9726 152.159 47.8669C152.317 47.7612 152.402 47.5744 152.377 47.3854L151.881 47.4507ZM151.593 45.2646L151.095 45.3099C151.096 45.3166 151.097 45.3233 151.098 45.33L151.593 45.2646ZM151.583 45.1827L152.079 45.1151V45.1151L151.583 45.1827ZM151.573 45.1007H151.073C151.073 45.1158 151.074 45.1309 151.075 45.1459L151.573 45.1007ZM151.832 43.6549L152.292 43.8499H152.292L151.832 43.6549ZM152.502 42.383L152.083 42.1113L152.079 42.1171L152.502 42.383ZM153.377 41.1061L153.78 41.4016V41.4016L153.377 41.1061ZM154.251 39.7994L153.826 39.5366L153.824 39.5401L154.251 39.7994ZM154.922 38.448L154.456 38.2658L154.456 38.2675L154.922 38.448ZM149.711 39.0244H150.211C150.211 38.8461 150.116 38.6814 149.961 38.5919L149.711 39.0244ZM149.547 38.8753L149.953 38.5847C149.912 38.527 149.859 38.4788 149.798 38.4431L149.547 38.8753ZM146.044 36.8383L146.295 36.4061C146.089 36.286 145.826 36.3288 145.668 36.5083C145.511 36.6878 145.502 36.9538 145.648 37.1432L146.044 36.8383ZM146.208 36.9923L145.956 37.4242L145.957 37.4248L146.208 36.9923ZM149.711 39.0294L149.473 39.4696C149.628 39.553 149.816 39.5489 149.967 39.4586C150.118 39.3684 150.211 39.2054 150.211 39.0294H149.711ZM148.795 37.9843L149.177 37.661L149.177 37.661L148.795 37.9843ZM148.542 38.2865L148.794 37.8542L148.794 37.8542L148.542 38.2865ZM148.52 37.6594L148.139 37.9827L148.139 37.9827L148.52 37.6594ZM148.468 37.6159L148.217 38.048L148.217 38.048L148.468 37.6159ZM145.999 36.1777L145.747 36.6097H145.747L145.999 36.1777ZM145.745 36.4794L146.127 36.1571L146.127 36.1571L145.745 36.4794ZM146.021 36.8068L145.639 37.1291L145.639 37.1291L146.021 36.8068ZM146.074 36.8507L146.325 36.4185L146.325 36.4185L146.074 36.8507ZM150.999 34.3619L154.497 36.3961L154.999 35.5316L151.502 33.4975L150.999 34.3619ZM152.183 34.995C152.183 34.3956 152.025 33.8048 151.503 33.4985L150.997 34.3609C151.055 34.3948 151.183 34.5174 151.183 34.995H152.183ZM151.885 36.5932C152.088 36.0754 152.183 35.5413 152.183 34.995H151.183C151.183 35.4225 151.109 35.8325 150.954 36.2288L151.885 36.5932ZM151.174 38.0252C151.464 37.5557 151.696 37.0808 151.886 36.5915L150.953 36.2305C150.785 36.6653 150.58 37.0847 150.323 37.4995L151.174 38.0252ZM150.278 39.3646C150.599 38.9262 150.9 38.477 151.176 38.0218L150.321 37.503C150.061 37.9322 149.776 38.3574 149.471 38.7736L150.278 39.3646ZM149.42 40.6176C149.688 40.203 149.976 39.7826 150.28 39.3615L149.469 38.7767C149.156 39.2101 148.858 39.6443 148.58 40.0743L149.42 40.6176ZM148.79 41.8109C148.956 41.4138 149.166 41.0209 149.423 40.6118L148.576 40.0801C148.297 40.5256 148.059 40.9674 147.868 41.4248L148.79 41.8109ZM148.566 42.8947C148.566 42.5351 148.636 42.1741 148.789 41.8128L147.869 41.4229C147.664 41.9062 147.566 42.3998 147.566 42.8947H148.566ZM148.566 42.8947V42.8947H147.566V42.8947H148.566ZM148.569 43.0184C148.566 42.9902 148.566 42.9586 148.566 42.8947H147.566C147.566 42.9501 147.565 43.0278 147.573 43.1089L148.569 43.0184ZM148.576 43.0781C148.572 43.0488 148.57 43.0327 148.569 43.0184L147.573 43.1089C147.576 43.1493 147.582 43.1878 147.585 43.2132L148.576 43.0781ZM148.588 43.1823C148.585 43.142 148.579 43.1035 148.576 43.0781L147.585 43.2132C147.589 43.2424 147.591 43.2586 147.593 43.2729L148.588 43.1823ZM148.874 45.3483L148.586 43.1623L147.595 43.2929L147.883 45.479L148.874 45.3483ZM152.133 47.0185L148.63 44.9815L148.127 45.8459L151.63 47.8829L152.133 47.0185ZM151.098 45.33L151.386 47.5161L152.377 47.3854L152.089 45.1993L151.098 45.33ZM151.088 45.2502C151.092 45.2794 151.094 45.2956 151.095 45.3099L152.091 45.2194C152.087 45.179 152.082 45.1405 152.079 45.1151L151.088 45.2502ZM151.075 45.1459C151.079 45.1863 151.084 45.2248 151.088 45.2502L152.079 45.1151C152.075 45.0859 152.073 45.0697 152.071 45.0554L151.075 45.1459ZM151.071 45.0379C151.073 45.0687 151.073 45.0861 151.073 45.1007H152.073C152.073 45.0606 152.072 45.0209 152.07 44.9945L151.071 45.0379ZM151.068 44.9318C151.068 44.9719 151.07 45.0115 151.071 45.0379L152.07 44.9945C152.069 44.9637 152.068 44.9463 152.068 44.9318H151.068ZM151.371 43.4599C151.167 43.9433 151.068 44.4368 151.068 44.9318H152.068C152.068 44.5721 152.139 44.2111 152.292 43.8499L151.371 43.4599ZM152.079 42.1171C151.798 42.564 151.562 43.01 151.371 43.4599L152.292 43.8499C152.459 43.4551 152.67 43.0565 152.926 42.6489L152.079 42.1171ZM152.974 40.8106C152.653 41.248 152.359 41.6837 152.083 42.1114L152.922 42.6546C153.192 42.2376 153.475 41.8188 153.78 41.4016L152.974 40.8106ZM153.824 39.5401C153.563 39.9692 153.278 40.3944 152.974 40.8106L153.78 41.4016C154.101 40.9633 154.403 40.514 154.679 40.0588L153.824 39.5401ZM154.456 38.2675C154.287 38.7023 154.082 39.1218 153.826 39.5366L154.677 40.0623C154.967 39.5927 155.199 39.1178 155.388 38.6285L154.456 38.2675ZM154.685 37.032C154.685 37.4642 154.612 37.8692 154.456 38.2658L155.388 38.6302C155.59 38.1127 155.685 37.5836 155.685 37.032H154.685ZM154.498 36.3971C154.556 36.4305 154.685 36.5517 154.685 37.032H155.685C155.685 36.4293 155.526 35.8351 154.998 35.5306L154.498 36.3971ZM149.4 39.4221L149.46 39.4569L149.961 38.5919L149.901 38.5571L149.4 39.4221ZM149.964 38.5997C149.973 38.6069 149.97 38.6074 149.953 38.5847L149.14 39.166C149.19 39.2363 149.253 39.3119 149.338 39.3796L149.964 38.5997ZM149.798 38.4431L146.295 36.4061L145.793 37.2705L149.295 39.3076L149.798 38.4431ZM145.648 37.1432C145.718 37.235 145.819 37.3444 145.956 37.4242L146.46 36.5604C146.47 36.5666 146.473 36.5699 146.467 36.5648C146.462 36.5599 146.453 36.5501 146.44 36.5335L145.648 37.1432ZM145.957 37.4248L149.4 39.4221L149.901 38.5571L146.459 36.5598L145.957 37.4248ZM149.948 38.5891C149.953 38.5923 149.959 38.596 149.964 38.5997L149.338 39.3796C149.38 39.4132 149.425 39.4434 149.473 39.4696L149.948 38.5891ZM149.211 39.0244V39.0294H150.211V39.0244H149.211ZM148.414 38.3075C148.196 38.0504 148.502 37.6848 148.794 37.8542L148.291 38.7187C148.971 39.114 149.685 38.2609 149.177 37.661L148.414 38.3075ZM148.139 37.9827L148.414 38.3075L149.177 37.661L148.902 37.3362L148.139 37.9827ZM148.217 38.048C148.187 38.0308 148.161 38.0087 148.139 37.9827L148.902 37.3362C148.85 37.2754 148.789 37.2239 148.72 37.1838L148.217 38.048ZM145.747 36.6097L148.217 38.048L148.72 37.1838L146.25 35.7456L145.747 36.6097ZM146.127 36.1571C146.344 36.4145 146.038 36.7792 145.747 36.6097L146.25 35.7456C145.571 35.3502 144.856 36.2012 145.363 36.8018L146.127 36.1571ZM146.403 36.4844L146.127 36.1571L145.363 36.8018L145.639 37.1291L146.403 36.4844ZM146.325 36.4185C146.355 36.4358 146.381 36.4581 146.403 36.4844L145.639 37.1291C145.691 37.1905 145.753 37.2426 145.822 37.283L146.325 36.4185ZM148.794 37.8542L146.325 36.4185L145.822 37.283L148.291 38.7187L148.794 37.8542Z" fill="#706F6F"/> -<path d="M154.139 29.7805C154.141 29.7823 154.143 29.7838 154.145 29.785L157.644 31.8202C157.575 31.7804 157.505 31.7457 157.436 31.7159C156.989 31.5221 156.442 31.4873 155.801 31.6165C155.165 31.7457 154.445 32.0338 153.65 32.4959C153.084 32.8238 152.557 33.1865 152.07 33.574C151.583 33.9665 151.131 34.3839 150.709 34.8261C150.286 35.2682 149.894 35.7303 149.526 36.2023C149.199 36.6267 148.896 37.051 148.612 37.4789C148.553 37.5678 148.435 37.596 148.343 37.5423L145.181 35.7018C145.083 35.6443 145.052 35.5158 145.115 35.4206C145.396 34.9983 145.696 34.5793 146.019 34.1603C146.386 33.6833 146.784 33.2262 147.201 32.7841C147.623 32.3419 148.08 31.9245 148.562 31.532C149.049 31.1395 149.576 30.7768 150.142 30.4539C150.937 29.9918 151.658 29.7037 152.294 29.5745C152.934 29.4503 153.476 29.4801 153.928 29.6739C154.002 29.7032 154.07 29.7374 154.134 29.7764C154.136 29.7776 154.138 29.779 154.139 29.7805V29.7805Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/> -<path d="M158.469 32.7517C158.469 32.7498 158.472 32.7492 158.473 32.7509C158.714 33.2468 158.837 33.8854 158.837 34.657C158.837 35.4321 158.753 36.1028 158.574 36.7338C158.4 37.3698 158.171 37.9709 157.898 38.5274C157.625 39.0838 157.327 39.6006 156.999 40.0775C156.676 40.5545 156.368 41.0016 156.075 41.4239C155.782 41.8463 155.528 42.2437 155.315 42.6064C155.101 42.9741 154.967 43.3268 154.917 43.6547L154.584 45.8059C154.575 45.8657 154.539 45.9181 154.486 45.9484L152.141 47.3055C152.017 47.3769 151.861 47.2999 151.842 47.1586L151.593 45.2695L151.573 45.1055C151.573 45.0509 151.568 44.9912 151.568 44.9366C151.568 44.5093 151.653 44.082 151.832 43.6597C152.011 43.2374 152.234 42.8151 152.502 42.3878C152.776 41.9655 153.064 41.5382 153.377 41.1109C153.69 40.6837 153.983 40.2464 154.251 39.8043C154.525 39.3621 154.743 38.9149 154.922 38.4529C155.101 37.9958 155.185 37.5288 155.185 37.0369C155.185 36.4556 155.016 36.0879 154.679 35.9339C154.346 35.7849 153.884 35.8743 153.302 36.2121C152.855 36.4705 152.483 36.7388 152.18 37.022C151.881 37.3052 151.623 37.5685 151.404 37.8269C151.186 38.0852 151.002 38.3088 150.843 38.5125C150.684 38.7112 150.525 38.8603 150.361 38.9497C149.998 39.1584 149.725 39.1385 149.546 38.8801L148.599 37.7565C148.542 37.6891 148.536 37.5924 148.584 37.5189C148.874 37.0791 149.185 36.6431 149.521 36.2072C149.889 35.7302 150.287 35.2731 150.704 34.8309C151.126 34.3887 151.583 33.9714 152.065 33.5789C152.552 33.1864 153.079 32.8237 153.645 32.5008C154.44 32.0387 155.161 31.7505 155.796 31.6214C156.437 31.4972 156.979 31.527 157.431 31.7207C157.881 31.9136 158.223 32.2591 158.466 32.7524C158.467 32.754 158.469 32.7535 158.469 32.7517V32.7517Z" fill="#706F6F" stroke="#706F6F" stroke-miterlimit="10"/> -<path d="M151 54.5L151 62.5" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/> -<path d="M183.024 103.673C182.67 103.906 182.374 104.226 182.083 104.541C181.472 105.177 180.797 105.875 180.356 106.647C179.769 107.71 179.672 109.5 179.754 110.698C179.803 111.446 180.254 112.096 180.72 112.668C181.603 113.755 182.995 113.464 184.048 112.62C185.004 111.863 185.984 110.883 186.445 109.791C186.896 108.738 187.459 107.627 187.561 106.453C187.673 105.24 187.231 103.6 186.033 103.037C185.285 102.693 183.927 102.731 183.364 103.367" fill="white"/> -<path d="M183.024 103.673C182.67 103.906 182.374 104.226 182.083 104.541C181.472 105.177 180.797 105.875 180.356 106.647C179.769 107.71 179.672 109.5 179.754 110.698C179.803 111.446 180.254 112.096 180.72 112.668C181.603 113.755 182.995 113.464 184.048 112.62C185.004 111.863 185.984 110.883 186.445 109.791C186.896 108.738 187.459 107.627 187.561 106.453C187.673 105.24 187.231 103.6 186.033 103.037C185.285 102.693 183.927 102.731 183.364 103.367" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M183.024 103.673C182.67 103.906 182.374 104.226 182.083 104.541C181.472 105.177 180.797 105.875 180.356 106.647C179.769 107.71 179.672 109.5 179.754 110.698C179.803 111.446 180.254 112.096 180.72 112.668C181.603 113.755 182.995 113.464 184.048 112.62C185.004 111.863 185.984 110.883 186.445 109.791C186.896 108.738 187.459 107.627 187.561 106.453C187.673 105.24 187.231 103.6 186.033 103.037C185.285 102.693 183.927 102.731 183.364 103.367" fill="white"/> -<path d="M183.024 103.673C182.67 103.906 182.374 104.226 182.083 104.541C181.472 105.177 180.797 105.875 180.356 106.647C179.769 107.71 179.672 109.5 179.754 110.698C179.803 111.446 180.254 112.096 180.72 112.668C181.603 113.755 182.995 113.464 184.048 112.62C185.004 111.863 185.984 110.883 186.445 109.791C186.896 108.738 187.459 107.627 187.561 106.453C187.673 105.24 187.231 103.6 186.033 103.037C185.285 102.693 183.927 102.731 183.364 103.367" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M171.064 110.771C170.317 110.932 169.521 111.334 168.973 111.849C168.337 112.436 167.92 113.168 167.444 113.843C166.954 114.517 166.513 115.201 166.304 116.021C165.984 117.293 165.741 118.675 166.522 119.85C167.279 121.014 168.516 121.465 169.841 120.951C171.054 120.476 172.155 119.447 172.743 118.297C173.194 117.404 173.65 116.73 173.931 115.556C174.455 113.367 174.63 111.446 172.044 110.796" fill="white"/> -<path d="M171.064 110.771C170.317 110.932 169.521 111.334 168.973 111.849C168.337 112.436 167.92 113.168 167.444 113.843C166.954 114.517 166.513 115.201 166.304 116.021C165.984 117.293 165.741 118.675 166.522 119.85C167.279 121.014 168.516 121.465 169.841 120.951C171.054 120.476 172.155 119.447 172.743 118.297C173.194 117.404 173.65 116.73 173.931 115.556C174.455 113.367 174.63 111.446 172.044 110.796" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M171.064 110.771C170.317 110.932 169.521 111.334 168.973 111.849C168.337 112.436 167.92 113.168 167.444 113.843C166.954 114.517 166.513 115.201 166.304 116.021C165.984 117.293 165.741 118.675 166.522 119.85C167.279 121.014 168.516 121.465 169.841 120.951C171.054 120.476 172.155 119.447 172.743 118.297C173.194 117.404 173.65 116.73 173.931 115.556C174.455 113.367 174.63 111.446 172.044 110.796" fill="white"/> -<path d="M171.064 110.771C170.317 110.932 169.521 111.334 168.973 111.849C168.337 112.436 167.92 113.168 167.444 113.843C166.954 114.517 166.513 115.201 166.304 116.021C165.984 117.293 165.741 118.675 166.522 119.85C167.279 121.014 168.516 121.465 169.841 120.951C171.054 120.476 172.155 119.447 172.743 118.297C173.194 117.404 173.65 116.73 173.931 115.556C174.455 113.367 174.63 111.446 172.044 110.796" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M176.489 114.871C176.222 116.011 178.852 115.497 179.046 114.711C179.119 114.405 178.997 114.27 178.716 114.27C178.289 114.27 178.473 114.599 178.216 114.832C177.663 115.264 176.916 114.629 176.489 114.871Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M179.327 104.468C179.938 104.565 180.196 105.298 180.501 105.764C180.807 106.215 181.151 106.647 181.515 107.05C181.845 107.404 182.2 107.782 182.631 108.03C182.976 108.214 183.354 108.238 183.733 108.238C183.951 108.238 183.951 107.894 183.733 107.894C183.218 107.894 182.85 107.821 182.447 107.477C182.005 107.122 181.627 106.681 181.273 106.23C180.894 105.754 180.598 105.264 180.283 104.75C180.074 104.42 179.807 104.187 179.414 104.124C179.191 104.104 179.109 104.444 179.327 104.468Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M172.116 108.224C171.874 109.534 171.442 110.829 171.063 112.115C170.879 112.727 170.622 113.338 170.452 113.964C170.282 114.614 170.234 115.274 170.011 115.895C170.059 115.856 170.122 115.808 170.171 115.759H170.122C170.171 115.856 170.195 115.953 170.243 116.055C170.258 116.041 170.292 116.016 170.307 115.992C170.467 115.832 170.219 115.589 170.064 115.749C170.049 115.764 170.025 115.798 170.001 115.812C169.889 115.924 169.986 116.094 170.122 116.108H170.171C170.243 116.123 170.306 116.045 170.331 115.973C170.549 115.361 170.603 114.726 170.748 114.1C170.918 113.45 171.19 112.828 171.374 112.178C171.752 110.907 172.194 109.607 172.427 108.287C172.495 108.103 172.155 108.006 172.116 108.224Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M170.243 106.943C170.074 107.724 171.393 108.034 172.078 107.971C172.922 107.898 172.946 107.321 172.349 106.797C171.956 106.453 170.903 106.234 170.476 106.428" fill="white"/> -<path d="M170.243 106.943C170.074 107.724 171.393 108.034 172.078 107.971C172.922 107.898 172.946 107.321 172.349 106.797C171.956 106.453 170.903 106.234 170.476 106.428" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M170.243 106.943C170.074 107.724 171.393 108.034 172.078 107.971C172.922 107.898 172.946 107.321 172.349 106.797C171.956 106.453 170.903 106.234 170.476 106.428" fill="white"/> -<path d="M170.243 106.943C170.074 107.724 171.393 108.034 172.078 107.971C172.922 107.898 172.946 107.321 172.349 106.797C171.956 106.453 170.903 106.234 170.476 106.428" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M172.029 108.045C172.505 108.656 172.898 109.364 173.509 109.854C174.266 110.441 175.1 110.932 175.872 111.494C176.056 111.63 176.226 111.334 176.042 111.189C175.319 110.665 174.562 110.199 173.849 109.67C173.198 109.194 172.796 108.496 172.32 107.86C172.204 107.686 171.898 107.86 172.029 108.045Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M179.143 102.818C179.157 103.318 179.191 103.808 179.191 104.298C179.191 104.516 179.536 104.516 179.536 104.298C179.521 103.798 179.497 103.308 179.487 102.818C179.487 102.61 179.143 102.595 179.143 102.818Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M179.118 104.589C179.206 104.943 178.885 105.4 178.774 105.729C178.58 106.307 178.454 106.904 178.332 107.505C178.124 108.607 177.857 109.694 177.488 110.737C177.415 110.945 177.745 111.042 177.818 110.834C178.235 109.684 178.492 108.495 178.725 107.297C178.837 106.719 178.968 106.132 179.191 105.594C179.327 105.249 179.545 104.885 179.448 104.492C179.414 104.274 179.07 104.371 179.118 104.589Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M179.07 104.249C178.827 104.827 178.104 105.157 177.59 105.438C176.891 105.831 176.217 106.258 175.508 106.651C175.324 106.763 175.494 107.054 175.678 106.957C176.459 106.515 177.245 106.05 178.017 105.598C178.541 105.293 179.142 104.948 179.375 104.351C179.497 104.128 179.157 104.041 179.07 104.249Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M177.759 100.946C178.162 101.557 179.069 101.596 179.608 102.047C179.778 102.183 180.025 101.95 179.851 101.805C179.593 101.586 179.288 101.475 178.992 101.329C178.696 101.193 178.259 101.048 178.06 100.766C177.944 100.592 177.638 100.762 177.759 100.946Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M181.442 102.925C181.481 103.367 181.37 103.808 181.37 104.235C181.355 104.454 181.7 104.454 181.714 104.235C181.729 103.794 181.811 103.367 181.787 102.925C181.772 102.707 181.433 102.697 181.442 102.925Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M177.478 110.708C177.502 110.305 177.871 109.752 178.21 110.291C178.371 110.534 178.089 111.601 177.939 111.834C177.521 112.508 177.376 111.994 177.352 111.431C177.332 110.834 177.357 111.446 177.478 110.708Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M176.023 110.32C175.935 111.494 176.231 112.901 176.377 114.066C176.45 114.653 176.391 115.289 177.037 115.23C177.464 115.182 178.541 114.925 178.507 114.41C177.93 114.396 177.648 114.425 177.551 113.848C177.478 113.406 177.527 112.916 177.503 112.479C177.439 111.378 177.391 110.116 176.644 109.224" fill="white"/> -<path d="M176.023 110.32C175.935 111.494 176.231 112.901 176.377 114.066C176.45 114.653 176.391 115.289 177.037 115.23C177.464 115.182 178.541 114.925 178.507 114.41C177.93 114.396 177.648 114.425 177.551 113.848C177.478 113.406 177.527 112.916 177.503 112.479C177.439 111.378 177.391 110.116 176.644 109.224" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M176.023 110.32C175.935 111.494 176.231 112.901 176.377 114.066C176.45 114.653 176.391 115.289 177.037 115.23C177.464 115.182 178.541 114.925 178.507 114.41C177.93 114.396 177.648 114.425 177.551 113.848C177.478 113.406 177.527 112.916 177.503 112.479C177.439 111.378 177.391 110.116 176.644 109.224" fill="white"/> -<path d="M176.023 110.32C175.935 111.494 176.231 112.901 176.377 114.066C176.45 114.653 176.391 115.289 177.037 115.23C177.464 115.182 178.541 114.925 178.507 114.41C177.93 114.396 177.648 114.425 177.551 113.848C177.478 113.406 177.527 112.916 177.503 112.479C177.439 111.378 177.391 110.116 176.644 109.224" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M175.251 103.624C174.212 104.468 175.187 106.035 175.644 106.938C175.949 107.563 176.318 108.16 176.536 108.81C176.73 109.388 177.099 109.999 176.367 110.203C175.226 110.533 173.378 110.276 173.271 108.893C173.208 108.087 173.222 107.646 172.538 107.132C171.951 106.68 170.923 106.578 170.432 106.04C169.748 105.283 170.36 104.366 170.995 103.9C171.413 103.594 171.447 103.347 171.728 102.944C172.048 102.493 172.354 102.726 172.82 102.993" fill="white"/> -<path d="M175.251 103.624C174.212 104.468 175.187 106.035 175.644 106.938C175.949 107.563 176.318 108.16 176.536 108.81C176.73 109.388 177.099 109.999 176.367 110.203C175.226 110.533 173.378 110.276 173.271 108.893C173.208 108.087 173.222 107.646 172.538 107.132C171.951 106.68 170.923 106.578 170.432 106.04C169.748 105.283 170.36 104.366 170.995 103.9C171.413 103.594 171.447 103.347 171.728 102.944C172.048 102.493 172.354 102.726 172.82 102.993" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M175.251 103.624C174.212 104.468 175.187 106.035 175.644 106.938C175.949 107.563 176.318 108.16 176.536 108.81C176.73 109.388 177.099 109.999 176.367 110.203C175.226 110.533 173.378 110.276 173.271 108.893C173.208 108.087 173.222 107.646 172.538 107.132C171.951 106.68 170.923 106.578 170.432 106.04C169.748 105.283 170.36 104.366 170.995 103.9C171.413 103.594 171.447 103.347 171.728 102.944C172.048 102.493 172.354 102.726 172.82 102.993" fill="white"/> -<path d="M175.251 103.624C174.212 104.468 175.187 106.035 175.644 106.938C175.949 107.563 176.318 108.16 176.536 108.81C176.73 109.388 177.099 109.999 176.367 110.203C175.226 110.533 173.378 110.276 173.271 108.893C173.208 108.087 173.222 107.646 172.538 107.132C171.951 106.68 170.923 106.578 170.432 106.04C169.748 105.283 170.36 104.366 170.995 103.9C171.413 103.594 171.447 103.347 171.728 102.944C172.048 102.493 172.354 102.726 172.82 102.993" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M178.419 101.839C178.919 102.12 179.705 101.999 180.243 101.912C180.831 101.824 181.845 102.106 181.689 102.95C181.238 103.037 180.991 102.644 180.564 102.644C180.219 102.644 179.768 102.804 179.399 102.853C179.103 102.892 178.385 103.11 178.113 102.95C177.745 102.756 178.235 101.776 178.419 101.839Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M174.945 98.3982C176.11 97.9809 176.6 99.3637 177.085 100.101C177.439 100.601 177.919 101.018 178.259 101.533C178.725 102.217 178.244 102.44 177.856 103.051C177.221 102.61 176.716 101.484 176.459 100.761C175.983 101.285 175.906 102.45 175.566 103.134C175.26 103.735 175.003 103.609 174.377 103.464C173.853 103.352 173.14 103.046 172.592 103.012C170.84 102.877 171.811 100.674 172.592 99.9169C173.106 99.4171 173.654 99.0338 174.271 98.6699C174.639 98.471 174.503 98.5729 174.945 98.3982Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M173.354 97.3358C172.679 95.8317 174.906 94.0704 176.328 94.5944C177.366 94.9874 176.915 95.953 176.828 96.7341C176.731 97.5299 176.634 98.3256 175.605 98.4711C175.188 98.5342 174.833 98.3984 174.44 98.6167C174.023 98.8593 173.878 99.3639 173.766 99.8055C173.606 100.456 173.523 100.931 172.961 101.334C172.471 101.688 172.238 101.897 172.092 102.508C171.811 103.585 171.015 104.696 169.656 104.357C168.628 104.09 168.274 102.557 168.201 101.64C168.152 101.062 168.337 100.169 168.924 99.8394C169.511 99.5095 170.258 99.9607 170.821 99.4852C171.408 98.9855 171.554 97.9666 172.374 97.7094C172.767 97.5735 174.028 97.8792 173.587 97.001C173.514 97.0398 173.489 97.0883 173.426 97.1368" fill="white"/> -<path d="M173.354 97.3358C172.679 95.8317 174.906 94.0704 176.328 94.5944C177.366 94.9874 176.915 95.953 176.828 96.7341C176.731 97.5299 176.634 98.3256 175.605 98.4711C175.188 98.5342 174.833 98.3984 174.44 98.6167C174.023 98.8593 173.878 99.3639 173.766 99.8055C173.606 100.456 173.523 100.931 172.961 101.334C172.471 101.688 172.238 101.897 172.092 102.508C171.811 103.585 171.015 104.696 169.656 104.357C168.628 104.09 168.274 102.557 168.201 101.64C168.152 101.062 168.337 100.169 168.924 99.8394C169.511 99.5095 170.258 99.9607 170.821 99.4852C171.408 98.9855 171.554 97.9666 172.374 97.7094C172.767 97.5735 174.028 97.8792 173.587 97.001C173.514 97.0398 173.489 97.0883 173.426 97.1368" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M173.354 97.3358C172.679 95.8317 174.906 94.0704 176.328 94.5944C177.366 94.9874 176.915 95.953 176.828 96.7341C176.731 97.5299 176.634 98.3256 175.605 98.4711C175.188 98.5342 174.833 98.3984 174.44 98.6167C174.023 98.8593 173.878 99.3639 173.766 99.8055C173.606 100.456 173.523 100.931 172.961 101.334C172.471 101.688 172.238 101.897 172.092 102.508C171.811 103.585 171.015 104.696 169.656 104.357C168.628 104.09 168.274 102.557 168.201 101.64C168.152 101.062 168.337 100.169 168.924 99.8394C169.511 99.5095 170.258 99.9607 170.821 99.4852C171.408 98.9855 171.554 97.9666 172.374 97.7094C172.767 97.5735 174.028 97.8792 173.587 97.001C173.514 97.0398 173.489 97.0883 173.426 97.1368" fill="#DA3635"/> -<path d="M173.354 97.3358C172.679 95.8317 174.906 94.0704 176.328 94.5944C177.366 94.9874 176.915 95.953 176.828 96.7341C176.731 97.5299 176.634 98.3256 175.605 98.4711C175.188 98.5342 174.833 98.3984 174.44 98.6167C174.023 98.8593 173.878 99.3639 173.766 99.8055C173.606 100.456 173.523 100.931 172.961 101.334C172.471 101.688 172.238 101.897 172.092 102.508C171.811 103.585 171.015 104.696 169.656 104.357C168.628 104.09 168.274 102.557 168.201 101.64C168.152 101.062 168.337 100.169 168.924 99.8394C169.511 99.5095 170.258 99.9607 170.821 99.4852C171.408 98.9855 171.554 97.9666 172.374 97.7094C172.767 97.5735 174.028 97.8792 173.587 97.001C173.514 97.0398 173.489 97.0883 173.426 97.1368" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -</svg> diff --git a/src/assets/form/rdvsImageNotFound.svg b/src/assets/form/rdvsImageNotFound.svg deleted file mode 100644 index 9ea8268ab92c2e78bc8cc0bc1b9703d8f6832333..0000000000000000000000000000000000000000 --- a/src/assets/form/rdvsImageNotFound.svg +++ /dev/null @@ -1,250 +0,0 @@ -<svg width="200" height="201" viewBox="0 0 200 201" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M116.463 134.905L184.883 95.4026C191.101 91.8127 191.101 85.9924 184.883 82.4026L148.679 61.5" stroke="#706F6F" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/> -<path d="M20.9996 126.54L44.0803 113.214C50.2981 109.624 60.3792 109.624 66.597 113.214L101.944 133.622" stroke="#706F6F" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/> -<path d="M145.673 140.952C146.992 141.714 146.997 142.953 145.69 143.715L103.532 168.215C102.221 168.977 100.078 168.977 98.7585 168.215L54.3282 142.564C53.0087 141.802 52.9998 140.562 54.3105 139.801L96.4692 115.301C97.7799 114.539 99.923 114.539 101.243 115.301L145.673 140.952Z" fill="white" stroke="#DA3635" stroke-miterlimit="10"/> -<path d="M136.825 141.112C137.888 141.728 137.892 142.729 136.838 143.34L102.845 163.093C101.787 163.708 100.06 163.708 98.9969 163.093L63.1702 142.41C62.1075 141.794 62.0986 140.798 63.1569 140.183L97.1504 120.429C98.2087 119.814 99.9356 119.814 100.998 120.429L136.825 141.112Z" fill="#EDEDED"/> -<path d="M68.0088 103.646V140.948L100.616 159.594V122.297L68.0088 103.646Z" fill="white"/> -<path d="M68.0088 103.646V140.948L100.616 159.594V122.297L68.0088 103.646Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.616 122.299L133.175 103.626L100.616 84.9355L68.0088 103.648L100.616 122.299Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.638 119.544L128.335 103.657L100.638 87.7559L72.9014 103.679L100.638 119.544Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M133.175 103.625L133.224 140.948L100.616 159.595V122.298L133.175 103.625Z" fill="white"/> -<path d="M133.175 103.625L133.224 140.948L100.616 159.595V122.298L133.175 103.625Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.616 80.6709L68.0088 99.3879L100.616 118.034L133.175 99.3614L100.616 80.6709ZM72.9017 99.4189L100.638 83.4959L128.34 99.3968L100.638 115.28L72.9017 99.4189Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M68.0088 99.3887V106.075L100.616 124.721V118.035L68.0088 99.3887Z" fill="white"/> -<path d="M68.0088 99.3887V106.075L100.616 124.721V118.035L68.0088 99.3887Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.616 118.033V124.351L133.175 105.674V99.3555L100.616 118.033Z" fill="white"/> -<path d="M100.616 118.033V124.351L133.175 105.674V99.3555L100.616 118.033Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.639 83.4961V87.7558L124.621 101.527L128.336 99.3969L100.639 83.4961Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M72.9014 99.4191L100.638 83.4961V87.7558L76.5855 101.527L72.9014 99.4191Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.428 115.62V125.37L128.729 121.775L129.756 121.195V111.436L122.428 115.62Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.428 115.624V124.303L128.729 120.708V112.033L122.428 115.624Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.134 120.735V130.49L119.435 126.894L120.462 126.31V116.555L113.134 120.735Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.134 120.74V129.423L119.435 125.827V117.148L113.134 120.74Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.034 125.491V135.241L110.335 131.65L111.367 131.065V121.311L104.034 125.491Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.034 125.495V134.179L110.335 130.583V121.904L104.034 125.495Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.45 127.523V137.278L128.751 133.683L129.783 133.094V123.339L122.45 127.523Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.45 127.528V136.211L128.751 132.615V123.937L122.45 127.528Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.156 132.638V142.388L119.457 138.797L120.489 138.213V128.458L113.156 132.638Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.156 132.643V141.326L119.457 137.731V129.052L113.156 132.643Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.062 137.394V147.149L110.358 143.553L111.39 142.969V133.214L104.062 137.394Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.062 137.402V146.08L110.358 142.485V133.811L104.062 137.402Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M90.6436 151.983L90.6745 127.058L98.4323 131.534L98.4014 156.464L90.6436 151.983Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M69.2617 139.646L69.2927 114.717L77.0505 119.198L77.0195 144.123L69.2617 139.646Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M87.991 129.367L87.9245 152.41L76.2568 145.671L76.3233 122.632L87.991 129.367Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M74.5147 122.513L77.2025 120.95L77.1316 146.19L74.4395 147.753L74.5147 122.513Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M88.0694 128.503L90.7616 126.94L90.6819 154.009L87.9941 155.576L88.0694 128.503Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M72.8701 119.732L75.5623 118.164L90.7591 126.94L88.0669 128.503L72.8701 119.732Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M88.0689 128.503L87.9937 155.576L86.3464 154.624L86.4173 129.389L74.5149 122.512L74.4397 147.752L72.7969 146.8L72.8722 119.731L88.0689 128.503Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M74.4502 126.356L75.2384 125.896L86.4057 132.351L86.4146 133.273L74.4502 126.356Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M86.4151 133.273L86.4018 137.209L74.4375 130.297L74.4507 126.356L86.4151 133.273Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M85.1492 140.492L85.1403 143.645L84.0732 143.03L84.0865 139.877L85.1492 140.492Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M84.2203 141.29L84.0432 141.503C83.9901 141.569 83.8971 141.596 83.8174 141.569L82.8211 141.251C82.6705 141.202 82.52 141.33 82.551 141.49C82.5642 141.569 82.6218 141.631 82.6971 141.653L84.2513 142.141C84.3133 142.158 84.3797 142.149 84.4284 142.114L84.8535 141.835C84.9775 141.751 84.9775 141.565 84.8535 141.485L84.5037 141.255C84.4107 141.189 84.2912 141.211 84.2203 141.29Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M68.0088 63.3496V100.646L100.616 119.293V81.9958L68.0088 63.3496Z" fill="white"/> -<path d="M68.0088 63.3496V100.646L100.616 119.293V81.9958L68.0088 63.3496Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.616 81.9955L133.175 63.3227L100.616 44.6367L68.0088 63.3493L100.616 81.9955Z" fill="white"/> -<path d="M100.616 81.9955L133.175 63.3227L100.616 44.6367L68.0088 63.3493L100.616 81.9955Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M133.175 63.3223L133.224 100.646L100.616 119.292V81.995L133.175 63.3223Z" fill="white"/> -<path d="M133.175 63.3223L133.224 100.646L100.616 119.292V81.995L133.175 63.3223Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M77.4734 75.6859V85.4407L71.1724 81.8452L70.1406 81.2607V71.5059L77.4734 75.6859Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M77.469 75.6907V84.3739L71.168 80.774V72.0996L77.469 75.6907Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M86.7683 80.805V90.5598L80.4673 86.9643L79.4355 86.3798V76.625L86.7683 80.805Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M86.7639 80.8034V89.4867L80.4629 85.8912V77.2168L86.7639 80.8034Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M95.8624 85.5609V95.3157L89.5614 91.7202L88.5342 91.1357V81.3809L95.8624 85.5609Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M95.8625 85.5637V94.247L89.5615 90.6515V81.9727L95.8625 85.5637Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M77.5715 87.5887V97.3435L71.2705 93.7524L70.2432 93.1635V83.4131L77.5715 87.5887Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M77.5715 87.593V96.2763L71.2705 92.6808V84.002L77.5715 87.593Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M86.8674 92.7073V102.462L80.5664 98.8666L79.5391 98.2822V88.5273L86.8674 92.7073Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M86.8664 92.7122V101.391L80.5654 97.7999V89.1211L86.8664 92.7122Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M95.9621 97.4632V107.218L89.6655 103.623L88.6338 103.042V93.2832L95.9621 97.4632Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M95.9621 97.4705V106.145L89.6611 102.554V93.875L95.9621 97.4705Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.428 75.3197V85.0745L128.729 81.479L129.756 80.8945V71.1396L122.428 75.3197Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.428 75.3245V84.0033L128.729 80.4122V71.7334L122.428 75.3245Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.134 80.4339V90.1931L119.435 86.5932L120.462 86.0087V76.2539L113.134 80.4339Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.134 80.4417V89.1205L119.435 85.5294V76.8506L113.134 80.4417Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.034 85.1947V94.945L110.34 91.3539L111.367 90.765V81.0146L104.034 85.1947Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.034 85.1975V93.8808L110.34 90.2853V81.6064L104.034 85.1975Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.449 87.22V96.9749L128.75 93.3794L129.782 92.7949V83.04L122.449 87.22Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M122.449 87.2249V95.9081L128.75 92.3126V83.6338L122.449 87.2249Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.155 92.3392V102.09L119.456 98.4941L120.488 97.9096V88.1592L113.155 92.3392Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M113.155 92.344V101.027L119.456 97.4317V88.7529L113.155 92.344Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.061 97.095V106.845L110.362 103.254L111.389 102.67V92.915L104.061 97.095Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M104.061 97.0999V105.779L110.362 102.188V93.5088L104.061 97.0999Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M68.0088 61.4141V63.3491L100.882 82.7569V80.8263L68.0088 61.4141Z" fill="white"/> -<path d="M68.0088 61.4141V63.3491L100.882 82.7569V80.8263L68.0088 61.4141Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.882 80.8262L133.056 62.3749L100.231 42.9229L68.0088 61.4141L100.882 80.8262Z" fill="white"/> -<path d="M100.882 80.8262L133.056 62.3749L100.231 42.9229L68.0088 61.4141L100.882 80.8262Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M133.055 62.374L133.104 64.3356L100.882 82.756V80.8254L133.055 62.374Z" fill="white"/> -<path d="M133.055 62.374L133.104 64.3356L100.882 82.756V80.8254L133.055 62.374Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M98.7614 41.9336L69.8379 58.5385L73.6902 60.7392L100.878 76.547L125.949 62.1694L129.757 59.9864L98.7614 41.9336ZM100.9 74.1028L74.1773 58.565L98.7791 44.4442L125.471 60.0174L123.833 60.9561L100.9 74.1028Z" fill="white"/> -<path d="M98.7614 41.9336L69.8379 58.5385L73.6902 60.7392L100.878 76.547L125.949 62.1694L129.757 59.9864L98.7614 41.9336ZM100.9 74.1028L74.1773 58.565L98.7791 44.4442L125.471 60.0174L123.833 60.9561L100.9 74.1028Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M69.8447 58.5371V60.5784L100.88 78.5914V76.5457L69.8447 58.5371Z" fill="white"/> -<path d="M69.8447 58.5371V60.5784L100.88 78.5914V76.5457L69.8447 58.5371Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M100.88 76.546V78.5917L129.764 62.0222V59.9854L100.88 76.546Z" fill="white"/> -<path d="M100.88 76.546V78.5917L129.764 62.0222V59.9854L100.88 76.546Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M98.7812 44.4385L98.8122 46.7543L123.467 61.1673L125.469 60.0116L98.7812 44.4385Z" fill="white"/> -<path d="M98.7812 44.4385L98.8122 46.7543L123.467 61.1673L125.469 60.0116L98.7812 44.4385Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M74.1787 58.5637L98.785 44.4385L98.8159 46.7543L76.1935 59.715L74.1787 58.5637Z" fill="white"/> -<path d="M74.1787 58.5637L98.785 44.4385L98.8159 46.7543L76.1935 59.715L74.1787 58.5637Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M107.017 55.6205C110.887 57.8566 110.909 61.4742 107.066 63.7104C103.222 65.9465 96.9655 65.9465 93.0954 63.7104C89.2254 61.4742 89.2077 57.8566 93.0511 55.6205C96.8946 53.3843 103.147 53.3843 107.017 55.6205Z" fill="white" stroke="#DA3635" stroke-miterlimit="10"/> -<path d="M104.372 57.1576C106.772 58.5436 106.786 60.7886 104.403 62.1745C102.021 63.5605 98.1422 63.5605 95.7422 62.1745C93.3422 60.7886 93.3334 58.5436 95.7156 57.1576C98.0978 55.7717 101.972 55.7717 104.372 57.1576Z" fill="#EDEDED"/> -<path d="M123.199 156.5L141.949 167.325C148.167 170.915 148.167 176.735 141.949 180.325L128.462 188.112" stroke="#706F6F" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/> -<path d="M128.208 154.049C130.248 155.225 130.261 157.135 128.233 158.311C126.206 159.487 122.909 159.487 120.869 158.311C118.829 157.135 118.82 155.225 120.848 154.049C122.876 152.873 126.168 152.873 128.208 154.049Z" fill="white" stroke="#DA3635" stroke-miterlimit="10"/> -<path d="M133.362 185.949C138.27 188.784 138.301 193.38 133.42 196.215C128.544 199.049 120.605 199.049 115.698 196.215C110.79 193.38 110.763 188.784 115.645 185.949C120.526 183.115 128.454 183.115 133.362 185.949Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 5"/> -<path d="M131.955 186.648C136.075 189.028 136.101 192.884 132.008 195.264C127.914 197.643 121.251 197.643 117.125 195.264C113.005 192.884 112.984 189.028 117.078 186.648C121.171 184.268 127.83 184.268 131.955 186.648Z" fill="#EDEDED"/> -<path d="M134.208 186.41C134.203 186.458 134.203 186.505 134.198 186.558C134.192 186.601 134.187 186.643 134.182 186.685C134.177 186.733 134.166 186.78 134.161 186.828C134.155 186.87 134.145 186.913 134.134 186.955C134.124 187.003 134.113 187.05 134.097 187.098C134.087 187.14 134.071 187.182 134.06 187.225C134.044 187.272 134.028 187.32 134.013 187.362C133.997 187.405 133.981 187.447 133.965 187.489C133.944 187.537 133.923 187.584 133.901 187.637C133.886 187.68 133.864 187.717 133.843 187.759C133.822 187.806 133.796 187.854 133.769 187.902C133.748 187.939 133.727 187.981 133.706 188.018C133.674 188.076 133.637 188.134 133.6 188.187C133.579 188.224 133.558 188.256 133.531 188.293C133.489 188.357 133.441 188.42 133.394 188.478C133.373 188.505 133.351 188.531 133.33 188.563C133.251 188.663 133.166 188.758 133.082 188.854C133.061 188.88 133.034 188.901 133.013 188.928C132.944 189.002 132.87 189.076 132.796 189.145C132.759 189.176 132.727 189.208 132.69 189.24C132.643 189.282 132.595 189.319 132.548 189.361C132.505 189.398 132.463 189.435 132.415 189.472C132.368 189.515 132.315 189.552 132.262 189.594C132.214 189.631 132.167 189.668 132.119 189.7C132.066 189.737 132.013 189.779 131.955 189.816C131.902 189.853 131.855 189.885 131.802 189.922C131.744 189.959 131.686 189.996 131.627 190.033C131.553 190.081 131.479 190.123 131.405 190.171C131.194 190.292 130.977 190.403 130.755 190.514C130.697 190.541 130.638 190.572 130.575 190.599C130.374 190.694 130.168 190.779 129.956 190.863C129.93 190.874 129.903 190.885 129.872 190.895C129.644 190.98 129.411 191.059 129.179 191.133C129.015 191.186 128.845 191.228 128.682 191.276C128.555 191.313 128.428 191.345 128.301 191.376C128.126 191.419 127.946 191.456 127.767 191.493C127.634 191.519 127.507 191.551 127.375 191.572C127.322 191.583 127.264 191.588 127.211 191.598C126.989 191.636 126.767 191.667 126.54 191.694C126.476 191.699 126.407 191.71 126.344 191.715C126.217 191.731 126.085 191.736 125.953 191.747C125.736 191.762 125.519 191.778 125.297 191.789C125.159 191.794 125.016 191.799 124.879 191.799C124.704 191.805 124.525 191.805 124.35 191.799C124.202 191.799 124.054 191.794 123.906 191.789C123.742 191.784 123.578 191.773 123.414 191.762C123.266 191.752 123.118 191.741 122.964 191.725C122.801 191.71 122.642 191.694 122.483 191.673C122.34 191.657 122.192 191.636 122.05 191.609C121.875 191.583 121.706 191.551 121.537 191.519C121.404 191.493 121.267 191.466 121.135 191.44C120.934 191.398 120.733 191.345 120.532 191.292C120.405 191.26 120.273 191.228 120.146 191.186C120.077 191.165 120.008 191.144 119.945 191.123C119.744 191.059 119.548 190.99 119.358 190.922C119.299 190.9 119.246 190.879 119.188 190.858C119.014 190.789 118.845 190.715 118.675 190.641C118.591 190.604 118.506 190.572 118.427 190.53C118.183 190.414 117.945 190.292 117.718 190.16C115.809 189.06 114.857 187.611 114.862 186.167L114.852 190.329C114.846 191.773 115.798 193.217 117.707 194.322C117.935 194.454 118.173 194.576 118.416 194.692C118.495 194.729 118.585 194.766 118.665 194.803C118.808 194.867 118.95 194.936 119.098 194.994C119.125 195.004 119.151 195.015 119.178 195.02C119.231 195.041 119.289 195.063 119.347 195.084C119.537 195.152 119.738 195.221 119.934 195.285C120.003 195.306 120.072 195.327 120.14 195.348C120.188 195.364 120.23 195.38 120.278 195.39C120.357 195.412 120.442 195.428 120.526 195.449C120.727 195.502 120.923 195.549 121.129 195.597C121.182 195.607 121.235 195.623 121.288 195.634C121.367 195.65 121.447 195.66 121.526 195.676C121.695 195.708 121.87 195.74 122.039 195.766C122.108 195.777 122.176 195.792 122.245 195.803C122.319 195.814 122.399 195.819 122.473 195.829C122.631 195.851 122.795 195.866 122.959 195.882C123.038 195.888 123.113 195.903 123.192 195.909C123.266 195.914 123.335 195.914 123.409 195.919C123.573 195.93 123.737 195.941 123.901 195.946C123.985 195.951 124.065 195.956 124.149 195.956C124.213 195.956 124.281 195.956 124.345 195.956C124.519 195.956 124.699 195.956 124.874 195.956C124.964 195.956 125.048 195.956 125.138 195.956C125.191 195.956 125.244 195.946 125.291 195.946C125.508 195.935 125.73 195.919 125.947 195.903C126.037 195.898 126.122 195.893 126.212 195.888C126.254 195.882 126.296 195.877 126.339 195.872C126.402 195.866 126.471 195.856 126.534 195.851C126.762 195.824 126.984 195.792 127.206 195.755C127.259 195.745 127.317 195.74 127.37 195.729C127.396 195.724 127.423 195.724 127.449 195.718C127.555 195.697 127.656 195.671 127.761 195.65C127.941 195.613 128.121 195.576 128.295 195.533C128.422 195.502 128.549 195.465 128.676 195.433C128.845 195.385 129.009 195.343 129.173 195.29C129.21 195.279 129.247 195.269 129.279 195.258C129.48 195.195 129.676 195.126 129.866 195.052C129.893 195.041 129.919 195.031 129.951 195.02C130.162 194.936 130.369 194.851 130.57 194.756C130.628 194.729 130.691 194.703 130.749 194.671C130.972 194.565 131.194 194.449 131.4 194.327C131.442 194.306 131.479 194.28 131.516 194.259C131.553 194.238 131.585 194.216 131.622 194.19C131.68 194.153 131.738 194.116 131.797 194.079C131.849 194.042 131.902 194.01 131.95 193.973C132.003 193.936 132.061 193.899 132.114 193.857C132.162 193.82 132.209 193.783 132.257 193.746C132.31 193.709 132.357 193.666 132.41 193.629C132.458 193.592 132.5 193.555 132.542 193.518C132.59 193.476 132.637 193.439 132.68 193.397C132.701 193.381 132.717 193.365 132.738 193.349C132.754 193.333 132.77 193.317 132.786 193.301C132.86 193.227 132.934 193.159 133.002 193.085C133.024 193.058 133.05 193.037 133.071 193.011C133.161 192.915 133.246 192.815 133.32 192.72C133.325 192.714 133.325 192.709 133.33 192.709C133.346 192.688 133.362 192.662 133.383 192.64C133.431 192.577 133.478 192.519 133.521 192.455C133.542 192.418 133.568 192.387 133.589 192.349C133.626 192.291 133.664 192.233 133.695 192.18C133.706 192.164 133.716 192.149 133.722 192.133C133.732 192.111 133.743 192.085 133.759 192.064C133.785 192.016 133.812 191.969 133.833 191.921C133.854 191.879 133.87 191.842 133.891 191.799C133.912 191.752 133.933 191.704 133.954 191.651C133.965 191.63 133.976 191.609 133.981 191.588C133.986 191.567 133.991 191.546 134.002 191.53C134.018 191.482 134.034 191.435 134.05 191.392C134.06 191.35 134.076 191.308 134.087 191.265C134.097 191.218 134.113 191.17 134.124 191.123C134.129 191.096 134.139 191.07 134.145 191.048C134.15 191.033 134.15 191.011 134.155 190.996C134.166 190.948 134.171 190.9 134.177 190.853C134.182 190.81 134.187 190.768 134.192 190.726C134.198 190.678 134.198 190.631 134.203 190.578C134.203 190.551 134.208 190.52 134.208 190.493C134.208 190.467 134.208 190.435 134.208 190.409L134.219 186.246C134.219 186.299 134.214 186.352 134.208 186.41Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/> -<path d="M131.357 182.248C135.149 184.437 135.17 187.986 131.405 190.175C127.639 192.365 121.51 192.365 117.718 190.175C113.926 187.986 113.91 184.437 117.675 182.248C121.441 180.058 127.565 180.058 131.357 182.248Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/> -<path d="M129.094 183.966C129.226 184.046 129.231 184.173 129.089 184.252L125.984 186.055C125.852 186.135 125.852 186.262 125.989 186.341L128.951 188.049C129.083 188.129 129.089 188.256 128.946 188.335L128.306 188.705C128.168 188.784 127.941 188.784 127.809 188.71L124.847 187.002C124.71 186.923 124.482 186.923 124.345 187.002L121.214 188.821C121.076 188.901 120.849 188.901 120.717 188.827L119.976 188.398C119.839 188.319 119.833 188.187 119.976 188.107L123.107 186.288C123.245 186.209 123.245 186.077 123.112 186.003L120.172 184.305C120.034 184.226 120.029 184.093 120.172 184.014L120.812 183.644C120.949 183.564 121.177 183.564 121.314 183.644L124.255 185.341C124.387 185.421 124.614 185.421 124.747 185.341L127.851 183.538C127.989 183.459 128.216 183.459 128.354 183.538L129.094 183.966Z" fill="#DA3635"/> -<path d="M24.8715 127.409C28.1368 129.363 28.1555 132.524 24.9126 134.478C21.6697 136.432 16.3906 136.432 13.1253 134.478C9.86 132.524 9.84506 129.363 13.088 127.409C16.3309 125.455 21.6062 125.455 24.8715 127.409Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/> -<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" fill="white"/> -<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" fill="white"/> -<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" fill="white"/> -<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" fill="white"/> -<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" fill="white"/> -<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" fill="white"/> -<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" fill="white"/> -<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" fill="white"/> -<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" fill="white"/> -<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" fill="white"/> -<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" fill="white"/> -<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" fill="white"/> -<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" fill="white"/> -<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" fill="white"/> -<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.7717 109.551C15.3734 109.688 15.0865 109.941 14.7911 110.223C14.4442 110.557 13.9046 110.866 13.6905 111.324C13.3694 112.022 13.2066 113.311 13.1424 114.073C13.0482 114.998 13.1167 115.923 13.1938 116.852C13.1938 116.852 13.1724 117.443 14.5812 116.737C14.5812 116.737 14.3543 118.368 15.1636 118.638C15.9944 119.096 16.8551 118.921 17.7929 118.921C18.812 118.908 19.7927 118.707 20.208 117.713C20.4521 117.289 20.2038 116.03 20.2038 116.03C20.8889 116.433 21.8053 115.713 21.8053 115.713C21.9809 114.399 21.1202 113.003 20.6363 111.821C20.3793 111.204 20.0839 110.72 19.6428 110.211C19.4672 109.997 19.2403 109.568 19.0262 109.418C18.6793 109.149 18.9319 109.243 18.5294 109.337C17.6987 109.538 16.3541 111.08 15.883 109.564C15.8916 109.564 15.883 109.513 15.7717 109.551Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.8919 109.564C16.3629 111.08 17.7032 109.538 18.5383 109.337C18.9408 109.243 18.6839 109.149 19.035 109.418C19.2491 109.564 19.4761 109.997 19.6516 110.211C20.0927 110.72 20.3882 111.204 20.6451 111.821C21.129 113.003 21.9854 114.399 21.8141 115.713C21.8141 115.713 20.902 116.433 20.2126 116.03C20.2126 116.03 20.461 117.289 20.2169 117.713C19.8015 118.707 18.8209 118.908 17.8017 118.921C16.8639 118.921 16.0032 119.096 15.1724 118.638C14.3631 118.368 14.5901 116.737 14.5901 116.737C13.1769 117.443 13.2026 116.852 13.2026 116.852C13.1213 115.927 13.057 115.002 13.1512 114.073C13.2198 113.307 13.3782 112.022 13.6994 111.324C13.9135 110.866 14.453 110.557 14.7999 110.223C15.0954 109.941 15.378 109.675 15.7805 109.551C15.772 109.551 15.8447 109.508 15.8919 109.564Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" fill="white"/> -<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" fill="#DA3635"/> -<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M13 111.282L13.2826 109.92L14.8884 108.986L16.2117 109.415L26.8872 127.789L23.6755 129.657L13 111.282Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M23.6758 129.656L23.9413 128.26L25.5471 127.331L26.8874 127.789L27.5169 132.572L23.6758 129.656Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M25.8594 131.314L26.0478 130.941C26.1934 130.65 26.5017 130.47 26.8314 130.487L27.2468 130.509L27.5209 132.577L25.8594 131.314Z" fill="#DA3635" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M14.8887 108.986L25.5471 127.331L26.8874 127.789L16.2119 109.415L14.8887 108.986Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M23.941 128.261L13.2826 109.92L13 111.282L23.6755 129.657L23.941 128.261Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M13.6992 116.672C13.6992 116.672 15.0952 116.488 15.7632 115.876L15.2879 115.02C15.2879 115.02 14.0504 115.499 13.9262 115.675C13.802 115.855 13.6992 116.672 13.6992 116.672Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M15.292 115.02C15.292 115.02 15.292 114.245 15.5917 114C15.8958 113.761 15.5917 114.57 15.5917 114.57C15.5917 114.57 16.3069 113.953 16.5124 114.018C16.718 114.082 16.9406 114.75 16.8764 115.071C16.8122 115.392 15.8787 115.739 15.763 115.876L15.292 115.02Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M13.832 117.036C13.832 117.036 15.592 116.073 15.7633 115.876L15.288 115.02C15.288 115.02 14.2688 115.379 13.9733 115.628" fill="white"/> -<path d="M13.832 117.036C13.832 117.036 15.592 116.073 15.7633 115.876L15.288 115.02C15.288 115.02 14.2688 115.379 13.9733 115.628" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M20.6021 114.518C20.6021 114.518 18.8764 114.154 18.5381 113.73L19.4673 115.486C19.4673 115.486 20.0839 116.137 21.1245 116.03" fill="white"/> -<path d="M20.6021 114.518C20.6021 114.518 18.8764 114.154 18.5381 113.73L19.4673 115.486C19.4673 115.486 20.0839 116.137 21.1245 116.03" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M18.8633 111.967C18.8633 111.967 19.4499 114.044 20.0709 114.391L18.8633 111.967Z" fill="white"/> -<path d="M18.8633 111.967C18.8633 111.967 19.4499 114.044 20.0709 114.391" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M153.972 87.8867C154.213 87.8867 154.373 88.0426 154.373 88.2995V94.2098C154.373 94.4499 154.217 94.61 153.972 94.61C153.728 94.61 153.56 94.4541 153.56 94.2098V88.2995C153.576 88.131 153.732 87.8867 153.972 87.8867Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M153.972 90.4776C156.125 90.4776 157.86 88.742 157.86 86.5894C157.86 84.4409 156.125 82.7012 153.972 82.7012C151.82 82.7012 150.084 84.4367 150.084 86.5894C150.084 88.742 151.824 90.4776 153.972 90.4776Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M153.972 90.4776C156.121 90.4776 157.86 88.7378 157.86 86.5894C157.86 84.4409 156.121 82.7012 153.972 82.7012C151.824 82.7012 150.084 84.4409 150.084 86.5894C150.084 88.7378 151.824 90.4776 153.972 90.4776Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M155.114 89.4248C152.919 89.4248 151.226 87.647 151.226 85.5366C151.226 84.6393 151.554 83.8431 151.95 83.2744C150.809 83.9316 150 85.2248 150 86.5939C150 88.7844 151.782 90.4821 153.888 90.4821C155.186 90.4821 156.323 89.8291 157.052 88.8603C156.479 89.2562 155.839 89.4248 155.114 89.4248Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M155.114 89.4248C152.919 89.4248 151.226 87.647 151.226 85.5366C151.226 84.6393 151.554 83.8431 151.95 83.2744C150.809 83.9316 150 85.2248 150 86.5939C150 88.7844 151.782 90.4821 153.888 90.4821C155.186 90.4821 156.323 89.8291 157.052 88.8603C156.479 89.2562 155.839 89.4248 155.114 89.4248Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M177.942 79.6309H178.186C178.515 79.6309 178.755 79.871 178.755 80.1995V89.8379C178.755 90.1665 178.51 90.4066 178.186 90.4066H177.942C177.613 90.4066 177.373 90.1665 177.373 89.8379V80.1995C177.386 79.871 177.63 79.6309 177.942 79.6309Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M178.027 83.6747C181.43 83.6747 184.177 80.9281 184.177 77.5244C184.177 74.1206 181.426 71.374 178.027 71.374C174.623 71.374 171.872 74.1206 171.872 77.5244C171.876 80.9239 174.623 83.6747 178.027 83.6747Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M178.027 83.6747C181.43 83.6747 184.177 80.9281 184.177 77.5244C184.177 74.1206 181.426 71.374 178.027 71.374C174.623 71.374 171.872 74.1206 171.872 77.5244C171.876 80.9239 174.623 83.6747 178.027 83.6747Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M179.892 82.053C176.489 82.053 173.742 79.3064 173.742 75.9026C173.742 74.5209 174.227 73.3119 174.951 72.2588C173.085 73.3119 171.876 75.3339 171.876 77.5961C171.876 80.9998 174.627 83.7464 178.031 83.7464C180.053 83.7464 181.834 82.7775 182.972 81.24C182.07 81.737 181.03 82.053 179.892 82.053Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M179.892 82.053C176.489 82.053 173.742 79.3064 173.742 75.9026C173.742 74.5209 174.227 73.3119 174.951 72.2588C173.085 73.3119 171.876 75.3339 171.876 77.5961C171.876 80.9998 174.627 83.7464 178.031 83.7464C180.053 83.7464 181.834 82.7775 182.972 81.24C182.07 81.737 181.03 82.053 179.892 82.053Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M167.33 73.1514C167.659 73.1514 167.899 73.3957 167.899 73.7201V81.1678C167.899 81.4964 167.655 81.7366 167.33 81.7366C167.002 81.7366 166.762 81.4964 166.762 81.1678V73.7201C166.779 73.3072 167.019 73.1514 167.33 73.1514Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M167.331 76.3827C170.065 76.3827 172.272 74.1753 172.272 71.4413C172.272 68.7074 170.065 66.5 167.331 66.5C164.597 66.5 162.39 68.7074 162.39 71.4413C162.39 74.1795 164.614 76.3827 167.331 76.3827Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M167.331 76.3827C170.065 76.3827 172.272 74.1753 172.272 71.4413C172.272 68.7074 170.065 66.5 167.331 66.5C164.597 66.5 162.39 68.7074 162.39 71.4413C162.39 74.1795 164.614 76.3827 167.331 76.3827Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M168.801 75.0179C166.054 75.0179 163.86 72.8274 163.86 70.0766C163.86 69.0234 164.188 67.9703 164.828 67.1572C163.375 68.0545 162.394 69.5921 162.394 71.3698C162.394 74.1164 164.588 76.3111 167.335 76.3111C168.957 76.3111 170.41 75.4981 171.307 74.2891C170.579 74.7609 169.681 75.0179 168.801 75.0179Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M168.801 75.0179C166.054 75.0179 163.86 72.8274 163.86 70.0766C163.86 69.0234 164.188 67.9703 164.828 67.1572C163.375 68.0545 162.394 69.5921 162.394 71.3698C162.394 74.1164 164.588 76.3111 167.335 76.3111C168.957 76.3111 170.41 75.4981 171.307 74.2891C170.579 74.7609 169.681 75.0179 168.801 75.0179Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M164.913 89.0957C165.313 89.0957 165.726 89.4243 165.726 89.9087V100.6C165.726 101 165.397 101.413 164.913 101.413C164.512 101.413 164.1 101.085 164.1 100.6V89.9087C164.1 89.4243 164.428 89.0957 164.913 89.0957Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M164.913 93.7085C168.801 93.7085 171.965 90.5617 171.965 86.6609C171.965 82.7601 168.805 79.6133 164.913 79.6133C161.025 79.6133 157.865 82.7601 157.865 86.6609C157.861 90.5659 161.025 93.7085 164.913 93.7085Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M164.913 93.7085C168.801 93.7085 171.965 90.5617 171.965 86.6609C171.965 82.7601 168.805 79.6133 164.913 79.6133C161.025 79.6133 157.865 82.7601 157.865 86.6609C157.861 90.5659 161.025 93.7085 164.913 93.7085Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M167.019 91.8468C163.131 91.8468 159.972 88.6874 159.972 84.7992C159.972 83.2616 160.456 81.8083 161.353 80.6709C159.247 81.8799 157.865 84.1463 157.865 86.7496C157.865 90.6378 161.025 93.7972 164.913 93.7972C167.263 93.7972 169.285 92.6598 170.583 90.9622C169.441 91.4466 168.317 91.8468 167.019 91.8468Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M167.019 91.8468C163.131 91.8468 159.972 88.6874 159.972 84.7992C159.972 83.2616 160.456 81.8083 161.353 80.6709C159.247 81.8799 157.865 84.1463 157.865 86.7496C157.865 90.6378 161.025 93.7972 164.913 93.7972C167.263 93.7972 169.285 92.6598 170.583 90.9622C169.441 91.4466 168.317 91.8468 167.019 91.8468Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M156.774 58.6325C160.172 60.583 160.186 63.7466 156.816 65.7041C153.445 67.6546 147.957 67.6546 144.558 65.7041C141.16 63.7535 141.146 60.5899 144.524 58.6325C147.901 56.675 153.383 56.6819 156.774 58.6325Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/> -<path d="M159.036 165.114C160.534 165.977 160.54 167.378 159.054 168.245C157.568 169.108 155.148 169.108 153.649 168.245C152.151 167.381 152.145 165.981 153.634 165.114C155.12 164.247 157.54 164.247 159.036 165.114Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M158.092 165.66C159.062 166.222 159.069 167.131 158.104 167.692C157.14 168.254 155.568 168.254 154.595 167.692C153.625 167.131 153.618 166.222 154.583 165.66C155.55 165.102 157.119 165.102 158.092 165.66Z" fill="#EDEDED"/> -<path d="M143.649 127.091C142.853 127.585 143.033 128.849 143.649 129.206L145.007 129.99C145.297 130.158 145.657 130.158 145.947 129.99L150.726 127.231C151.254 126.926 151.409 125.69 150.726 125.352L145.849 127.918L143.649 127.091Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M154.876 124.323C153.747 123.67 152.401 123.67 151.272 124.323L150.109 124.994L149.59 124.695C149.038 124.375 148.354 124.375 147.799 124.695L143.649 127.091C143.032 127.448 143.032 128.339 143.649 128.696L145.007 129.48C145.297 129.648 145.657 129.648 145.947 129.48L150.726 126.721C151.253 126.416 151.253 125.656 150.726 125.351L150.567 125.26L151.501 124.723C152.486 124.155 153.661 124.155 154.647 124.723C155.633 125.29 156.222 126.309 156.222 127.448V153.438H156.679V127.448C156.676 126.142 156.005 124.976 154.876 124.323Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M154.968 166.633C154.968 167.082 155.6 167.445 156.378 167.445C157.156 167.445 157.788 167.082 157.788 166.633V165.821H154.965V166.633H154.968Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M156.381 166.633C157.159 166.633 157.79 166.27 157.79 165.822C157.79 165.373 157.159 165.01 156.381 165.01C155.602 165.01 154.971 165.373 154.971 165.822C154.971 166.27 155.602 166.633 156.381 166.633Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M155.529 165.74C155.529 166.011 155.911 166.228 156.381 166.228C156.851 166.228 157.232 166.008 157.232 165.74V147.519H155.529V165.74Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M156.381 148.007C156.851 148.007 157.232 147.788 157.232 147.519C157.232 147.249 156.851 147.03 156.381 147.03C155.91 147.03 155.529 147.249 155.529 147.519C155.529 147.788 155.91 148.007 156.381 148.007Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M106.786 30.7703L101.104 27.4697L111.224 33.2397L116.913 36.5402L106.786 30.7703Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M111.28 1.76779L116.969 5.07642C116.187 4.61644 115.154 4.7617 114.121 5.35887L108.432 2.05023C109.465 1.45306 110.498 1.31588 111.28 1.76779Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M83.9402 62.251L78.2509 58.9424C76.6934 58.0386 76.7983 54.9156 78.372 52.2041L84.0612 55.5127C82.4876 58.2242 82.3746 61.3472 83.9402 62.251Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M84.0526 55.5124L78.3633 52.2038L88.4183 34.7891L94.1075 38.0977L84.0526 55.5124Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M101.096 25.9854L95.415 22.6849L105.607 5.03613L111.297 8.33671L101.096 25.9854Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M111.297 8.33647L105.607 5.02783C106.382 3.68017 107.407 2.63109 108.432 2.04199L114.121 5.35062C113.096 5.94779 112.071 6.9888 111.297 8.33647Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M94.1075 38.098L88.4182 34.7894C88.7894 34.1438 88.7894 33.4498 88.4102 33.248L94.0994 36.5567C94.4787 36.7584 94.4868 37.4524 94.1075 38.098Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M99.7567 26.7682L94.0674 23.4595C94.253 23.5644 94.5032 23.5322 94.7453 23.3869C94.9874 23.2497 95.2295 22.9996 95.4151 22.6768L101.104 25.9854C100.919 26.3082 100.677 26.5503 100.434 26.6955C100.184 26.8327 99.9423 26.8731 99.7567 26.7682Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M89.6364 20.99L83.9473 17.6895L94.0668 23.4594L99.756 26.768L89.6364 20.99Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M114.121 5.35095C115.178 4.73765 116.243 4.60854 117.034 5.10887C118.551 6.06918 118.397 9.1115 116.848 11.7988L106.785 29.2215C106.414 29.8591 106.414 30.5531 106.793 30.7629L116.913 36.5328C118.527 37.4447 118.623 40.5274 116.985 43.2631C116.219 44.5462 115.234 45.5307 114.241 46.1036C113.217 46.6927 112.184 46.838 111.401 46.3861L101.144 40.5435C100.959 40.4386 100.716 40.4709 100.474 40.6081C100.232 40.7453 99.9901 40.9954 99.8045 41.3182L89.6123 58.967C88.8295 60.3227 87.8048 61.3637 86.7799 61.9528C85.7873 62.5257 84.8028 62.671 84.0281 62.2837C82.3737 61.4444 82.4545 58.2649 84.0523 55.4969L94.1073 38.0822C94.4785 37.4366 94.4785 36.7426 94.0992 36.5409L83.8425 30.6983C82.2527 29.7864 82.2688 26.7925 83.8989 24.0568C84.6494 22.7979 85.6097 21.8538 86.5861 21.2889C87.6836 20.6594 88.7973 20.5142 89.6204 20.9822L99.74 26.7522C99.9256 26.8571 100.176 26.8248 100.418 26.6795C100.66 26.5424 100.902 26.2922 101.088 25.9694L111.28 8.32066C112.071 6.98914 113.096 5.94812 114.121 5.35095Z" fill="#DA3635" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M83.8511 30.7065L78.1618 27.3979C76.572 26.486 76.5881 23.4921 78.2182 20.7564C78.9687 19.4975 79.9291 18.5533 80.9056 17.9884C82.0031 17.359 83.1167 17.2137 83.9398 17.6818L89.629 20.9904C88.7978 20.5224 87.6922 20.6596 86.5948 21.2971C85.6183 21.862 84.658 22.8142 83.9075 24.065C82.2774 26.8007 82.2613 29.7946 83.8511 30.7065Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> -<path d="M100 39.5L100 59.5" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/> -<path d="M145.406 52.1319C146.019 51.9934 146.731 51.3493 147.224 51.0121C148.155 50.368 152.341 50.1994 151.248 49.8924C150.854 49.778 154.821 52.3426 154.721 53.8838C154.678 54.6002 154.853 55.9427 154.778 56.6711C154.721 57.2611 154.896 57.6645 154.853 58.2665C154.447 57.9173 154.328 57.0745 153.791 56.7976C153.309 56.5628 152.597 56.936 152.135 57.0504C151.716 57.1467 151.26 57.1347 150.873 57.3273C150.454 57.538 150.379 57.815 150.236 58.2243C149.986 58.9106 149.873 59.4585 149.83 60.1809C149.567 59.7174 149.336 59.3802 148.986 58.9468C148.636 58.5254 148.099 58.3327 147.605 58.0377C146.356 57.2671 145.656 56.4544 145.569 54.9313C145.512 54.0884 145.919 52.8724 145.406 52.1319Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M151.323 41.2957C151.279 42.0542 151.729 42.4034 150.885 42.9332C150.448 43.1981 150.404 43.1017 150.261 43.6074C150.161 43.9566 150.173 44.2938 149.986 44.6128C149.655 45.1727 149.536 44.9319 149.074 44.5827C148.593 44.2215 148.286 44.4443 148.243 43.8844C148.199 43.4208 148.593 42.8911 148.536 42.4696C148.48 41.994 148.243 41.6148 148.405 41.3198C148.786 40.6636 150.773 41.3198 151.267 41.2235" fill="white"/> -<path d="M151.323 41.2957C151.279 42.0542 151.729 42.4034 150.885 42.9332C150.448 43.1981 150.404 43.1017 150.261 43.6074C150.161 43.9566 150.173 44.2938 149.986 44.6128C149.655 45.1727 149.536 44.9319 149.074 44.5827C148.593 44.2215 148.286 44.4443 148.243 43.8844C148.199 43.4208 148.593 42.8911 148.536 42.4696C148.48 41.994 148.243 41.6148 148.405 41.3198C148.786 40.6636 150.773 41.3198 151.267 41.2235" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M151.323 41.2957C151.279 42.0542 151.729 42.4034 150.885 42.9332C150.448 43.1981 150.404 43.1017 150.261 43.6074C150.161 43.9566 150.173 44.2938 149.986 44.6128C149.655 45.1727 149.536 44.9319 149.074 44.5827C148.593 44.2215 148.286 44.4443 148.243 43.8844C148.199 43.4208 148.593 42.8911 148.536 42.4696C148.48 41.994 148.243 41.6148 148.405 41.3198C148.786 40.6636 150.773 41.3198 151.267 41.2235" fill="white"/> -<path d="M151.323 41.2957C151.279 42.0542 151.729 42.4034 150.885 42.9332C150.448 43.1981 150.404 43.1017 150.261 43.6074C150.161 43.9566 150.173 44.2938 149.986 44.6128C149.655 45.1727 149.536 44.9319 149.074 44.5827C148.593 44.2215 148.286 44.4443 148.243 43.8844C148.199 43.4208 148.593 42.8911 148.536 42.4696C148.48 41.994 148.243 41.6148 148.405 41.3198C148.786 40.6636 150.773 41.3198 151.267 41.2235" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M152.023 46.1421C152.023 47.6231 151.804 49.0258 151.716 50.4646C150.129 50.1877 151.323 49.1221 151.267 48.3936C151.192 47.5388 150.348 45.8892 152.023 46.0157" fill="white"/> -<path d="M152.023 46.1421C152.023 47.6231 151.804 49.0258 151.716 50.4646C150.129 50.1877 151.323 49.1221 151.267 48.3936C151.192 47.5388 150.348 45.8892 152.023 46.0157" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M152.023 46.1421C152.023 47.6231 151.804 49.0258 151.716 50.4646C150.129 50.1877 151.323 49.1221 151.267 48.3936C151.192 47.5388 150.348 45.8892 152.023 46.0157" fill="white"/> -<path d="M152.023 46.1421C152.023 47.6231 151.804 49.0258 151.716 50.4646C150.129 50.1877 151.323 49.1221 151.267 48.3936C151.192 47.5388 150.348 45.8892 152.023 46.0157" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M144.363 52.0593C144.538 50.8131 145.525 48.8144 143.563 48.1823C143.344 48.1101 142.588 47.8873 142.52 47.7187C142.301 47.1468 143.057 47.2432 143.307 47.3575C144.369 47.791 145.312 48.0438 145.312 49.2178C145.312 49.6934 145.094 50.2412 145.037 50.7168C144.994 51.1623 144.775 51.8667 144.744 52.3122" fill="white"/> -<path d="M144.363 52.0593C144.538 50.8131 145.525 48.8144 143.563 48.1823C143.344 48.1101 142.588 47.8873 142.52 47.7187C142.301 47.1468 143.057 47.2432 143.307 47.3575C144.369 47.791 145.312 48.0438 145.312 49.2178C145.312 49.6934 145.094 50.2412 145.037 50.7168C144.994 51.1623 144.775 51.8667 144.744 52.3122" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M144.363 52.0593C144.538 50.8131 145.525 48.8144 143.563 48.1823C143.344 48.1101 142.588 47.8873 142.52 47.7187C142.301 47.1468 143.057 47.2432 143.307 47.3575C144.369 47.791 145.312 48.0438 145.312 49.2178C145.312 49.6934 145.094 50.2412 145.037 50.7168C144.994 51.1623 144.775 51.8667 144.744 52.3122" fill="white"/> -<path d="M144.363 52.0593C144.538 50.8131 145.525 48.8144 143.563 48.1823C143.344 48.1101 142.588 47.8873 142.52 47.7187C142.301 47.1468 143.057 47.2432 143.307 47.3575C144.369 47.791 145.312 48.0438 145.312 49.2178C145.312 49.6934 145.094 50.2412 145.037 50.7168C144.994 51.1623 144.775 51.8667 144.744 52.3122" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M143.232 51.8664C144.569 51.7821 145.019 52.4684 145.894 53.1427C147.362 54.2745 147.581 55.8578 147.912 57.3568C148.218 58.7595 147.474 61.0954 145.631 60.8546C143.482 60.5716 142.364 59.3556 141.489 57.5916C141.071 56.7247 140.921 55.2558 141.039 54.2745C141.108 53.6303 142.151 51.8484 143.232 51.8664Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M145.6 52.7461C146.124 53.0652 146.924 53.4745 147.286 53.9923C147.724 54.5943 147.999 55.2505 148.242 55.9368C148.78 57.3636 149.173 58.9469 148.055 60.1931C147.399 60.9215 146.618 60.9336 145.6 60.8794C147.024 60.2051 148.011 59.0432 147.849 57.4359C147.761 56.5148 147.518 55.702 147.062 54.9134C146.799 54.4498 146.043 53.7214 145.637 53.2759" fill="white"/> -<path d="M145.6 52.7461C146.124 53.0652 146.924 53.4745 147.286 53.9923C147.724 54.5943 147.999 55.2505 148.242 55.9368C148.78 57.3636 149.173 58.9469 148.055 60.1931C147.399 60.9215 146.618 60.9336 145.6 60.8794C147.024 60.2051 148.011 59.0432 147.849 57.4359C147.761 56.5148 147.518 55.702 147.062 54.9134C146.799 54.4498 146.043 53.7214 145.637 53.2759" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M145.6 52.7461C146.124 53.0652 146.924 53.4745 147.286 53.9923C147.724 54.5943 147.999 55.2505 148.242 55.9368C148.78 57.3636 149.173 58.9469 148.055 60.1931C147.399 60.9215 146.618 60.9336 145.6 60.8794C147.024 60.2051 148.011 59.0432 147.849 57.4359C147.761 56.5148 147.518 55.702 147.062 54.9134C146.799 54.4498 146.043 53.7214 145.637 53.2759" fill="white"/> -<path d="M145.6 52.7461C146.124 53.0652 146.924 53.4745 147.286 53.9923C147.724 54.5943 147.999 55.2505 148.242 55.9368C148.78 57.3636 149.173 58.9469 148.055 60.1931C147.399 60.9215 146.618 60.9336 145.6 60.8794C147.024 60.2051 148.011 59.0432 147.849 57.4359C147.761 56.5148 147.518 55.702 147.062 54.9134C146.799 54.4498 146.043 53.7214 145.637 53.2759" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M145.281 56.1051C145.269 55.9486 145.225 55.786 145.063 55.7138C144.944 55.6717 144.832 55.7138 144.744 55.7981C144.5 56.0208 144.557 56.4001 144.788 56.6228C144.994 56.8215 145.238 56.7372 145.313 56.4844C145.388 56.1894 145.238 55.8703 144.95 55.7439C144.894 55.7319 144.85 55.7318 144.807 55.774C144.575 56.0931 144.557 56.7131 145.081 56.7553C145.125 56.7553 145.169 56.7252 145.181 56.683C145.281 56.4182 145.281 56.1352 145.106 55.9004C145.075 55.8583 144.988 55.8282 144.944 55.8884C144.813 56.0449 144.669 56.4362 144.988 56.4904C145.119 56.5024 145.175 56.3218 145.044 56.2917C144.913 56.2797 145.056 56.069 145.088 56.0268C145.031 56.0268 144.988 56.0148 144.925 56.0148C145.069 56.2135 145.056 56.4362 144.982 56.6589C145.013 56.6288 145.056 56.6168 145.081 56.5867C144.732 56.5566 144.85 56.081 144.982 55.9004C144.938 55.9125 144.882 55.9305 144.838 55.9305C145.013 56.0028 145.113 56.1412 145.113 56.3339C145.113 56.4181 145.1 56.6168 144.969 56.5446C144.794 56.4603 144.738 56.2074 144.807 56.0569C144.838 56.0148 144.894 55.9185 144.95 55.9305C145.038 55.9305 145.069 56.069 145.069 56.1412C145.106 56.2315 145.306 56.2315 145.281 56.1051Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M145.219 56.5988C145.55 56.641 145.744 56.8818 145.944 57.1045C146.15 57.3273 146.362 57.538 146.612 57.7066C147.137 58.0738 147.718 58.3507 148.312 58.5735C148.905 58.7842 149.418 58.9949 149.661 59.5969C149.867 60.0725 149.967 60.5902 150.055 61.1079C150.067 61.2344 150.273 61.1802 150.261 61.0538C150.174 60.5059 150.042 59.9762 149.824 59.4584C149.605 58.9708 149.243 58.7179 148.737 58.5193C148.056 58.2544 147.368 58.0015 146.762 57.5801C146.431 57.3574 146.194 57.0925 145.931 56.8095C145.744 56.5988 145.538 56.4604 145.263 56.4182C145.15 56.3881 145.088 56.5808 145.219 56.5988Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M144.769 55.5873C144.9 55.5873 144.9 55.3887 144.769 55.3887C144.638 55.3947 144.638 55.5873 144.769 55.5873Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M144.856 55.5873C145.119 55.2381 144.987 54.7083 144.987 54.2989C144.987 54.1725 144.781 54.1725 144.781 54.2989C144.781 54.6601 144.913 55.1779 144.681 55.4909C144.606 55.6053 144.781 55.7016 144.856 55.5873Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M143.782 52.9022C143.145 52.848 142.564 53.1852 142.183 53.6607C141.764 54.2086 141.702 54.7685 141.833 55.4126C141.995 56.1953 142.208 56.996 142.633 57.7063C142.939 58.2361 143.376 58.7117 143.826 59.1211C144.263 59.5124 144.8 59.9157 145.413 59.9458C145.981 59.9759 146.444 59.5967 146.75 59.1753C147.1 58.6696 147.275 58.0555 147.3 57.4535C147.331 56.8213 147.156 56.2916 146.906 55.7196C146.587 55.0213 146.25 54.2206 145.644 53.7209C145.15 53.3356 144.451 52.8601 143.782 52.9022C143.651 52.9022 143.651 53.1129 143.782 53.1009C144.351 53.0587 144.932 53.45 145.35 53.7751C145.813 54.1424 146.119 54.618 146.369 55.1357C146.631 55.6534 146.937 56.2013 147.037 56.7612C147.137 57.309 147.093 57.8809 146.906 58.4107C146.731 58.9284 146.369 59.5003 145.819 59.711C145.25 59.9217 144.657 59.5726 144.232 59.2355C143.276 58.4769 142.608 57.4836 142.27 56.3518C142.052 55.6535 141.789 54.8407 142.127 54.1544C142.42 53.5403 143.045 53.0467 143.782 53.1189C143.913 53.1129 143.913 52.9142 143.782 52.9022Z" fill="white"/> -<path d="M143.782 52.9022C143.145 52.848 142.564 53.1852 142.183 53.6607C141.764 54.2086 141.702 54.7685 141.833 55.4126C141.995 56.1953 142.208 56.996 142.633 57.7063C142.939 58.2361 143.376 58.7117 143.826 59.1211C144.263 59.5124 144.8 59.9157 145.413 59.9458C145.981 59.9759 146.444 59.5967 146.75 59.1753C147.1 58.6696 147.275 58.0555 147.3 57.4535C147.331 56.8213 147.156 56.2916 146.906 55.7196C146.587 55.0213 146.25 54.2206 145.644 53.7209C145.15 53.3356 144.451 52.8601 143.782 52.9022ZM143.782 52.9022C143.651 52.9022 143.651 53.1129 143.782 53.1009C144.351 53.0587 144.932 53.45 145.35 53.7751C145.813 54.1424 146.119 54.618 146.369 55.1357C146.631 55.6534 146.937 56.2013 147.037 56.7612C147.137 57.309 147.093 57.8809 146.906 58.4107C146.731 58.9284 146.369 59.5003 145.819 59.711C145.25 59.9217 144.657 59.5726 144.232 59.2355C143.276 58.4769 142.608 57.4836 142.27 56.3518C142.052 55.6535 141.789 54.8407 142.127 54.1544C142.42 53.5403 143.045 53.0467 143.782 53.1189C143.913 53.1129 143.913 52.9142 143.782 52.9022Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M143.782 52.9022C143.145 52.848 142.564 53.1852 142.183 53.6607C141.764 54.2086 141.702 54.7685 141.833 55.4126C141.995 56.1953 142.208 56.996 142.633 57.7063C142.939 58.2361 143.376 58.7117 143.826 59.1211C144.263 59.5124 144.8 59.9157 145.413 59.9458C145.981 59.9759 146.444 59.5967 146.75 59.1753C147.1 58.6696 147.275 58.0555 147.3 57.4535C147.331 56.8213 147.156 56.2916 146.906 55.7196C146.587 55.0213 146.25 54.2206 145.644 53.7209C145.15 53.3356 144.451 52.8601 143.782 52.9022ZM143.782 52.9022C143.651 52.9022 143.651 53.1129 143.782 53.1009C144.351 53.0587 144.932 53.45 145.35 53.7751C145.813 54.1424 146.119 54.618 146.369 55.1357C146.631 55.6534 146.937 56.2013 147.037 56.7612C147.137 57.309 147.093 57.8809 146.906 58.4107C146.731 58.9284 146.369 59.5003 145.819 59.711C145.25 59.9217 144.657 59.5726 144.232 59.2355C143.276 58.4769 142.608 57.4836 142.27 56.3518C142.052 55.6535 141.789 54.8407 142.127 54.1544C142.42 53.5403 143.045 53.0467 143.782 53.1189C143.913 53.1129 143.913 52.9142 143.782 52.9022Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M149.743 61.0895C148.755 60.656 148.393 63.329 149.861 63.4554C151.192 63.5818 151.267 61.1437 149.743 61.0895Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M149.742 61.9023C149.686 61.9023 149.667 61.9445 149.623 62.0167C149.548 62.2515 149.623 62.4381 149.898 62.396C149.973 62.1672 149.885 61.9144 149.742 61.9023Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M149.855 41.5242C150.261 41.452 150.929 41.5543 151.323 41.4098C152.066 41.157 151.629 40.4707 151.192 40.0673C150.161 39.1041 149.155 39.6339 147.937 39.7482C147.905 40.3202 147.574 42.9269 148.561 42.8125C148.574 42.5597 148.318 41.5242 148.53 41.3556C148.867 41.0907 149.667 42.3309 149.855 41.5242Z" fill="#DA3635" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M145.362 47.8875C145.419 49.2722 144.969 50.7832 144.725 52.1257C144.607 52.6977 144.307 53.4261 144.375 54.0161C144.538 55.4308 145.131 53.2455 145.612 53.7813C145.787 53.3478 145.569 52.7157 145.556 52.2401C145.525 51.5418 145.612 51.0361 145.875 50.3919C146.106 49.8019 146.556 49.1578 146.687 48.5437C146.831 47.8032 146.075 47.7852 145.437 47.7852" fill="white"/> -<path d="M145.362 47.8875C145.419 49.2722 144.969 50.7832 144.725 52.1257C144.607 52.6977 144.307 53.4261 144.375 54.0161C144.538 55.4308 145.131 53.2455 145.612 53.7813C145.787 53.3478 145.569 52.7157 145.556 52.2401C145.525 51.5418 145.612 51.0361 145.875 50.3919C146.106 49.8019 146.556 49.1578 146.687 48.5437C146.831 47.8032 146.075 47.7852 145.437 47.7852" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M145.362 47.8875C145.419 49.2722 144.969 50.7832 144.725 52.1257C144.607 52.6977 144.307 53.4261 144.375 54.0161C144.538 55.4308 145.131 53.2455 145.612 53.7813C145.787 53.3478 145.569 52.7157 145.556 52.2401C145.525 51.5418 145.612 51.0361 145.875 50.3919C146.106 49.8019 146.556 49.1578 146.687 48.5437C146.831 47.8032 146.075 47.7852 145.437 47.7852" fill="white"/> -<path d="M145.362 47.8875C145.419 49.2722 144.969 50.7832 144.725 52.1257C144.607 52.6977 144.307 53.4261 144.375 54.0161C144.538 55.4308 145.131 53.2455 145.612 53.7813C145.787 53.3478 145.569 52.7157 145.556 52.2401C145.525 51.5418 145.612 51.0361 145.875 50.3919C146.106 49.8019 146.556 49.1578 146.687 48.5437C146.831 47.8032 146.075 47.7852 145.437 47.7852" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M151.204 55.1542C151.204 56.5388 151.423 57.8693 151.379 59.2539C151.367 59.6031 151.479 59.856 151.117 59.9944C150.711 60.151 150.373 59.7837 150.273 59.4767C150.086 58.8747 150.217 57.8512 150.217 57.2251C150.217 56.8458 150.03 55.8947 150.117 55.5575C150.217 55.2084 150.773 54.3535 151.06 54.8291" fill="white"/> -<path d="M151.204 55.1542C151.204 56.5388 151.423 57.8693 151.379 59.2539C151.367 59.6031 151.479 59.856 151.117 59.9944C150.711 60.151 150.373 59.7837 150.273 59.4767C150.086 58.8747 150.217 57.8512 150.217 57.2251C150.217 56.8458 150.03 55.8947 150.117 55.5575C150.217 55.2084 150.773 54.3535 151.06 54.8291" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M151.204 55.1542C151.204 56.5388 151.423 57.8693 151.379 59.2539C151.367 59.6031 151.479 59.856 151.117 59.9944C150.711 60.151 150.373 59.7837 150.273 59.4767C150.086 58.8747 150.217 57.8512 150.217 57.2251C150.217 56.8458 150.03 55.8947 150.117 55.5575C150.217 55.2084 150.773 54.3535 151.06 54.8291" fill="white"/> -<path d="M151.204 55.1542C151.204 56.5388 151.423 57.8693 151.379 59.2539C151.367 59.6031 151.479 59.856 151.117 59.9944C150.711 60.151 150.373 59.7837 150.273 59.4767C150.086 58.8747 150.217 57.8512 150.217 57.2251C150.217 56.8458 150.03 55.8947 150.117 55.5575C150.217 55.2084 150.773 54.3535 151.06 54.8291" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M152.11 53.6726C151.648 53.8532 152.198 55.8579 152.254 56.2613C152.31 56.6225 152.398 56.9475 152.529 57.2967C152.629 57.5797 152.629 58.1636 152.773 58.3864C152.96 58.6693 153.541 58.7356 153.772 58.5128C154.035 58.26 154.047 58.6392 154.047 58.3141C154.047 57.4713 153.916 55.6833 153.828 54.8585C153.772 54.3107 153.579 52.5769 153.016 52.4625C152.473 52.3542 152.529 53.4619 152.11 53.6726Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M154.996 58.2902C155.227 58.2902 155.621 58.1758 155.783 58.3444C155.871 58.4588 155.827 58.9584 155.871 59.2233C155.902 59.4461 156.033 59.7832 155.946 60.0059C155.89 60.1324 155.99 60.313 155.902 60.4274C155.771 60.626 155.571 60.8307 155.309 60.6802C155.209 60.608 154.99 60.5418 154.977 60.4454C154.946 60.2648 155.052 60.1384 155.065 59.9277C155.121 59.3678 154.934 58.7959 154.99 58.248" fill="white"/> -<path d="M154.996 58.2902C155.227 58.2902 155.621 58.1758 155.783 58.3444C155.871 58.4588 155.827 58.9584 155.871 59.2233C155.902 59.4461 156.033 59.7832 155.946 60.0059C155.89 60.1324 155.99 60.313 155.902 60.4274C155.771 60.626 155.571 60.8307 155.309 60.6802C155.209 60.608 154.99 60.5418 154.977 60.4454C154.946 60.2648 155.052 60.1384 155.065 59.9277C155.121 59.3678 154.934 58.7959 154.99 58.248" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M154.996 58.2902C155.227 58.2902 155.621 58.1758 155.783 58.3444C155.871 58.4588 155.827 58.9584 155.871 59.2233C155.902 59.4461 156.033 59.7832 155.946 60.0059C155.89 60.1324 155.99 60.313 155.902 60.4274C155.771 60.626 155.571 60.8307 155.309 60.6802C155.209 60.608 154.99 60.5418 154.977 60.4454C154.946 60.2648 155.052 60.1384 155.065 59.9277C155.121 59.3678 154.934 58.7959 154.99 58.248" fill="white"/> -<path d="M154.996 58.2902C155.227 58.2902 155.621 58.1758 155.783 58.3444C155.871 58.4588 155.827 58.9584 155.871 59.2233C155.902 59.4461 156.033 59.7832 155.946 60.0059C155.89 60.1324 155.99 60.313 155.902 60.4274C155.771 60.626 155.571 60.8307 155.309 60.6802C155.209 60.608 154.99 60.5418 154.977 60.4454C154.946 60.2648 155.052 60.1384 155.065 59.9277C155.121 59.3678 154.934 58.7959 154.99 58.248" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M154.997 58.4706C155.39 58.4706 155.784 59.3676 155.809 59.789C155.821 59.9455 155.734 60.5295 155.621 60.6319C155.39 60.8426 155.053 60.4091 154.94 60.4513C156.496 62.2453 156.19 56.9354 154.984 58.1274" fill="white"/> -<path d="M154.997 58.4706C155.39 58.4706 155.784 59.3676 155.809 59.789C155.821 59.9455 155.734 60.5295 155.621 60.6319C155.39 60.8426 155.053 60.4091 154.94 60.4513C156.496 62.2453 156.19 56.9354 154.984 58.1274" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M154.997 58.4706C155.39 58.4706 155.784 59.3676 155.809 59.789C155.821 59.9455 155.734 60.5295 155.621 60.6319C155.39 60.8426 155.053 60.4091 154.94 60.4513C156.496 62.2453 156.19 56.9354 154.984 58.1274" fill="white"/> -<path d="M154.997 58.4706C155.39 58.4706 155.784 59.3676 155.809 59.789C155.821 59.9455 155.734 60.5295 155.621 60.6319C155.39 60.8426 155.053 60.4091 154.94 60.4513C156.496 62.2453 156.19 56.9354 154.984 58.1274" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M152.947 59.2535C152.684 59.5063 152.016 59.6568 151.654 59.8013C151.379 59.9157 151.116 59.9699 150.841 60.0963C150.404 60.295 149.998 60.5599 149.592 60.7826C150.317 61.2161 150.898 61.9746 151.541 61.9987C152.253 62.0408 153.04 61.5773 153.678 61.198C154.084 60.9452 155.158 60.1926 155.346 59.6448C155.49 59.2234 153.69 58.23 153.415 58.8622" fill="white"/> -<path d="M152.947 59.2535C152.684 59.5063 152.016 59.6568 151.654 59.8013C151.379 59.9157 151.116 59.9699 150.841 60.0963C150.404 60.295 149.998 60.5599 149.592 60.7826C150.317 61.2161 150.898 61.9746 151.541 61.9987C152.253 62.0408 153.04 61.5773 153.678 61.198C154.084 60.9452 155.158 60.1926 155.346 59.6448C155.49 59.2234 153.69 58.23 153.415 58.8622" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M152.947 59.2535C152.684 59.5063 152.016 59.6568 151.654 59.8013C151.379 59.9157 151.116 59.9699 150.841 60.0963C150.404 60.295 149.998 60.5599 149.592 60.7826C150.317 61.2161 150.898 61.9746 151.541 61.9987C152.253 62.0408 153.04 61.5773 153.678 61.198C154.084 60.9452 155.158 60.1926 155.346 59.6448C155.49 59.2234 153.69 58.23 153.415 58.8622" fill="white"/> -<path d="M152.947 59.2535C152.684 59.5063 152.016 59.6568 151.654 59.8013C151.379 59.9157 151.116 59.9699 150.841 60.0963C150.404 60.295 149.998 60.5599 149.592 60.7826C150.317 61.2161 150.898 61.9746 151.541 61.9987C152.253 62.0408 153.04 61.5773 153.678 61.198C154.084 60.9452 155.158 60.1926 155.346 59.6448C155.49 59.2234 153.69 58.23 153.415 58.8622" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M152.935 58.5857C152.773 59.2298 154.478 60.2232 155.184 59.8319C155.722 59.5369 155.053 58.7663 154.634 58.5134C154.285 58.2907 152.779 58.375 152.935 58.5857Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M150.448 59.8738C150.142 60.53 150.635 60.9093 151.247 61.2344C151.51 61.3729 152.859 61.8364 153.134 61.6799C153.79 61.3187 152.366 60.4879 152.103 60.3073C151.872 60.1387 151.579 59.6932 151.435 59.6511C151.291 59.6089 150.448 59.8196 150.329 59.8196" fill="white"/> -<path d="M150.448 59.8738C150.142 60.53 150.635 60.9093 151.247 61.2344C151.51 61.3729 152.859 61.8364 153.134 61.6799C153.79 61.3187 152.366 60.4879 152.103 60.3073C151.872 60.1387 151.579 59.6932 151.435 59.6511C151.291 59.6089 150.448 59.8196 150.329 59.8196" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M150.448 59.8738C150.142 60.53 150.635 60.9093 151.247 61.2344C151.51 61.3729 152.859 61.8364 153.134 61.6799C153.79 61.3187 152.366 60.4879 152.103 60.3073C151.872 60.1387 151.579 59.6932 151.435 59.6511C151.291 59.6089 150.448 59.8196 150.329 59.8196" fill="white"/> -<path d="M150.448 59.8738C150.142 60.53 150.635 60.9093 151.247 61.2344C151.51 61.3729 152.859 61.8364 153.134 61.6799C153.79 61.3187 152.366 60.4879 152.103 60.3073C151.872 60.1387 151.579 59.6932 151.435 59.6511C151.291 59.6089 150.448 59.8196 150.329 59.8196" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M151.073 50.1034C151.467 50.5669 152.16 50.7054 152.585 51.1268C152.904 51.4459 153.166 51.8131 153.485 52.1322C153.76 52.4091 154.122 52.6499 154.341 52.987C154.603 53.3784 154.591 53.8539 154.591 54.3055C154.603 54.8232 154.591 55.3409 154.591 55.8587C154.591 56.3644 154.547 56.8641 154.578 57.3698C154.591 57.7912 154.841 58.0681 154.941 58.4594C154.972 58.4474 154.997 58.4293 155.04 58.4173C154.965 58.2487 154.866 58.0982 154.778 57.9537C154.634 57.7009 154.603 57.4902 154.647 57.2132C154.703 56.7677 154.734 56.3042 154.734 55.8406C154.734 55.365 154.734 54.8774 154.703 54.3958C154.672 54.0346 154.691 53.5951 154.541 53.2459C154.422 52.9509 154.147 52.7161 153.947 52.4753C153.61 52.084 153.279 51.6927 152.941 51.3014C152.46 50.7114 151.81 50.3622 151.123 50.0131C151.073 49.989 151.017 50.0733 151.073 50.1034C151.404 50.2719 151.729 50.4224 152.029 50.6211C152.41 50.8559 152.666 51.1268 152.948 51.4639C153.254 51.8251 153.56 52.1924 153.866 52.5415C154.16 52.8606 154.447 53.1436 154.522 53.5891C154.666 54.5282 154.653 55.5095 154.622 56.4426C154.609 56.8038 154.478 57.2253 154.534 57.5925C154.591 57.9116 154.841 58.1524 154.972 58.4474C154.984 58.5015 155.09 58.4594 155.072 58.4052C155.028 58.2246 154.941 58.0861 154.853 57.9176C154.709 57.6346 154.709 57.3457 154.709 57.0386C154.709 56.5329 154.722 56.0332 154.722 55.5275C154.722 54.9677 154.722 54.4078 154.709 53.8479C154.697 53.5289 154.653 53.2038 154.466 52.9269C154.278 52.6499 154.003 52.4392 153.753 52.2104C153.404 51.8914 153.116 51.5241 152.798 51.175C152.566 50.9402 152.348 50.7716 152.042 50.6151C151.754 50.4465 151.373 50.296 151.154 50.0251C151.104 49.989 151.03 50.0612 151.073 50.1034Z" fill="white"/> -<path d="M151.073 50.1034C151.467 50.5669 152.16 50.7054 152.585 51.1268C152.904 51.4459 153.166 51.8131 153.485 52.1322C153.76 52.4091 154.122 52.6499 154.341 52.987C154.603 53.3784 154.591 53.8539 154.591 54.3055C154.603 54.8232 154.591 55.3409 154.591 55.8587C154.591 56.3644 154.547 56.8641 154.578 57.3698C154.591 57.7912 154.841 58.0681 154.941 58.4594C154.972 58.4474 154.997 58.4293 155.04 58.4173C154.965 58.2487 154.866 58.0982 154.778 57.9537C154.634 57.7009 154.603 57.4902 154.647 57.2132C154.703 56.7677 154.734 56.3042 154.734 55.8406C154.734 55.365 154.734 54.8774 154.703 54.3958C154.672 54.0346 154.691 53.5951 154.541 53.2459C154.422 52.9509 154.147 52.7161 153.947 52.4753C153.61 52.084 153.279 51.6927 152.941 51.3014C152.46 50.7114 151.81 50.3622 151.123 50.0131C151.073 49.989 151.017 50.0733 151.073 50.1034ZM151.073 50.1034C151.404 50.2719 151.729 50.4224 152.029 50.6211C152.41 50.8559 152.666 51.1268 152.948 51.4639C153.254 51.8251 153.56 52.1924 153.866 52.5415C154.16 52.8606 154.447 53.1436 154.522 53.5891C154.666 54.5282 154.653 55.5095 154.622 56.4426C154.609 56.8038 154.478 57.2253 154.534 57.5925C154.591 57.9116 154.841 58.1524 154.972 58.4474C154.984 58.5015 155.09 58.4594 155.072 58.4052C155.028 58.2246 154.941 58.0861 154.853 57.9176C154.709 57.6346 154.709 57.3457 154.709 57.0386C154.709 56.5329 154.722 56.0332 154.722 55.5275C154.722 54.9677 154.722 54.4078 154.709 53.8479C154.697 53.5289 154.653 53.2038 154.466 52.9269C154.278 52.6499 154.003 52.4392 153.753 52.2104C153.404 51.8914 153.116 51.5241 152.798 51.175C152.566 50.9402 152.348 50.7716 152.042 50.6151C151.754 50.4465 151.373 50.296 151.154 50.0251C151.104 49.989 151.03 50.0612 151.073 50.1034Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M151.073 50.1034C151.467 50.5669 152.16 50.7054 152.585 51.1268C152.904 51.4459 153.166 51.8131 153.485 52.1322C153.76 52.4091 154.122 52.6499 154.341 52.987C154.603 53.3784 154.591 53.8539 154.591 54.3055C154.603 54.8232 154.591 55.3409 154.591 55.8587C154.591 56.3644 154.547 56.8641 154.578 57.3698C154.591 57.7912 154.841 58.0681 154.941 58.4594C154.972 58.4474 154.997 58.4293 155.04 58.4173C154.965 58.2487 154.866 58.0982 154.778 57.9537C154.634 57.7009 154.603 57.4902 154.647 57.2132C154.703 56.7677 154.734 56.3042 154.734 55.8406C154.734 55.365 154.734 54.8774 154.703 54.3958C154.672 54.0346 154.691 53.5951 154.541 53.2459C154.422 52.9509 154.147 52.7161 153.947 52.4753C153.61 52.084 153.279 51.6927 152.941 51.3014C152.46 50.7114 151.81 50.3622 151.123 50.0131C151.073 49.989 151.017 50.0733 151.073 50.1034C151.404 50.2719 151.729 50.4224 152.029 50.6211C152.41 50.8559 152.666 51.1268 152.948 51.4639C153.254 51.8251 153.56 52.1924 153.866 52.5415C154.16 52.8606 154.447 53.1436 154.522 53.5891C154.666 54.5282 154.653 55.5095 154.622 56.4426C154.609 56.8038 154.478 57.2253 154.534 57.5925C154.591 57.9116 154.841 58.1524 154.972 58.4474C154.984 58.5015 155.09 58.4594 155.072 58.4052C155.028 58.2246 154.941 58.0861 154.853 57.9176C154.709 57.6346 154.709 57.3457 154.709 57.0386C154.709 56.5329 154.722 56.0332 154.722 55.5275C154.722 54.9677 154.722 54.4078 154.709 53.8479C154.697 53.5289 154.653 53.2038 154.466 52.9269C154.278 52.6499 154.003 52.4392 153.753 52.2104C153.404 51.8914 153.116 51.5241 152.798 51.175C152.566 50.9402 152.348 50.7716 152.042 50.6151C151.754 50.4465 151.373 50.296 151.154 50.0251C151.104 49.989 151.03 50.0612 151.073 50.1034Z" fill="white"/> -<path d="M151.073 50.1034C151.467 50.5669 152.16 50.7054 152.585 51.1268C152.904 51.4459 153.166 51.8131 153.485 52.1322C153.76 52.4091 154.122 52.6499 154.341 52.987C154.603 53.3784 154.591 53.8539 154.591 54.3055C154.603 54.8232 154.591 55.3409 154.591 55.8587C154.591 56.3644 154.547 56.8641 154.578 57.3698C154.591 57.7912 154.841 58.0681 154.941 58.4594C154.972 58.4474 154.997 58.4293 155.04 58.4173C154.965 58.2487 154.866 58.0982 154.778 57.9537C154.634 57.7009 154.603 57.4902 154.647 57.2132C154.703 56.7677 154.734 56.3042 154.734 55.8406C154.734 55.365 154.734 54.8774 154.703 54.3958C154.672 54.0346 154.691 53.5951 154.541 53.2459C154.422 52.9509 154.147 52.7161 153.947 52.4753C153.61 52.084 153.279 51.6927 152.941 51.3014C152.46 50.7114 151.81 50.3622 151.123 50.0131C151.073 49.989 151.017 50.0733 151.073 50.1034ZM151.073 50.1034C151.404 50.2719 151.729 50.4224 152.029 50.6211C152.41 50.8559 152.666 51.1268 152.948 51.4639C153.254 51.8251 153.56 52.1924 153.866 52.5415C154.16 52.8606 154.447 53.1436 154.522 53.5891C154.666 54.5282 154.653 55.5095 154.622 56.4426C154.609 56.8038 154.478 57.2253 154.534 57.5925C154.591 57.9116 154.841 58.1524 154.972 58.4474C154.984 58.5015 155.09 58.4594 155.072 58.4052C155.028 58.2246 154.941 58.0861 154.853 57.9176C154.709 57.6346 154.709 57.3457 154.709 57.0386C154.709 56.5329 154.722 56.0332 154.722 55.5275C154.722 54.9677 154.722 54.4078 154.709 53.8479C154.697 53.5289 154.653 53.2038 154.466 52.9269C154.278 52.6499 154.003 52.4392 153.753 52.2104C153.404 51.8914 153.116 51.5241 152.798 51.175C152.566 50.9402 152.348 50.7716 152.042 50.6151C151.754 50.4465 151.373 50.296 151.154 50.0251C151.104 49.989 151.03 50.0612 151.073 50.1034Z" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M150.555 43.5645C151.673 43.4381 152.648 44.6963 152.329 45.7498C152.154 46.3398 151.454 46.0569 151.211 46.5084C150.992 46.9117 151.255 47.893 151.267 48.3445C151.323 49.4944 151.123 50.8369 150.249 51.6617C149.293 52.6008 147.825 52.3179 146.588 52.1373C145.632 51.9988 145.338 52.8356 145.601 50.9212C145.744 49.8556 146.388 49.1031 146.588 48.0917C146.213 47.893 145.875 48.2061 145.544 47.9532C145.169 47.6582 145.413 47.0984 145.532 46.6769C145.807 45.7137 146.319 45.0274 147.1 44.3833C147.419 44.1184 147.812 43.8354 148.249 43.8775C148.874 43.9498 148.918 44.6903 149.38 44.8287C149.993 45.0093 149.774 44.2267 149.993 43.9317C150.217 43.6367 150.174 43.5223 150.555 43.5645Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M150.991 50.5244C151.572 51.3251 153.928 52.2161 153.709 53.3961C153.565 54.2208 152.578 54.3172 151.953 54.0402C151.285 53.7212 150.66 53.1733 149.892 53.1974C150.285 53.6188 151.185 54.1486 151.316 54.7506C151.416 55.2563 150.591 55.6597 150.079 55.7861C149.729 55.3526 149.542 54.8229 149.048 54.4556C148.63 54.1486 148.061 53.9921 147.58 53.8235C146.78 53.5285 145.387 53.2095 145.531 52.1017C145.587 51.6562 146.387 51.7826 146.924 51.879C147.461 51.9753 147.88 52.1318 148.448 52.0897C149.086 52.0475 149.611 51.9211 150.104 51.5178C150.435 51.2529 150.466 50.9037 150.947 50.6087" fill="white"/> -<path d="M150.991 50.5244C151.572 51.3251 153.928 52.2161 153.709 53.3961C153.565 54.2208 152.578 54.3172 151.953 54.0402C151.285 53.7212 150.66 53.1733 149.892 53.1974C150.285 53.6188 151.185 54.1486 151.316 54.7506C151.416 55.2563 150.591 55.6597 150.079 55.7861C149.729 55.3526 149.542 54.8229 149.048 54.4556C148.63 54.1486 148.061 53.9921 147.58 53.8235C146.78 53.5285 145.387 53.2095 145.531 52.1017C145.587 51.6562 146.387 51.7826 146.924 51.879C147.461 51.9753 147.88 52.1318 148.448 52.0897C149.086 52.0475 149.611 51.9211 150.104 51.5178C150.435 51.2529 150.466 50.9037 150.947 50.6087" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M150.991 50.5244C151.572 51.3251 153.928 52.2161 153.709 53.3961C153.565 54.2208 152.578 54.3172 151.953 54.0402C151.285 53.7212 150.66 53.1733 149.892 53.1974C150.285 53.6188 151.185 54.1486 151.316 54.7506C151.416 55.2563 150.591 55.6597 150.079 55.7861C149.729 55.3526 149.542 54.8229 149.048 54.4556C148.63 54.1486 148.061 53.9921 147.58 53.8235C146.78 53.5285 145.387 53.2095 145.531 52.1017C145.587 51.6562 146.387 51.7826 146.924 51.879C147.461 51.9753 147.88 52.1318 148.448 52.0897C149.086 52.0475 149.611 51.9211 150.104 51.5178C150.435 51.2529 150.466 50.9037 150.947 50.6087" fill="white"/> -<path d="M150.991 50.5244C151.572 51.3251 153.928 52.2161 153.709 53.3961C153.565 54.2208 152.578 54.3172 151.953 54.0402C151.285 53.7212 150.66 53.1733 149.892 53.1974C150.285 53.6188 151.185 54.1486 151.316 54.7506C151.416 55.2563 150.591 55.6597 150.079 55.7861C149.729 55.3526 149.542 54.8229 149.048 54.4556C148.63 54.1486 148.061 53.9921 147.58 53.8235C146.78 53.5285 145.387 53.2095 145.531 52.1017C145.587 51.6562 146.387 51.7826 146.924 51.879C147.461 51.9753 147.88 52.1318 148.448 52.0897C149.086 52.0475 149.611 51.9211 150.104 51.5178C150.435 51.2529 150.466 50.9037 150.947 50.6087" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -<path d="M149.48 61.0475C150.642 60.9331 151.454 63.1907 150.148 63.4014C150.092 63.4134 150.117 63.5158 150.18 63.4977C151.604 63.275 150.761 60.8368 149.499 60.9512C149.405 60.9632 149.405 61.0595 149.48 61.0475Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/> -</svg> diff --git a/src/assets/ico/sprite.svg b/src/assets/ico/sprite.svg index c3dbc3c0e2f2a627637cbf558623ed3f792c2678..de3f6117e8881e6fa74efc10fe760e45482191f0 100644 --- a/src/assets/ico/sprite.svg +++ b/src/assets/ico/sprite.svg @@ -2719,4 +2719,10 @@ <path d="M6 16L12.5 9L19 16" stroke="black" stroke-linecap="round" stroke-linejoin="round" /> </symbol> -</svg> + <symbol id="appointement" width="20" height="21" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path + d="M15.8333 3.83366H15V3.00033C15 2.54199 14.625 2.16699 14.1667 2.16699C13.7083 2.16699 13.3333 2.54199 13.3333 3.00033V3.83366H6.66667V3.00033C6.66667 2.54199 6.29167 2.16699 5.83333 2.16699C5.375 2.16699 5 2.54199 5 3.00033V3.83366H4.16667C3.24167 3.83366 2.50833 4.58366 2.50833 5.50033L2.5 17.167C2.5 18.0837 3.24167 18.8337 4.16667 18.8337H15.8333C16.75 18.8337 17.5 18.0837 17.5 17.167V5.50033C17.5 4.58366 16.75 3.83366 15.8333 3.83366ZM15.8333 16.3337C15.8333 16.792 15.4583 17.167 15 17.167H5C4.54167 17.167 4.16667 16.792 4.16667 16.3337V8.00033H15.8333V16.3337ZM5.83333 9.66699H7.5V11.3337H5.83333V9.66699ZM9.16667 9.66699H10.8333V11.3337H9.16667V9.66699ZM12.5 9.66699H14.1667V11.3337H12.5V9.66699Z" + fill="white" /> + </symbol> + +</svg> \ No newline at end of file diff --git a/src/assets/scss/_color.scss b/src/assets/scss/_color.scss index 50916eea626c1c5d22604b805d875d46548ccfb4..71341a6b16b023ea2cf8edaaa7d2b4695e5913b9 100644 --- a/src/assets/scss/_color.scss +++ b/src/assets/scss/_color.scss @@ -25,7 +25,6 @@ $orange-warning: #da6c2e; /* OTHERS */ $blue: #348899; $blue-light: #c9ecf3; -$blueRdvs: #1f2952; /* APP COLORS */ $primary-color: $red; $primary-color-dark: $red-dark;