{"version":3,"file":"vrpatient.all.min.js","mappings":"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C,iBAwCAizC,eAjsBZ,wBAyhBA,SAAY5yC,GAEX,oBACA,gBACA,8BACA,gCACA,0BACA,sBACA,wCACA,8BACA,gCACA,kCACA,sBACA,gCACA,kCACA,oCACA,wCACA,8BACA,0BACA,sDACA,sBACA,oBACA,4BACA,gCACA,0CACA,0BACA,kCACA,cACA,8CACA,4BACA,wBACA,4BACA,yBACA,CAjCD,CAAYA,WAAQ,iBAARA,SAAQ,KAmCpB,MAAa6yC,cAELzW,gBACAG,SACAuW,kBACA9T,uBACAvC,qBACAC,yBACAgW,iBACAK,qBACAC,4BACAC,4BACAlrB,QACAmrB,eACA9qB,eACAD,SACAG,WACA4gB,qBACAzyB,kBACAG,sBACAJ,yBACAG,6BACAuuB,oBACAlD,qBACAmR,+BACAC,8BACApS,2BACAsC,0BACA+P,aACAnN,eACAoN,eACAC,iBACAC,iBACA91C,kBACA+E,2BACApF,0BACA+gB,2BACAriB,+BACAa,wBACA62C,oBACAC,4BACAC,mCACAj0C,iBACAD,uBACAm0C,wBACA1jC,sBACAo6B,6BACA77B,kBACAX,YACA0+B,sBACAzyC,MACA85C,wBACAC,kCACAC,yBACAC,mCACA7sB,yCACA8sB,mBACAC,qBACAC,qBACAjnC,oBACA0B,8BACAF,yBACAwiC,UACAxwC,yCACA4T,2BACA5S,kBACAkuC,eACAhjB,6BACA5c,wCACA0E,mBACA0/B,iBACAvX,4BACAoM,qBACAz1B,0BACAqX,mDACAwpB,iCACPC,mBACAloB,mCACA1gB,eACAkjC,iCACAH,mBACAE,kCACAhM,wCACAyD,yBAnFD,oCAsFA,SAAYuM,GAEX,mBACA,yBACA,kBACA,CALD,CAAYA,6BAA0B,mCAA1BA,2BAA0B,KAOtC,SAAYhzC,GAEX,qBACA,uBACA,4CACA,CALD,CAAYA,mBAAgB,yBAAhBA,iBAAgB,KAO5B,MAAM40C,UAEEv6C,GACA+J,KACAglB,OACAnL,KACAqL,IACAC,SACAC,cACAqrB,aACA70B,WACA80B,OAGR,MAAaC,eAEL16C,GACA+J,KACAglB,OACAnL,KACAqL,IACA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BACP6M,SAGJ,6BAEWnrB,GACAue,YACAH,WACA7Z,eACAqH,MACAoY,UACAyI,cACAlsB,UAGX,SAAY6f,GAER,wBACA,mBACA,oBACA,iCACA,oCACH,CAPD,CAAYA,IAAY,eAAZA,EAAY,KASxB,SAAY5S,GAER,oBACA,wBACA,mCACH,CALD,CAAYA,IAAU,aAAVA,EAAU,KAOtB,mBAEW08B,WACAxlB,iBACArL,KACAqvB,aACAyB,cACAgB,iBACA+G,gBACA3E,mBAGX,kCAEWvtC,GACAyf,SACAytB,WACAgT,gBACAxgC,UAGX,qBAEW1f,GACAqZ,KACA0xB,YACAzL,OACA6gB,SACApU,WACAf,eACAa,mBACAV,iBACA1vB,YAcX,iBAEWzb,GACAqyB,KACA5S,SACAC,SACAwtB,WACAkT,kBACAC,SACAlV,iBACAmV,YACA/S,mBAGX,SAAY8R,GAER,iCACA,mCACA,qDACA,+CACA,yBACA,yDACA,uCACA,qCACA,yCACA,gCACA,uBACH,CAbD,CAAYA,IAAuB,0BAAvBA,EAAuB,KAenC,SAAYC,GAER,6BACA,0BACH,CAJD,CAAYA,IAAe,kBAAfA,EAAe,KAM3B,aAEWt/C,GACAugD,MACAC,MACAC,OACA12C,KACA22C,oBACAC,eACA/lB,SACA9uB,SACAC,UACA60C,WACAC,QACAC,gBACAnmB,sBAGX,YAEWE,SAGX,yBAEWjB,YACAC,UACAlhB,SAGX,uBAEWoW,OACA8L,QACAhB,UACAD,aAGX,uBAEWjhB,QACAihB,YACAmnB,SAGX,oBAEWtzB,UACAlgB,MACA+f,YAGX,SAAYC,GAER,6BACA,6BACA,yBACA,yBACA,mCACA,6BACA,qCACA,+BACA,yBACA,iBACH,CAZD,CAAYA,IAAe,kBAAfA,EAAe,KAc3B,uBAEWjU,IACAs3B,MACAD,KACA13B,MACAG,QACAy3B,QACAC,cAGX,0BAEW9wC,GACA8Q,UACA/G,KACA2E,QACAgC,YACA/B,UACAE,WACAE,sBACAiyC,wBACA/wC,aACAQ,+B,oFCzVX,eACA,SACA,QAEA,kBAESnS,kBAER,iBAAOC,IAEN,IAAAI,MAAK,EAAA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","sources":["webpack://vrpatient/webpack/universalModuleDefinition","webpack://vrpatient/./src/booking/activityList.ts","webpack://vrpatient/./src/booking/booking.ts","webpack://vrpatient/./src/booking/bookingFor.ts","webpack://vrpatient/./src/booking/confirmation1.ts","webpack://vrpatient/./src/booking/confirmation2.ts","webpack://vrpatient/./src/booking/doctorList.ts","webpack://vrpatient/./src/booking/fileLoading.ts","webpack://vrpatient/./src/booking/fromList.ts","webpack://vrpatient/./src/booking/paymentResult.ts","webpack://vrpatient/./src/booking/resourceTimeslots.ts","webpack://vrpatient/./src/booking/selectionListControl.ts","webpack://vrpatient/./src/booking/timeslotList.ts","webpack://vrpatient/./src/booking/waitingList.ts","webpack://vrpatient/./src/booking/workplaceList.ts","webpack://vrpatient/./src/booking/workplaceTimeslots.ts","webpack://vrpatient/./src/info/infoPage.ts","webpack://vrpatient/./src/login/changePassword.ts","webpack://vrpatient/./src/login/forgotPassword.ts","webpack://vrpatient/./src/login/login.ts","webpack://vrpatient/./src/login/register.ts","webpack://vrpatient/./src/main.ts","webpack://vrpatient/./src/privateArea/appointmentDetail.ts","webpack://vrpatient/./src/privateArea/appointmentList.ts","webpack://vrpatient/./src/privateArea/documentList.ts","webpack://vrpatient/./src/privateArea/fileList.ts","webpack://vrpatient/./src/privateArea/paymentData.ts","webpack://vrpatient/./src/privateArea/profile.ts","webpack://vrpatient/./src/privateArea/reportList.ts","webpack://vrpatient/./src/privateArea/reportSendingStorageList.ts","webpack://vrpatient/./src/rotator.ts","webpack://vrpatient/./src/sailor/sailorHome.ts","webpack://vrpatient/./src/sailor/sailorRegister.ts","webpack://vrpatient/./src/shared/authenticationManager.ts","webpack://vrpatient/./src/shared/common.ts","webpack://vrpatient/./src/shared/dashboard.ts","webpack://vrpatient/./src/shared/menu.ts","webpack://vrpatient/./src/shared/noInternetConnection.ts","webpack://vrpatient/./src/shared/vrManager.ts","webpack://vrpatient/./src/shared/webApi.ts","webpack://vrpatient/./src/support.ts","webpack://vrpatient/webpack/bootstrap","webpack://vrpatient/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"vrpatient\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vrpatient\"] = factory();\n\telse\n\t\troot[\"vrpatient\"] = factory();\n})(this, () => {\nreturn ","import { Rotator, puma } from \"../rotator\";\r\nimport { SelectionListControl } from \"./selectionListControl\";\r\nimport { Booking, StepEnum } from \"./booking\";\r\nimport { DoctorList } from \"./doctorList\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\nimport { ActivityTypeGroupResult, ActivityTypeResponse, OnlineBookingModeEnum } from \"../../src/shared/common\";\r\nimport { Support } from \"../../src/support\";\r\nimport { WorkplaceList } from \"./workplaceList\";\r\n\r\nexport class ActivityList\r\n{\r\n private static _container: HTMLElement;\r\n private static _parameters?: ActivityListParameters;\r\n\r\n static initialize(parameters?: ActivityListParameters)\r\n {\r\n this._parameters = parameters;\r\n this._container = puma(\"
\").appendTo(Rotator.container())[0];\r\n Rotator.title(\"PRENOTA\");\r\n this.createControls();\r\n }\r\n\r\n static createControls()\r\n {\r\n Booking.createStep(StepEnum.Activity, this._container, true, () => Rotator.back());\r\n\r\n let selectionListControl = new SelectionListControl(\r\n {\r\n container: this._container,\r\n selectionFocusMode: true,\r\n rebind:\r\n {\r\n authKey: \"10(P9m+U3aM@10tt-Oeo\",\r\n method: \"/api/BookingWebApi/GetActivityTypeGroups\",\r\n itemsPropertyName: \"activityTypeGroupList\",\r\n rebindAtStartup: true,\r\n parameters: () =>\r\n {\r\n return {\r\n \"plantIdList\": [Rotator.configuration().plant.id],\r\n \"activityTypeGroupId\": Rotator.webComponentParameters()[0].specificActivityTypeGroupId,\r\n \"activityTypeGroupIdList\": Rotator.webComponentParameters()[0].specificActivityTypeGroupIdList,\r\n \"activityTypeId\": Rotator.webComponentParameters()[0].specificActivityTypeId,\r\n \"activityTypeIdList\": Rotator.webComponentParameters()[0].specificActivityTypeIdList,\r\n \"resourceIdList\": (Rotator.bookingParameters().resource) != null ? [Rotator.bookingParameters().resource.id] : null,\r\n \"workplaceIdList\": (Rotator.bookingParameters().workplace) != null ? [Rotator.bookingParameters().workplace!.id] : null,\r\n \"sailor\": Rotator.sailor()\r\n }\r\n },\r\n callback: () => \r\n {\r\n let specificActivityTypeGroupId = Rotator.webComponentParameters()[0].specificActivityTypeGroupId;\r\n let specificActivityTypeGroupIdList = Rotator.webComponentParameters()[0].specificActivityTypeGroupIdList;\r\n\r\n if (specificActivityTypeGroupId != null\r\n || (specificActivityTypeGroupIdList != null && specificActivityTypeGroupIdList.length == 1)\r\n || selectionListControl.items().length == 1)\r\n puma(\".vrPatientSelectionItemText\").first().click();\r\n\r\n if (Rotator.bookingParameters().activityType != null)\r\n selectionListControl.select(Rotator.bookingParameters().activityType.id);\r\n }\r\n },\r\n onSelect: (e) =>\r\n {\r\n let activityTypeResponse = e.dataItem as ActivityTypeResponse;\r\n if (activityTypeResponse.onlineBookingModeEnum == OnlineBookingModeEnum.ShowAlways\r\n || activityTypeResponse.onlineBookingModeEnum == OnlineBookingModeEnum.ShowOnlyIfAvailable)\r\n {\r\n Rotator.bookingParameters().activityType = activityTypeResponse;\r\n DoctorList.getResources(undefined, Rotator.container());\r\n Rotator.back();\r\n\r\n if (activityTypeResponse.onlineBookingDoNotChooseDoctor === true)\r\n Booking.doctorSlotVisible(false);\r\n }\r\n else\r\n {\r\n //#region Footer items\r\n let footerItems: vr.WindowFooterItem[] = [];\r\n if (Rotator.configuration().appNoAvailabilitiesPhoneNumber != null && Rotator.configuration().appNoAvailabilitiesPhoneNumber.length > 0)\r\n {\r\n let callPhoneItem: vr.WindowFooterItem =\r\n {\r\n text: \"Chiama\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n onClick: (e) =>\r\n {\r\n let link = document.createElement(\"a\");\r\n link.href = \"tel:\" + Rotator.configuration().appNoAvailabilitiesPhoneNumber;\r\n link.click();\r\n }\r\n }\r\n footerItems.push(callPhoneItem);\r\n }\r\n\r\n if (Rotator.configuration().appNoAvailabilitiesMail != null && Rotator.configuration().appNoAvailabilitiesMail.length > 0)\r\n {\r\n let mailItem: vr.WindowFooterItem =\r\n {\r\n text: \"Email\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n onClick: (e) =>\r\n {\r\n let link = document.createElement(\"a\");\r\n link.href = \"mailto:\" + Rotator.configuration().appNoAvailabilitiesMail;\r\n link.click();\r\n }\r\n }\r\n footerItems.push(mailItem);\r\n }\r\n\r\n let closeItem: vr.WindowFooterItem =\r\n {\r\n text: \"Chiudi\",\r\n type: vr.WindowFooterItemTypeEnum.Close,\r\n colorSettings: { textColor: Rotator.color() }\r\n }\r\n footerItems.push(closeItem);\r\n //#endregion\r\n\r\n Support.dialog(Rotator.configuration().appNoOnlineBookingMessage, footerItems);\r\n e.preventDefault();\r\n }\r\n },\r\n onClear: (e) =>\r\n {\r\n (Rotator.bookingParameters().activityType as any) = null;\r\n puma(\".vrPatientDivBookingStep\").find(\".vrPatient_bookingChoice\").html(\"Cerca una prestazione\");\r\n\r\n //#region Manage workplaces\r\n //This piece of code fix the behavior described below: \r\n //if you select an activityType used only on one workplace and you have a parameter \"appShowWorkplaces\" set to false, \r\n //then you cannot change workplace anymore, so you will only see the activityTypes related to this workplace\r\n if (!Rotator.configuration().appShowWorkplaces)\r\n {\r\n WorkplaceList.getWorkplaces((e) =>\r\n {\r\n if (e.workplacesList.length > 2)\r\n {\r\n Rotator.bookingParameters().workplace = null;\r\n selectionListControl.rebind();\r\n }\r\n });\r\n }\r\n //#endregion\r\n }\r\n }\r\n );\r\n }\r\n\r\n static getActivityTypeGroups(callback?: (e: ActivityTypeGroupResult[]) => void, async = true)\r\n {\r\n let request = new GetActivityTypeGroupsRequest();\r\n request.plantIdList = [Rotator.configuration().plant.id];\r\n request.resourceIdList = (Rotator.bookingParameters().resource) != null ? [Rotator.bookingParameters().resource.id] : null;\r\n request.workplaceIdList = (Rotator.bookingParameters().workplace) != null ? [Rotator.bookingParameters().workplace!.id] : null;\r\n request.activityTypeGroupId = Rotator.webComponentParameters()[0].specificActivityTypeGroupId;\r\n request.activityTypeGroupIdList = Rotator.webComponentParameters()[0].specificActivityTypeGroupIdList;\r\n request.activityTypeId = Rotator.webComponentParameters()[0].specificActivityTypeId;\r\n request.activityTypeIdList = Rotator.webComponentParameters()[0].specificActivityTypeIdList;\r\n request.isSailor = Rotator.sailor();\r\n request.call(\r\n {\r\n success: (response: GetActivityTypeGroupsResponse) =>\r\n {\r\n if (callback != null)\r\n callback(response.activityTypeGroupList);\r\n },\r\n mode: (async) ? vrshared.WebApiModeEnum.Async : vrshared.WebApiModeEnum.Sync,\r\n loader: false\r\n });\r\n }\r\n}\r\n\r\n//#region Classes\r\nclass GetActivityTypeGroupsRequest extends WebApiRequestBase\r\n{\r\n public method: string = \"/api/BookingWebApi/GetActivityTypeGroups\";\r\n\r\n public plantIdList: number[];\r\n public onlyBookableOnline?: boolean;\r\n public resourceIdList: number[] | null;\r\n public workplaceIdList: number[] | null;\r\n public activityTypeGroupId: number;\r\n public activityTypeGroupIdList: number[];\r\n public activityTypeId: number;\r\n public activityTypeIdList: number[];\r\n public isSailor: boolean;\r\n}\r\n\r\nclass GetActivityTypeGroupsResponse extends WebApiResponseBase\r\n{\r\n public activityTypeGroupList: ActivityTypeGroupResult[];\r\n}\r\n\r\nexport class ActivityListParameters\r\n{\r\n loader: HTMLElement;\r\n}\r\n//#endregion","import { Support } from \"../../src/support\";\r\nimport { Rotator, puma, PageEnum, AppLoginModeEnum } from \"../../src/rotator\";\r\nimport { ResourceResponse, WorkplaceResponse, ActivityTypeResponse, Timeslot, ActivityTypeItem, OnlineBookingModeEnum, GenderEnum } from \"../../src/shared/common\";\r\nimport { ActivityList } from \"./activityList\";\r\nimport { DoctorList } from \"./doctorList\";\r\nimport { WorkplaceList } from \"./workplaceList\";\r\nimport { VrManager } from \"../../src/shared/vrManager\";\r\nimport { Profile } from \"../../src/privateArea/profile\";\r\nimport { Menu } from \"../../src/shared/menu\";\r\nimport { FileLoaded } from \"./confirmation2\";\r\nimport { BookingForInfo } from \"./bookingFor\";\r\n\r\nexport class Booking\r\n{\r\n private static _container: HTMLElement;\r\n\r\n static initialize()\r\n {\r\n Rotator.bookingParameters().filesLoaded = null;\r\n if ((Rotator.webComponentParameters()[0].vrSessionId == null || Rotator.webComponentParameters()[0].vrSessionId == \"\")\r\n && !Rotator.configuration().appBookingAppointments)\r\n {\r\n Rotator.page(PageEnum.AppointmentList);\r\n return;\r\n }\r\n\r\n if (Rotator.configuration().appLoginRequired == AppLoginModeEnum.Always)\r\n {\r\n Support.checkLogin(() => this.initializeInternal(), () => Rotator.page(PageEnum.Login));\r\n return;\r\n }\r\n\r\n this.initializeInternal();\r\n }\r\n\r\n private static initializeInternal()\r\n {\r\n this._container = Rotator.container();\r\n Rotator.title(\"PRENOTA\");\r\n\r\n Rotator.confirmationParameters(null);\r\n Rotator.inBookingFlow(true);\r\n this.createControls();\r\n\r\n //#region Specific parameters\r\n if (Rotator.webComponentParameters()[0].specificActivityTypeIdList != null && Rotator.webComponentParameters()[0].specificActivityTypeIdList.length == 1)\r\n Rotator.webComponentParameters()[0].specificActivityTypeId = Rotator.webComponentParameters()[0].specificActivityTypeIdList.first();\r\n\r\n if (Rotator.webComponentParameters()[0].specificDoctorIdList != null && Rotator.webComponentParameters()[0].specificDoctorIdList.length == 1)\r\n Rotator.webComponentParameters()[0].specificDoctorId = Rotator.webComponentParameters()[0].specificDoctorIdList.first();\r\n\r\n this.assignSpecificParameters(StepEnum.Activity);\r\n\r\n WorkplaceList.getWorkplaces((e) => \r\n {\r\n if (e.workplacesList.filter(k => k.id != 0).length > 1 && Rotator.configuration().appUseGeolocationInsteadOfWorkplaceOrder)\r\n Support.getLocation();\r\n\r\n if (e.workplacesList.length <= 2)\r\n {\r\n puma(\".vrPatientDivBookingStep.\" + StepEnum.Workplace).hide();\r\n\r\n if (e.workplacesList.length == 2)\r\n Rotator.bookingParameters().workplace = e.workplacesList[1];\r\n else\r\n {\r\n Rotator.bookingParameters().workplace = e.workplacesList[0];\r\n\r\n if (Rotator.page() != PageEnum.Login)\r\n {\r\n Rotator.configuration().appBookingAppointments = false;\r\n Menu.hideItem(PageEnum.Booking);\r\n Rotator.inBookingFlow(false);\r\n Rotator.page(PageEnum.Login);\r\n return;\r\n }\r\n }\r\n }\r\n else if (Rotator.configuration().appShowWorkplaces)\r\n puma(\".vrPatientDivBookingStep.\" + StepEnum.Workplace).css({ \"display\": \"flex\" });\r\n\r\n this.assignSpecificParameters(StepEnum.Workplace);\r\n });\r\n //#endregion\r\n }\r\n\r\n static createControls()\r\n {\r\n puma(this._container).empty();\r\n this.createStep(StepEnum.Activity);\r\n this.createStep(StepEnum.Workplace, null, false, null, Rotator.configuration().appShowWorkplaces);\r\n\r\n let hideDoctorStep = (Rotator.bookingParameters().activityType == null || (Rotator.bookingParameters().activityType != null && Rotator.bookingParameters().activityType.onlineBookingDoNotChooseDoctor));\r\n if (Rotator.bookingParameters().resourceList != null && Rotator.bookingParameters().resourceList.length <= 2)\r\n hideDoctorStep = true;\r\n this.createStep(StepEnum.Doctor, null, false, null, !hideDoctorStep);\r\n\r\n this.createStep(StepEnum.From);\r\n\r\n vr.createButton(\r\n {\r\n text: \"Cerca\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"width: 100%; box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n cssContainer: \"float: right\",\r\n width: 120,\r\n class: \"vrButtonBookingSearch vrButtonPatient\",\r\n onClick: (e) =>\r\n {\r\n //#region Check minor age\r\n if (Rotator.configuration().appNoBookingMinor === true)\r\n {\r\n Support.checkLogin(() =>\r\n {\r\n Profile.getSubject(null, (response) =>\r\n {\r\n if (response.patientAge < 18 && response.patientAge > 0)\r\n {\r\n VrManager.notify(\"Prenotazione appuntamenti permessa unicamente ai maggiorenni\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n e.preventDefault();\r\n return;\r\n }\r\n }, undefined, false);\r\n }, null, null, false);\r\n }\r\n //#endregion\r\n\r\n if (e.isDefaultPrevented())\r\n return;\r\n\r\n if (Rotator.webComponentParameters()[0].fullscreen === true && Rotator.isMobile())\r\n vrshared.UtilityManager().enterFullScreen(puma(\".vrPatientDivContainer\")[0]);\r\n\r\n if (Rotator.bookingParameters().from == null)\r\n Rotator.bookingParameters().from = new Date();\r\n\r\n if (Rotator.bookingParameters().activityType != null)\r\n {\r\n if (Rotator.configuration().appRequiredWorkplaceChoice === true && Rotator.bookingParameters().workplace == null)\r\n {\r\n VrManager.notify(\"Scegliere una sede\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n puma(\".vrPatient_spanErrorWorkplace\").show();\r\n return;\r\n }\r\n\r\n if (!Rotator.bookingParameters().activityType.onlineBookingDoNotChooseDoctor)\r\n Rotator.page(PageEnum.ResourceTimeslots);\r\n else\r\n Rotator.page(PageEnum.WorkplaceTimeslots);\r\n }\r\n else\r\n {\r\n let error = \"Scegliere \";\r\n if (Rotator.bookingParameters().activityType == null)\r\n error += \"una prestazione\";\r\n\r\n VrManager.notify(error, \"\", { type: vr.NotifierTypeEnum.Error });\r\n puma(\".vrPatient_spanErrorActivity\").show();\r\n }\r\n }\r\n }, this._container);\r\n }\r\n\r\n static createStep(stepEnum: StepEnum, container?: HTMLElement | null, highlighted = false, spanIconExpandCallback: Function | null = null, visible = true)\r\n {\r\n let divStep = vr.div((container != null) ? container : this._container, { class: \"vrPatientDivBookingStep \" + stepEnum });\r\n\r\n let backgroundColor = (highlighted) ? Rotator.color() : \"\";\r\n let textColor = (highlighted) ? Rotator.textColor() : \"#000\"\r\n divStep.style.cssText += \"background-color: \" + backgroundColor + \"; box-shadow: 0 1px 5px \" + ((highlighted) ? Rotator.color() : \"rgba(0,0,0,.3);\");\r\n\r\n if (!visible)\r\n puma(divStep).hide();\r\n\r\n //#region Description\r\n let question = \"\";\r\n let choice = \"\";\r\n let icon = vr.IconClassicLight.Bell;\r\n switch (stepEnum)\r\n {\r\n case StepEnum.Activity:\r\n {\r\n question = \"Cosa vuoi prenotare?\";\r\n icon = vr.IconClassicLight.FileLines;\r\n\r\n choice = \"Cerca una prestazione\";\r\n if (Rotator.bookingParameters().activityType != null && Rotator.bookingParameters().activityType.onlineBookingName.length > 0)\r\n choice = Rotator.bookingParameters().activityType.onlineBookingName;\r\n }\r\n break;\r\n case StepEnum.Workplace:\r\n {\r\n question = \"Dove vuoi prenotare?\";\r\n icon = vr.IconClassicLight.Map;\r\n\r\n choice = \"Non ho preferenze\";\r\n if (Rotator.bookingParameters().workplace != null && Rotator.bookingParameters().workplace!.name.length > 0)\r\n choice = Rotator.bookingParameters().workplace!.name;\r\n\r\n if (!highlighted && (Rotator.bookingParameters().workplaceList == null || Rotator.bookingParameters().workplaceList.length <= 2))\r\n puma(divStep).hide();\r\n }\r\n break;\r\n case StepEnum.Doctor:\r\n {\r\n question = \"Sai già con chi prenotare?\";\r\n icon = vr.IconClassicLight.UserDoctor;\r\n\r\n choice = \"Non ho preferenze\";\r\n if (Rotator.bookingParameters().resource != null && Rotator.bookingParameters().resource.name.length > 0)\r\n choice = Rotator.bookingParameters().resource.name;\r\n }\r\n break;\r\n case StepEnum.From:\r\n {\r\n question = \"A partire dal giorno\";\r\n icon = vr.IconClassicLight.Clock;\r\n\r\n choice = new Date().toItalyLongString();\r\n if (Rotator.bookingParameters().from != null)\r\n choice = new Date(Rotator.bookingParameters().from).toItalyLongString();\r\n }\r\n break;\r\n }\r\n\r\n let spanIcon = vr.span(divStep);\r\n vr.icon(icon, spanIcon, { fontSize: (stepEnum == StepEnum.Workplace) ? \"1.5em\" : \"2em\", css: \"margin-left: 5px; margin-right: 15px;\", color: (highlighted) ? Rotator.textColor() : Rotator.color() });\r\n\r\n let spanDescription = vr.span(divStep, { css: \"display: inline-block; width: 100%;\" });\r\n vr.createLabel(\r\n {\r\n text: question,\r\n width: \"100%\",\r\n class: \"vrPatient_bookingQuestion\",\r\n cssContainer: \"margin-bottom: 5px;\",\r\n colorSettings: { textColor: textColor }\r\n }, spanDescription);\r\n vr.createLabel(\r\n {\r\n text: choice,\r\n width: \"100%\",\r\n css: \"font-weight: 600;\",\r\n class: \"vrPatient_bookingChoice\",\r\n colorSettings: { textColor: (highlighted) ? Rotator.textColor() : Rotator.color() }\r\n }, spanDescription);\r\n //#endregion\r\n\r\n //#region Click\r\n if (container == null)\r\n {\r\n puma(divStep).click(() =>\r\n {\r\n switch (stepEnum)\r\n {\r\n case StepEnum.Activity:\r\n {\r\n if (Rotator.webComponentParameters()[0].specificActivityTypeId == null)\r\n Rotator.page(PageEnum.ActivityList);\r\n }\r\n break;\r\n case StepEnum.Workplace:\r\n {\r\n if (Rotator.webComponentParameters()[0].specificWorkplaceId == null)\r\n Rotator.page(PageEnum.WorkplaceList);\r\n }\r\n break;\r\n case StepEnum.Doctor:\r\n {\r\n if (Rotator.webComponentParameters()[0].specificDoctorId == null)\r\n Rotator.page(PageEnum.DoctorList);\r\n }\r\n break;\r\n case StepEnum.From:\r\n {\r\n Rotator.page(PageEnum.FromList);\r\n }\r\n break;\r\n }\r\n });\r\n }\r\n //#endregion\r\n\r\n if (stepEnum == StepEnum.Activity)\r\n {\r\n let spanError = vr.span(divStep, { css: \"display: none;\", class: \"vrPatient_spanErrorActivity\" });\r\n vr.icon(vr.IconClassicLight.TriangleExclamation, spanError, { fontSize: \"1.5em\", css: \"margin-right: 5px;\", color: \"red\" });\r\n }\r\n\r\n if (stepEnum == StepEnum.Workplace)\r\n {\r\n let spanError = vr.span(divStep, { css: \"display: none;\", class: \"vrPatient_spanErrorWorkplace\" });\r\n vr.icon(vr.IconClassicLight.TriangleExclamation, spanError, { fontSize: \"1.5em\", css: \"margin-right: 5px;\", color: \"red\" });\r\n }\r\n\r\n let spanIconExpand = vr.span(divStep);\r\n vr.icon(vr.IconClassicLight.AngleDown, spanIconExpand, { fontSize: \"1.5em\", css: \"margin-right: 5px;\", color: (highlighted) ? Rotator.textColor() : Rotator.color() });\r\n puma(spanIconExpand).on(\"click\", (e: JQuery.ClickEvent) =>\r\n {\r\n if (spanIconExpandCallback != null)\r\n spanIconExpandCallback();\r\n });\r\n }\r\n\r\n static doctorSlotVisible(visible: Boolean)\r\n {\r\n let stepDoctor = puma(\".vrPatientDivBookingStep.\" + StepEnum.Doctor);\r\n if (stepDoctor[0] != null)\r\n {\r\n if (visible)\r\n stepDoctor[0].style.cssText += \"display: flex;\";\r\n else\r\n stepDoctor.hide();\r\n }\r\n }\r\n\r\n private static assignSpecificParameters(stepMode: StepEnum)\r\n {\r\n let divStep = puma(\".vrPatientDivBookingStep.\" + stepMode);\r\n switch (stepMode)\r\n {\r\n case StepEnum.Activity:\r\n {\r\n //#region SpecificActivityTypeId\r\n ActivityList.getActivityTypeGroups((activityTypeGroupList) =>\r\n {\r\n if (activityTypeGroupList.length == 0)\r\n {\r\n if (Rotator.page() != PageEnum.Login)\r\n {\r\n if (Rotator.bookingParameters().workplace != null || Rotator.bookingParameters().resource != null)\r\n {\r\n (Rotator.bookingParameters().activityType as any) = null;\r\n divStep.find(\".vrPatient_bookingChoice\").html(\"Cerca una prestazione\");\r\n VrManager.notify(\"Non sono presenti prestazioni prenotabili\", \"\", { type: vr.NotifierTypeEnum.Default });\r\n return;\r\n }\r\n\r\n if (!Rotator.sailor())\r\n {\r\n Rotator.configuration().appBookingAppointments = false;\r\n Menu.hideItem(PageEnum.Booking);\r\n }\r\n\r\n Rotator.inBookingFlow(false);\r\n Support.checkLogin(() => Rotator.page(PageEnum.AppointmentList), () => Rotator.page(PageEnum.Login));\r\n return;\r\n }\r\n }\r\n\r\n let activityType: ActivityTypeResponse | null = null;\r\n let specificActivityTypeId = Rotator.webComponentParameters()[0].specificActivityTypeId;\r\n if (specificActivityTypeId != null)\r\n {\r\n if (specificActivityTypeId != null)\r\n {\r\n for (let activityTypeGroup of activityTypeGroupList)\r\n {\r\n let activityTypeTemp = activityTypeGroup.children.filter(k => k.id == specificActivityTypeId)[0] as ActivityTypeResponse;\r\n if (activityTypeTemp != null)\r\n {\r\n if (activityTypeTemp.onlineBookingModeEnum == OnlineBookingModeEnum.ShowAlways\r\n || activityTypeTemp.onlineBookingModeEnum == OnlineBookingModeEnum.ShowOnlyIfAvailable)\r\n {\r\n activityType = activityTypeTemp;\r\n }\r\n else\r\n {\r\n //#region Footer items\r\n let footerItems: vr.WindowFooterItem[] = [];\r\n if (Rotator.configuration().appNoAvailabilitiesPhoneNumber != null && Rotator.configuration().appNoAvailabilitiesPhoneNumber.length > 0)\r\n {\r\n let callPhoneItem: vr.WindowFooterItem =\r\n {\r\n text: \"Chiama\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n onClick: (e) =>\r\n {\r\n let link = document.createElement(\"a\");\r\n link.href = \"tel:\" + Rotator.configuration().appNoAvailabilitiesPhoneNumber;\r\n link.click();\r\n }\r\n }\r\n footerItems.push(callPhoneItem);\r\n }\r\n\r\n if (Rotator.configuration().appNoAvailabilitiesMail != null && Rotator.configuration().appNoAvailabilitiesMail.length > 0)\r\n {\r\n let mailItem: vr.WindowFooterItem =\r\n {\r\n text: \"Email\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n onClick: (e) =>\r\n {\r\n let link = document.createElement(\"a\");\r\n link.href = \"mailto:\" + Rotator.configuration().appNoAvailabilitiesMail;\r\n link.click();\r\n }\r\n }\r\n footerItems.push(mailItem);\r\n }\r\n\r\n let closeItem: vr.WindowFooterItem =\r\n {\r\n text: \"Chiudi\",\r\n type: vr.WindowFooterItemTypeEnum.Close,\r\n colorSettings: { textColor: Rotator.color() }\r\n }\r\n footerItems.push(closeItem);\r\n //#endregion\r\n\r\n Support.dialog(Rotator.configuration().appNoOnlineBookingMessage, footerItems);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n else if (activityTypeGroupList.length == 1 && activityTypeGroupList.first().children.length == 1)\r\n {\r\n activityType = activityTypeGroupList.first().children.first() as ActivityTypeResponse;\r\n Rotator.webComponentParameters()[0].specificActivityTypeId = activityType.id;\r\n }\r\n\r\n if (activityType != null)\r\n {\r\n divStep.find(\".vrPatient_bookingChoice\").html(activityType.onlineBookingName);\r\n Rotator.bookingParameters().activityType = activityType;\r\n }\r\n\r\n let activityTypes: ActivityTypeItem[] = [];\r\n for (let activityTypeGroup of activityTypeGroupList)\r\n activityTypes.pushRange(activityTypeGroup.children);\r\n\r\n if (Rotator.bookingParameters().activityType != null && !activityTypes.map(k => k.id).includes(Rotator.bookingParameters().activityType.id))\r\n {\r\n (Rotator.bookingParameters().activityType as any) = null;\r\n divStep.find(\".vrPatient_bookingChoice\").html(\"Cerca una prestazione\");\r\n }\r\n\r\n DoctorList.getResources((e) => \r\n {\r\n this.assignSpecificParameters(StepEnum.Doctor);\r\n\r\n let stepDoctor = puma(\".vrPatientDivBookingStep.\" + StepEnum.Doctor);\r\n if (stepDoctor[0] != null)\r\n {\r\n if (Rotator.bookingParameters().activityType == null || (Rotator.bookingParameters().activityType != null && Rotator.bookingParameters().activityType.onlineBookingDoNotChooseDoctor)\r\n || e.resourcesList.length <= 2)\r\n stepDoctor.hide();\r\n else\r\n stepDoctor[0].style.cssText += \"display: flex;\";\r\n }\r\n }, false);\r\n });\r\n //#endregion\r\n }\r\n break;\r\n case StepEnum.Doctor:\r\n {\r\n //#region SpecificDoctorId\r\n let specificDoctorId = Rotator.webComponentParameters()[0].specificDoctorId;\r\n if (specificDoctorId != null)\r\n {\r\n let resource = Rotator.bookingParameters().resourceList.filter(k => k.id == specificDoctorId)[0];\r\n divStep.find(\".vrPatient_bookingChoice\").html(resource.name);\r\n Rotator.bookingParameters().resource = resource;\r\n }\r\n //#endregion\r\n }\r\n break;\r\n case StepEnum.Workplace:\r\n {\r\n //#region SpecificWorkplaceId\r\n let specificWorkplaceId = Rotator.webComponentParameters()[0].specificWorkplaceId;\r\n if (specificWorkplaceId != null)\r\n {\r\n let workplace = Rotator.bookingParameters().workplaceList.filter(k => k.id == specificWorkplaceId)[0];\r\n divStep.find(\".vrPatient_bookingChoice\").html(workplace.name);\r\n Rotator.bookingParameters().workplace = workplace;\r\n }\r\n //#endregion\r\n }\r\n break;\r\n }\r\n }\r\n}\r\n\r\n//#region Classes\r\nexport enum StepEnum\r\n{\r\n Activity = \"Activity\",\r\n Workplace = \"Workplace\",\r\n Doctor = \"Doctor\",\r\n From = \"From\",\r\n}\r\n\r\nexport class BookingParameters\r\n{\r\n activityType: ActivityTypeResponse;\r\n workplace: WorkplaceResponse | null;\r\n workplaceList: WorkplaceResponse[];\r\n from: Date;\r\n resource: ResourceResponse;\r\n price: number;\r\n timeslot: Timeslot;\r\n resourceList: ResourceResponse[];\r\n latitude: number;\r\n longitude: number;\r\n filesLoaded: File[] | null;\r\n bookingForInfo?: BookingForInfo | null;\r\n}\r\n//#endregion","import { Rotator, puma, PageEnum } from \"../rotator\";\r\nimport { Confirmation1 } from \"./confirmation1\";\r\nimport { VrManager } from \"../shared/vrManager\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"../shared/webApi\";\r\nimport { GenderEnum, InterpersonalItem } from \"../shared/common\";\r\nimport { Popup, Support } from \"../support\";\r\n\r\nexport class BookingFor\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\tprivate static _divOtherPeople: HTMLElement;\r\n\tprivate static _interpersonalPeople: InterpersonalItem[];\r\n\r\n\tprivate static _divAddPerson: HTMLElement;\r\n\tprivate static _btnAddPerson: vr.Button;\r\n\tprivate static _txtName: vr.TextBox;\r\n\tprivate static _txtSurname: vr.TextBox;\r\n\tprivate static _dtpBirthdate: vr.DatePicker;\r\n\tprivate static _btgGender: vr.ButtonGroup;\r\n\tprivate static _cmbRelationType: vr.DropDown;\r\n\r\n\tstatic initialize()\r\n\t{\r\n\t\tthis._container = puma(\"
\").appendTo(Rotator.container())[0];\r\n\t\tRotator.title(\"PRENOTA PER\");\r\n\r\n\t\tSupport.checkLogin(() => this.createControls()), () => Rotator.back()\r\n\t}\r\n\r\n\tstatic createControls()\r\n\t{\r\n\t\tConfirmation1.drawSummary(vr.div(this._container, { class: \"vrPatientDivSlot\" }), true);\r\n\r\n\t\tvr.createButton(\r\n\t\t\t{\r\n\t\t\t\ttext: \"Prenota per me stesso\",\r\n\t\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tclass: \"vrButtonBookingForMeAppointment vrButtonPatient\",\r\n\t\t\t\tonClick: (e) => \r\n\t\t\t\t{\r\n\t\t\t\t\tRotator.bookingParameters().bookingForInfo = null;\r\n\t\t\t\t\tRotator.back();\r\n\t\t\t\t}\r\n\t\t\t}, this._container);\r\n\r\n\t\tthis.createDivAddPerson();\r\n\t\tthis._btnAddPerson = vr.createButton({\r\n\t\t\ttext: \"Aggiungi persona\",\r\n\t\t\ticon: vr.IconClassicLight.Add,\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\tcssContainer: \"margin-top: 10px;\",\r\n\t\t\tclass: \"vrButtonBookingAddPersonBookingFor vrButtonPatient\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tonClick: (e) => this.visibleDivAddPerson(true)\r\n\t\t}, this._container)\r\n\r\n\t\tvr.createLegend({\r\n\t\t\ttitle: \"Oppure prenota per:\",\r\n\t\t\tcssContainer: \"margin-top: 15px;\"\r\n\t\t}, this._container)\r\n\r\n\t\tthis._divOtherPeople = vr.div(this._container);\r\n\r\n\t\tthis.rebind();\r\n\t}\r\n\r\n\tprivate static createDivAddPerson()\r\n\t{\r\n\t\tthis._divAddPerson = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"display: none; margin-top: 10px; margin-bottom: 0px;\" });\r\n\r\n\t\tthis._txtName = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Nome\",\r\n\t\t\t\tplaceholder: \"Nome\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, this._divAddPerson);\r\n\t\tthis._txtName.focus();\r\n\r\n\t\tthis._txtSurname = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Cognome\",\r\n\t\t\t\tplaceholder: \"Cognome\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, this._divAddPerson);\r\n\r\n\t\tthis._dtpBirthdate = Support.createDatePicker({\r\n\t\t\tlabel: \"Data di nascita\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t}, this._divAddPerson)\r\n\r\n\t\tthis._btgGender = vr.createButtonGroup(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Sesso\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\titems:\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t{ text: \"Maschio\", value: GenderEnum.Male },\r\n\t\t\t\t\t\t{ text: \"Femmina\", value: GenderEnum.Female },\r\n\t\t\t\t\t\t{ text: \"Non specificato\", value: GenderEnum.NotSpecified, selected: true }\r\n\t\t\t\t\t],\r\n\t\t\t\tselectionMode: vr.SelectionModeEnum.Single\r\n\t\t\t}, this._divAddPerson);\r\n\r\n\t\tthis._cmbRelationType = vr.createDropDown({\r\n\t\t\tlabel: \"Chi è per me questa persona:\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t}, this._divAddPerson);\r\n\r\n\t\tlet request = new GetSubjectInterpersonalRelationTypesRequest();\r\n\t\trequest.plantIdList = [Rotator.configuration().plant.id];\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: GetSubjectInterpersonalRelationTypesResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis._cmbRelationType.items(response.interpersonalRelationTypeList, false);\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Annulla aggiunta\",\r\n\t\t\ticon: vr.IconClassicLight.Delete,\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tclass: \"vrButtonBookingAddPersonBookingFor vrButtonPatient\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tonClick: (e) => this.visibleDivAddPerson(false)\r\n\t\t}, this._divAddPerson)\r\n\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Aggiungi\",\r\n\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tclass: \"vrButtonBookingSavePersonBookingFor vrButtonPatient\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tonClick: (e) => this.addInterpersonal()\r\n\t\t}, this._divAddPerson)\r\n\t}\r\n\r\n\tprivate static addInterpersonal()\r\n\t{\r\n\t\t//#region Check\r\n\t\tif (this._txtName.isEmpty() || this._txtSurname.isEmpty() || this._dtpBirthdate.isEmpty()\r\n\t\t\t|| this._btgGender.getSelectedValues().length == 0 || this._cmbRelationType.value() == null)\r\n\t\t{\r\n\t\t\tVrManager.notify(\"Tutti i campi sono obbligatori\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\tlet interpersonalItem = new InterpersonalItem();\r\n\t\tinterpersonalItem.name = this._txtName.value();\r\n\t\tinterpersonalItem.surname = this._txtSurname.value();\r\n\t\tinterpersonalItem.birthdate = Date.convertDateFromClient(this._dtpBirthdate.value())!;\r\n\t\tinterpersonalItem.genderEnum = Number(this._btgGender.getSelectedValues()[0]) as GenderEnum;\r\n\t\tinterpersonalItem.subjectRelationTypeId = Number(this._cmbRelationType.value());\r\n\r\n\t\tlet request = new AddInterpersonalRequest();\r\n\t\trequest.plantIdList = [Rotator.configuration().plant.id];\r\n\t\trequest.interpersonal = interpersonalItem;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: AddInterpersonalResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.visibleDivAddPerson(false, true);\r\n\t\t\t\t\tthis.rebind();\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate static visibleDivAddPerson(state: boolean, clearControls = false)\r\n\t{\r\n\t\tif (state)\r\n\t\t{\r\n\t\t\tpuma(this._divAddPerson).show();\r\n\t\t\tthis._btnAddPerson.hide();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tpuma(this._divAddPerson).hide();\r\n\t\t\tthis._btnAddPerson.show();\r\n\t\t}\r\n\r\n\t\tif (clearControls)\r\n\t\t{\r\n\t\t\tthis._txtName.clear();\r\n\t\t\tthis._txtSurname.clear();\r\n\t\t\tthis._dtpBirthdate.clear();\r\n\t\t\tthis._btgGender.select([GenderEnum.NotSpecified]);\r\n\t\t\tthis._cmbRelationType.clear();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate static rebind()\r\n\t{\r\n\t\tthis.getInterpersonal((e) => \r\n\t\t{\r\n\t\t\tthis._interpersonalPeople = e.people;\r\n\t\t\tthis.drawInterpersonal();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate static drawInterpersonal()\r\n\t{\r\n\t\tpuma(this._divOtherPeople).empty();\r\n\t\tif (this._interpersonalPeople.length == 0)\r\n\t\t{\r\n\t\t\tlet divNoRecords = vr.div(this._divOtherPeople, { class: \"vrPatientDivSlot\" });\r\n\t\t\tvr.createLabel({\r\n\t\t\t\ttext: \"Non sono presenti collegamenti\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\talign: vr.TextAlignEnum.Center\r\n\t\t\t}, divNoRecords);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let person of this._interpersonalPeople)\r\n\t\t\tthis.drawInterpersonalDetail(person, this._divOtherPeople);\r\n\t}\r\n\r\n\tstatic drawInterpersonalDetail(person: InterpersonalItem, container: HTMLElement): HTMLElement\r\n\t{\r\n\t\tlet divPerson = vr.div(container, { class: \"vrPatientDivSlot\", css: \"margin-bottom: 10px;\" });\r\n\r\n\t\t//#region Icon-Avatar/Info\r\n\t\tlet divIconInfo = vr.div(divPerson, { css: \"display: flex;\" });\r\n\t\tif (person.avatarBase64 != null && person.avatarBase64 != \"\")\r\n\t\t{\r\n\t\t\tvr.createImage({\r\n\t\t\t\tbase64: true,\r\n\t\t\t\tvalue: person.avatarBase64,\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\",\r\n\t\t\t\twidth: 37,\r\n\t\t\t\theight: 42\r\n\t\t\t}, divIconInfo)\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tlet iconByGender = (person.genderEnum == GenderEnum.Female) ? vr.IconClassicLight.UserHairLong : vr.IconClassicLight.UserHair;\r\n\t\t\tvr.icon(iconByGender, divIconInfo, { css: \"font-size: 3em; margin-top: 1px; margin-right: 10px; color: \" + Rotator.color() });\r\n\t\t}\r\n\r\n\t\tlet divInfo = vr.div(divIconInfo, { css: \"width: Calc(100% - 47px)\" });\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"\" + person.subjectRelationTypeReverseName + \": \" + person.displayName,\r\n\t\t\twidth: \"100%\",\r\n\t\t\tnoBr: 2\r\n\t\t}, divInfo);\r\n\r\n\t\tif (person.birthdate != null)\r\n\t\t{\r\n\t\t\tvr.createLabel({\r\n\t\t\t\ttext: \"Data di nascita: \" + new Date(person.birthdate).toItalyShortString(),\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tfontSize: \"1.1em\"\r\n\t\t\t}, divInfo);\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\tpuma(divPerson).on(\"click\", (e: JQuery.ClickEvent) =>\r\n\t\t{\r\n\t\t\tRotator.bookingParameters().bookingForInfo = new BookingForInfo(person.subjectId, person.displayName);\r\n\t\t\tRotator.back();\r\n\t\t})\r\n\r\n\t\treturn divPerson;\r\n\t}\r\n\r\n\tstatic getInterpersonal(callback?: (e: GetInterpersonalResponse) => void)\r\n\t{\r\n\t\tlet request = new GetInterpersonalRequest();\r\n\t\trequest.plantIdList = [Rotator.configuration().plant.id];\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: GetInterpersonalResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(response);\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n}\r\n\r\n//#region Classes\r\nexport class BookingForInfo\r\n{\r\n\tconstructor(id: number, displayName: string)\r\n\t{\r\n\t\tthis.id = id;\r\n\t\tthis.displayName = displayName;\r\n\t}\r\n\r\n\tid: number;\r\n\tdisplayName: string;\r\n}\r\n\r\nclass GetInterpersonalRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/BookingWebApi/GetInterpersonal\";\r\n\tpublic plantIdList: number[];\r\n}\r\n\r\nclass GetInterpersonalResponse extends WebApiResponseBase\r\n{\r\n\tpublic people: InterpersonalItem[];\r\n}\r\n\r\nexport class GetSubjectInterpersonalRelationTypesRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/BookingWebApi/GetSubjectInterpersonalRelationTypes\";\r\n\tpublic plantIdList: number[];\r\n}\r\n\r\nexport class GetSubjectInterpersonalRelationTypesResponse extends WebApiResponseBase\r\n{\r\n\tpublic interpersonalRelationTypeList: vr.ComboBoxItem[];\r\n}\r\n\r\nclass AddInterpersonalRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/BookingWebApi/AddInterpersonal\";\r\n\tpublic plantIdList: number[];\r\n\tpublic interpersonal: InterpersonalItem;\r\n}\r\n\r\nclass AddInterpersonalResponse extends WebApiResponseBase\r\n{\r\n\r\n}\r\n//#endregion","import { Rotator, puma, PageEnum, AppLoginModeEnum } from \"../../src/rotator\";\r\nimport { TimeslotListParameters } from \"./timeslotList\";\r\nimport { GenderEnum, OnlineBookingModeEnum, OnlineBookingPaymentModeEnum } from \"../../src/shared/common\";\r\nimport { MandatoryFieldInfo, OnlineBookingMandatoryFieldTypeEnum, PreregisterResponse, PreregisterSettings, Register, RegisterParameters, RegisterRequest, RegisterResponse, RegisterResult } from \"../../src/login/register\";\r\nimport { PriceTypeEnum, Support } from \"../../src/support\";\r\nimport { VrManager } from \"../../src/shared/vrManager\";\r\nimport { Login } from \"../../src/login/login\";\r\n\r\nexport class Confirmation1\r\n{\r\n private static _container: HTMLElement;\r\n private static _txtName: vr.TextBox;\r\n private static _txtSurname: vr.TextBox;\r\n private static _txtPhoneNumber: vr.TextBox;\r\n private static _txtEmail: vr.TextBox;\r\n private static _chkPrivacy: vr.CheckBox;\r\n private static _chkPrivacyCommercial: vr.CheckBox;\r\n private static _fields: MandatoryFieldInfo[];\r\n\r\n static initialize(parameters: TimeslotListParameters)\r\n {\r\n if (parameters != null)\r\n Rotator.confirmationParameters(parameters);\r\n\r\n this._container = puma(\"
\").appendTo(Rotator.container())[0];\r\n this._container.style.cssText += \"position: relative;\";\r\n Rotator.title(\"CONFERMA\");\r\n\r\n if (Rotator.doctorMode())\r\n {\r\n Rotator.pageHistory().pop();\r\n Rotator.page(PageEnum.Confirmation2);\r\n }\r\n else\r\n {\r\n Support.checkLogin(() => \r\n {\r\n Rotator.pageHistory().pop();\r\n Rotator.page(PageEnum.Confirmation2);\r\n }, () => \r\n {\r\n this.createControls();\r\n });\r\n }\r\n }\r\n\r\n static createControls()\r\n {\r\n this.drawSummary(vr.div(this._container, { class: \"vrPatientDivSlot\" }));\r\n\r\n let divControls = vr.div(this._container, { css: \"padding: 5px;\" });\r\n\r\n vr.createButton({\r\n label: \"Prenota la tua visita\",\r\n labelSettings: { position: vr.PositionEnum.Top, colorSettings: { textColor: \"#000\" } },\r\n text: \"Vai alla pagina di Login\",\r\n width: \"100%\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; margin-top: 5px;\",\r\n class: \"vrButtonBookingLogin vrButtonPatient\",\r\n onClick: (e) => \r\n {\r\n Rotator.page(PageEnum.Login);\r\n }\r\n }, divControls);\r\n\r\n if (Rotator.configuration().appSpidEnabled)\r\n {\r\n vr.createButton({\r\n text: \"Accedi con SPID\",\r\n colorSettings: { background: \"#06C\", textColor: \"#FFF\" },\r\n css: \"box-shadow: 0 1px 3px #06C;\",\r\n cssContainer: \"margin-top: 10px;\",\r\n width: \"100%\",\r\n class: \"vrButtonLogin vrButtonPatient\",\r\n icon: vr.IconSharpSolid.User,\r\n iconSettings: { css: \"position: relative; top: -2px; margin-right: 5px; background-color: #FFF; color: #06C; padding: 5px; border-radius: 10px; padding-top: 4px; padding-bottom: 3px; font-size: 12px;\" },\r\n onClick: (e) =>\r\n {\r\n Login.manageSpidButton(() => Rotator.page(PageEnum.Confirmation2));\r\n }\r\n }, divControls)\r\n }\r\n\r\n vr.createLabel({\r\n text: \"Oppure\",\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px; margin-top: 10px;\"\r\n }, divControls);\r\n\r\n if (!Rotator.sailor())\r\n {\r\n //#region Name if no login\r\n this._txtName = vr.createTextBox({\r\n label: \"Nome\",\r\n width: \"100%\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n visible: false\r\n }, divControls);\r\n\r\n this._txtSurname = vr.createTextBox({\r\n label: \"Cognome\",\r\n width: \"100%\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n visible: false\r\n }, divControls);\r\n\r\n if (Rotator.bookingParameters().activityType.doNotRequireLogin || Rotator.configuration().appLoginRequired == AppLoginModeEnum.Never)\r\n {\r\n this._txtName.show();\r\n this._txtSurname.show();\r\n }\r\n //#endregion\r\n\r\n this._txtPhoneNumber = vr.createTextBox({\r\n label: \"Cellulare\",\r\n width: \"100%\",\r\n mode: vr.TextModeEnum.Numeric,\r\n align: vr.TextAlignEnum.Left,\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n }, divControls);\r\n\r\n this._txtEmail = vr.createTextBox({\r\n label: \"Email\",\r\n width: \"100%\",\r\n mode: vr.TextModeEnum.Mail,\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n visible: false\r\n }, divControls);\r\n\r\n Register.getMandatoryFields((e) =>\r\n {\r\n this._fields = e.fields;\r\n if (e.fields.filter(k => k.fieldType == OnlineBookingMandatoryFieldTypeEnum.EMail)[0].isVisible)\r\n this._txtEmail.show();\r\n });\r\n\r\n //#region Privacy\r\n let divPrivacy = vr.div(divControls, { css: \"text-align: left; display: flex; margin-top: 10px;\" });\r\n this._chkPrivacy = vr.createCheckBox(\r\n {\r\n }, divPrivacy);\r\n\r\n let privacyLabelText = Rotator.configuration().appPrivacyLabelText;\r\n if (privacyLabelText == null || privacyLabelText == \"\")\r\n privacyLabelText = \"Ho letto e accetto la [privacy] (*)\";\r\n\r\n if (privacyLabelText.includes(\"[\"))\r\n {\r\n let textToHighlight = privacyLabelText.substring(\r\n privacyLabelText.lastIndexOf(\"[\") + 1,\r\n privacyLabelText.lastIndexOf(\"]\")\r\n );\r\n privacyLabelText = privacyLabelText.replace(/\\[.*\\]/, \"\" + textToHighlight + \"\")\r\n }\r\n else\r\n {\r\n privacyLabelText = privacyLabelText.replace(\"privacy\", \"privacy\");\r\n privacyLabelText = privacyLabelText.replace(\"Privacy\", \"Privacy\");\r\n }\r\n\r\n vr.createLabel({\r\n text: privacyLabelText,\r\n fontSize: \"1.1em\",\r\n cssContainer: \"top: -1px;\",\r\n width: \"Calc(100% - 35px)\",\r\n onClick: (e) => \r\n {\r\n wndPrivacy.open(null, false, { top: Rotator.container().scrollTop });\r\n }\r\n }, divPrivacy);\r\n\r\n let wndPrivacy = vr.createWindow(\r\n {\r\n title: \"Privacy\",\r\n maximized: false,\r\n content: Rotator.configuration().privacyText,\r\n css: \"overflow-y: auto;\",\r\n cssContainer: \"width: 100% !important; height: \" + (Rotator.container().clientHeight - 20) + \"px !important; position: absolute !important; left: 0px !important;\",\r\n draggable: false,\r\n modal: false,\r\n hideCloseIcon: true,\r\n footer:\r\n [\r\n { type: vr.WindowFooterItemTypeEnum.Close, text: \"Chiudi\" },\r\n {\r\n type: vr.WindowFooterItemTypeEnum.Ok, text: \"Accetta\", onClick: (e) => \r\n {\r\n wndPrivacy.close();\r\n this._chkPrivacy.checked(true);\r\n }\r\n }\r\n ]\r\n }, Rotator.shadowRoot() as any);\r\n puma(wndPrivacy.container()).appendToPuma(this._container);\r\n //#endregion\r\n\r\n if (Rotator.configuration().privacyCommercial && !Rotator.configuration().appHidePrivacyCommercial)\r\n {\r\n let privacyCommercialLabelText = Rotator.configuration().appPrivacyCommercialLabelText;\r\n if (privacyCommercialLabelText == null || privacyCommercialLabelText == \"\")\r\n privacyCommercialLabelText = \"Consenso fini commerciali\";\r\n\r\n this._chkPrivacyCommercial = vr.createCheckBox({\r\n text: privacyCommercialLabelText,\r\n width: \"100%\",\r\n cssContainer: \"font-size: 0.9em;\"\r\n }, divControls);\r\n }\r\n\r\n if (Rotator.bookingParameters().activityType.paymentMode != OnlineBookingPaymentModeEnum.Required\r\n && (Rotator.bookingParameters().activityType.doNotRequireLogin || Rotator.configuration().appLoginRequired == AppLoginModeEnum.Never))\r\n {\r\n vr.createButton({\r\n text: \"Prosegui senza registrarti\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n cssContainer: \"margin-top: 10px;\",\r\n width: \"100%\",\r\n class: \"vrButtonBookingNoRegister vrButtonPatient\",\r\n onClick: (e) => this.preregister(() => \r\n {\r\n let request = new RegisterRequest();\r\n request.name = this._txtName.value();\r\n request.surname = this._txtSurname.value();\r\n request.phone = String(this._txtPhoneNumber.value());\r\n request.mail = this._txtEmail.value();\r\n request.privacy = this._chkPrivacy.checked();\r\n request.privacyCommercial = (this._chkPrivacyCommercial != null) ? this._chkPrivacyCommercial.checked() : false;\r\n request.createUserAccount = false;\r\n request.throwException = false;\r\n request.call(\r\n {\r\n success: (response: RegisterResponse) => \r\n {\r\n if (response.registerResult == RegisterResult.PatientCreated || response.registerResult == RegisterResult.PatientFound)\r\n {\r\n Rotator.confirmationParameters()!.subjectId = response.customerId;\r\n Rotator.page(PageEnum.Confirmation2);\r\n }\r\n else\r\n Register.manageRegisterResult(response.registerResult, response.ExceptionMessage);\r\n },\r\n loader: Rotator.container()\r\n });\r\n }, true)\r\n }, divControls);\r\n }\r\n }\r\n\r\n if (!Rotator.configuration().appHideRegistrationIntoConfirmationPage)\r\n {\r\n vr.createButton({\r\n text: \"Registrati\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n cssContainer: (Rotator.sailor()) ? \"\" : \"margin-top: 10px;\",\r\n width: \"100%\",\r\n class: \"vrButtonBookingRegister vrButtonPatient\",\r\n onClick: (e) => \r\n {\r\n if (Rotator.sailor())\r\n {\r\n Rotator.page(PageEnum.SailorRegister);\r\n }\r\n else if (Rotator.configuration().appPreregisterSubject)\r\n {\r\n this.preregister((e) => \r\n {\r\n let parameters = new RegisterParameters();\r\n parameters.preregisterId = e!.preregisterId;\r\n parameters.customerName = this._txtName.value();\r\n parameters.customerSurname = this._txtSurname.value();\r\n parameters.customerMail = this._txtEmail.value();\r\n parameters.customerPhone = String(this._txtPhoneNumber.value());\r\n parameters.privacyCommercial = (this._chkPrivacyCommercial != null) ? this._chkPrivacyCommercial.checked() : false;\r\n Rotator.page(PageEnum.Register, parameters);\r\n });\r\n }\r\n else\r\n {\r\n let error = this.checkRequiredFields();\r\n if (error)\r\n return;\r\n\r\n let parameters = new RegisterParameters();\r\n parameters.customerName = this._txtName.value();\r\n parameters.customerSurname = this._txtSurname.value();\r\n parameters.customerMail = this._txtEmail.value();\r\n parameters.customerPhone = String(this._txtPhoneNumber.value());\r\n parameters.privacyCommercial = (this._chkPrivacyCommercial != null) ? this._chkPrivacyCommercial.checked() : false;\r\n Rotator.page(PageEnum.Register, parameters);\r\n }\r\n }\r\n }, divControls);\r\n }\r\n }\r\n\r\n private static preregister(callback?: (e?: PreregisterResponse) => void, checkNameIfNoLogin = false)\r\n {\r\n //#region Check\r\n let error = this.checkRequiredFields(checkNameIfNoLogin);\r\n if (error)\r\n return;\r\n //#endregion\r\n\r\n if (!checkNameIfNoLogin)\r\n {\r\n let preregisterSettings = new PreregisterSettings();\r\n preregisterSettings.name = this._txtName.value();\r\n preregisterSettings.surname = this._txtSurname.value();\r\n preregisterSettings.phoneNumber = String(this._txtPhoneNumber.value());\r\n preregisterSettings.emailAddress = this._txtEmail.value();\r\n preregisterSettings.privacyForMedicalBooking = this._chkPrivacy.checked();\r\n preregisterSettings.privacyForCommercialUse = (this._chkPrivacyCommercial != null) ? this._chkPrivacyCommercial.checked() : false;\r\n Register.preregister(preregisterSettings, callback);\r\n }\r\n else\r\n {\r\n if (callback != null)\r\n callback();\r\n }\r\n }\r\n\r\n private static checkRequiredFields(checkNameIfNoLogin = false)\r\n {\r\n let error = false;\r\n if ((Rotator.bookingParameters().activityType.doNotRequireLogin || Rotator.configuration().appLoginRequired == AppLoginModeEnum.Never) && checkNameIfNoLogin)\r\n {\r\n if (this._txtName.isEmpty())\r\n {\r\n this._txtName.error(undefined, undefined, undefined, vr.ErrorHideModeEnum.Never);\r\n error = true;\r\n }\r\n else\r\n this._txtName.hideError();\r\n\r\n if (this._txtSurname.isEmpty())\r\n {\r\n this._txtSurname.error(undefined, undefined, undefined, vr.ErrorHideModeEnum.Never);\r\n error = true;\r\n }\r\n else\r\n this._txtSurname.hideError();\r\n }\r\n\r\n if (this._txtPhoneNumber.isEmpty())\r\n {\r\n this._txtPhoneNumber.error(undefined, undefined, undefined, vr.ErrorHideModeEnum.Never);\r\n error = true;\r\n }\r\n else\r\n this._txtPhoneNumber.hideError();\r\n\r\n let fieldEmail = this._fields.filter(k => k.fieldType == OnlineBookingMandatoryFieldTypeEnum.EMail)[0];\r\n if (fieldEmail != null && this._txtEmail.isEmpty() && fieldEmail.isVisible && fieldEmail.isMandatory)\r\n {\r\n this._txtEmail.error(undefined, undefined, undefined, vr.ErrorHideModeEnum.Never);\r\n error = true;\r\n }\r\n else\r\n this._txtEmail.hideError();\r\n\r\n //#region Check mail\r\n let email = this._txtEmail.value();\r\n if (email != \"\" && email != null)\r\n {\r\n let isValidEmail = vr.isValidEmail(email);\r\n if (!isValidEmail)\r\n {\r\n VrManager.notify(\"Inserire una mail valida\");\r\n this._txtEmail.error(undefined, undefined, undefined, vr.ErrorHideModeEnum.Never);\r\n error = true;\r\n }\r\n }\r\n //#endregion\r\n\r\n if (!this._chkPrivacy.checked())\r\n {\r\n this._chkPrivacy.error();\r\n error = true;\r\n }\r\n return error;\r\n }\r\n\r\n static drawSummary(divSummary: HTMLElement, shortVersion = false)\r\n {\r\n let divResourceInfo = vr.div(divSummary, { css: \"display: flex;\" });\r\n\r\n let resource = Rotator.confirmationParameters()!.resource;\r\n if (!shortVersion && resource != null && resource.id != 0 && !Rotator.sailor() && !Rotator.bookingParameters().activityType.onlineBookingDoNotChooseDoctor)\r\n {\r\n //#region Image\r\n if (resource.hasAvatar || ((resource as any).imageBase64 != null && (resource as any).imageBase64 != \"\"))\r\n {\r\n let avatar = resource.imageBase64;\r\n vr.createImage(\r\n {\r\n value: avatar,\r\n base64: true,\r\n width: 70,\r\n height: 70,\r\n cssContainer: \"justify-content: center; margin-right: 10px;\",\r\n css: \"border-radius: 35px;\"\r\n }, divResourceInfo);\r\n }\r\n else\r\n vr.icon(vr.IconClassicLight.UserDoctor, divResourceInfo, { css: \"justify-content: center; margin-right: 10px; font-size: 5em; color: \" + Rotator.color() + \";\" });\r\n //#endregion\r\n\r\n //#region Info\r\n let divInfo = vr.div(divResourceInfo, { css: \"display: inline-block; width: Calc(100% - 75px); min-height: 70px; text-align: left;\" });\r\n\r\n let title = (resource.title != null && resource.title != \"\") ? resource.title : ((resource.genderEnum == GenderEnum.Female) ? \"Dott.ssa\" : \"Dott.\");\r\n vr.createLabel(\r\n {\r\n text: \"\" + title + \" \" + resource.name,\r\n width: \"100%\",\r\n css: \"font-weight: 600;\",\r\n noBr: true\r\n }, divInfo);\r\n\r\n if (resource.qualification != null && resource.qualification.length > 0)\r\n {\r\n vr.createLabel(\r\n {\r\n text: resource.qualification,\r\n width: \"100%\",\r\n css: \"font-size: 1em;\"\r\n }, divInfo);\r\n }\r\n\r\n if (resource.rating != null && resource.rating.values.length > 0)\r\n {\r\n vr.createRating(\r\n {\r\n cssContainer: \"margin-top: 7px;\",\r\n max: resource.rating.total,\r\n value: resource.rating.values.sum() / resource.rating.values.length,\r\n total: resource.rating.values.length,\r\n enable: false\r\n }, divInfo);\r\n }\r\n //#endregion\r\n }\r\n\r\n //#region ActivityType\r\n let divActivityType = vr.div(divSummary, { css: (!shortVersion && resource != null && resource.id != 0 && !Rotator.sailor() && !Rotator.bookingParameters().activityType.onlineBookingDoNotChooseDoctor) ? \"margin-top: 10px;\" : \"\" });\r\n vr.icon(vr.IconClassicLight.FileLines, divActivityType, { css: \"margin-right: 5px; position: relative; top: -1px; color: \" + Rotator.color() });\r\n\r\n let displayPrice = Support.displayPrice(Rotator.confirmationParameters()!.price, PriceTypeEnum.ActivityType, true);\r\n vr.createLabel(\r\n {\r\n text: Rotator.bookingParameters().activityType.onlineBookingName + displayPrice,\r\n width: \"Calc(100% - 25px)\"\r\n }, divActivityType);\r\n //#endregion\r\n\r\n //#region Workplace\r\n if (!shortVersion)\r\n {\r\n let divWorkplace = vr.div(divSummary, { css: \"margin-top: 5px;\" });\r\n vr.icon(vr.IconClassicLight.MapPin, divWorkplace, { css: \"margin-right: 5px; position: relative; top: -1px; color: \" + Rotator.color() });\r\n let workplace = Rotator.confirmationParameters()!.workplace;\r\n let address = Support.getAddressName(workplace);\r\n vr.createLabel(\r\n {\r\n text: address + \"
\" + workplace.name + \"\",\r\n width: \"Calc(100% - 25px)\"\r\n }, divWorkplace);\r\n }\r\n //#endregion\r\n\r\n //#region Date\r\n let divDate = vr.div(divSummary, { css: \"margin-top: 5px;\" });\r\n vr.icon(vr.IconClassicLight.Calendar, divDate, { css: \"margin-right: 5px; position: relative; top: -1px; color: \" + Rotator.color() });\r\n\r\n let fromHours = String(Rotator.confirmationParameters()!.timeslot.hourFromDisplay.hours).padStart(2, \"0\");\r\n let fromMinutes = String(Rotator.confirmationParameters()!.timeslot.hourFromDisplay.minutes).padStart(2, \"0\");\r\n let date = new Date(Rotator.confirmationParameters()!.timeslot.day).toItalyLongString();\r\n\r\n vr.createLabel(\r\n {\r\n text: date + \" alle ore \" + fromHours + \":\" + fromMinutes,\r\n width: \"Calc(100% - 25px)\"\r\n }, divDate);\r\n //#endregion\r\n\r\n //#region Payment required\r\n if (!shortVersion && Rotator.bookingParameters().activityType.paymentMode == OnlineBookingPaymentModeEnum.Required)\r\n {\r\n vr.createLabel(\r\n {\r\n text: (String.isNotNullOrEmpty(Rotator.configuration().appMessagePaymentRequired)) ? Rotator.configuration().appMessagePaymentRequired\r\n : \"Richiesto pagamento online\",\r\n width: \"100%\",\r\n cssContainer: \"margin-top: 10px;\"\r\n }, divDate);\r\n }\r\n //#endregion\r\n }\r\n}","import { Rotator, puma, PageEnum } from \"../../src/rotator\";\r\nimport { Confirmation1 } from \"./confirmation1\";\r\nimport { FileTypeEnum, OnlineBookingLoadingFileMode, OnlineBookingPaymentModeEnum, WebApiDateTime } from \"../../src/shared/common\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\nimport { EventTypeEnum, Support } from \"../../src/support\";\r\nimport { PaymentData, PaymentDataParameters } from \"../../src/privateArea/paymentData\";\r\nimport { PaymentResultParameters } from \"./paymentResult\";\r\nimport { AppointmentDetailParameter } from \"../../src/privateArea/appointmentDetail\";\r\nimport { Profile } from \"../../src/privateArea/profile\";\r\nimport { VrManager } from \"../../src/shared/vrManager\";\r\nimport { BookingForInfo, GetSubjectInterpersonalRelationTypesRequest, GetSubjectInterpersonalRelationTypesResponse } from \"./bookingFor\";\r\n\r\nexport class Confirmation2\r\n{\r\n private static _container: HTMLElement;\r\n private static _btnPay: vr.Button;\r\n private static _btnBook: vr.Button;\r\n private static _appointmentId: number;\r\n private static _divPayBook: HTMLElement;\r\n private static _divConfirmations: HTMLElement;\r\n private static _divInvoice: HTMLElement;\r\n private static _txtNotes: vr.TextBox;\r\n private static _btnChangeBookingFor: vr.Button;\r\n\r\n static initialize()\r\n {\r\n this._container = puma(\"
\").appendTo(Rotator.container())[0];\r\n Rotator.title(\"RIEPILOGO\");\r\n\r\n let activityType = Rotator.bookingParameters().activityType;\r\n if (Rotator.bookingParameters().filesLoaded == null && activityType.onlineBookingLoadingFileModeId == OnlineBookingLoadingFileMode.RequireLoading)\r\n Rotator.page(PageEnum.FileLoading);\r\n else\r\n this.createControls();\r\n }\r\n\r\n static createControls()\r\n {\r\n Confirmation1.drawSummary(vr.div(this._container, { class: \"vrPatientDivSlot\" }));\r\n\r\n if (Rotator.bookingParameters().activityType.preparationInfo != null && Rotator.bookingParameters().activityType.preparationInfo != \"\")\r\n {\r\n let divPreparationInfo = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n vr.createLabel(\r\n {\r\n text: \"Note informative\",\r\n width: \"100%\",\r\n colorSettings: { textColor: Rotator.color() }\r\n }, divPreparationInfo);\r\n\r\n vr.createLabel(\r\n {\r\n text: Rotator.bookingParameters().activityType.preparationInfo,\r\n width: \"100%\"\r\n }, divPreparationInfo);\r\n }\r\n\r\n //#region Check minor age\r\n let stopBooking = false;\r\n if (Rotator.configuration().appNoBookingMinor === true)\r\n {\r\n Support.checkLogin(() =>\r\n {\r\n Profile.getSubject(null, (response) =>\r\n {\r\n if (response.patientAge < 18 && response.patientAge > 0)\r\n {\r\n let divNoBookingMinor = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n vr.createLabel({\r\n label: \"Attenzione!\",\r\n text: \"Prenotazione appuntamenti permessa unicamente ai maggiorenni\",\r\n width: \"100%\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n }, divNoBookingMinor);\r\n\r\n vr.createButton(\r\n {\r\n text: \"Annulla prenotazione\",\r\n colorSettings: { textColor: Rotator.color() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n cssContainer: \"margin-top: 10px;\",\r\n width: \"100%\",\r\n class: \"vrButtonBookingCancelAppointment vrButtonPatient\",\r\n onClick: (e) => \r\n {\r\n Rotator.confirmationParameters(null);\r\n Rotator.goToMainPage();\r\n }\r\n }, divNoBookingMinor);\r\n\r\n stopBooking = true;\r\n return;\r\n }\r\n }, undefined, false);\r\n }, null, null, false);\r\n }\r\n\r\n if (stopBooking)\r\n return;\r\n //#endregion\r\n\r\n let divNotes = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n this._txtNotes = vr.createTextBox({\r\n placeholder: (Rotator.configuration().appPlaceholderPatientNotes != \"\" && Rotator.configuration().appPlaceholderPatientNotes != null) ? Rotator.configuration().appPlaceholderPatientNotes : \"Note per la segreteria del centro\",\r\n mode: vr.TextModeEnum.MultiLine,\r\n rows: (Rotator.isMobile()) ? 4 : 3,\r\n css: \"font-size: 1.2em;\",\r\n width: \"100%\"\r\n }, divNotes);\r\n\r\n //#region Booking for...\r\n if (Rotator.patientId() == null && Rotator.configuration().appAllowBookingFor)\r\n {\r\n Support.checkLogin(() =>\r\n {\r\n let request = new GetSubjectInterpersonalRelationTypesRequest();\r\n request.plantIdList = [Rotator.configuration().plant.id];\r\n request.call(\r\n {\r\n success: (response: GetSubjectInterpersonalRelationTypesResponse) =>\r\n {\r\n if (response.interpersonalRelationTypeList.length > 0)\r\n {\r\n if (Rotator.bookingParameters().bookingForInfo == null)\r\n Rotator.bookingParameters().bookingForInfo = new BookingForInfo(0, \"Me stesso\");\r\n\r\n let divBookingFor = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"position: relative; padding-top: 5px;\" });\r\n vr.createLabel({\r\n text: \"Prenota per:\",\r\n width: \"100%\",\r\n colorSettings: { textColor: Rotator.color() }\r\n }, divBookingFor)\r\n\r\n vr.createLabel({\r\n text: Rotator.bookingParameters().bookingForInfo!.displayName,\r\n noBr: true,\r\n width: \"Calc(100% - 92px)\"\r\n }, divBookingFor)\r\n\r\n this._btnChangeBookingFor = vr.createButton({\r\n text: \"Cambia\",\r\n colorSettings: { textColor: Rotator.color() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n class: \"vrButtonBookingFor vrButtonPatient\",\r\n cssContainer: \"position: absolute; right: 8px; top: 8px;\",\r\n onClick: (e) =>\r\n {\r\n Rotator.page(PageEnum.BookingFor);\r\n }\r\n }, divBookingFor)\r\n }\r\n },\r\n mode: vrshared.WebApiModeEnum.Sync,\r\n loader: false\r\n });\r\n }, null, null, false);\r\n }\r\n //#endregion\r\n\r\n //#region Pay/Book\r\n this._divPayBook = vr.div(this._container);\r\n\r\n this._btnPay = vr.createButton(\r\n {\r\n text: \"Prenota e Paga\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n width: \"100%\",\r\n class: \"vrButtonBookingPayAppointment vrButtonPatient\",\r\n onClick: (e) => \r\n {\r\n let parameters = new PaymentDataParameters();\r\n parameters.price = Rotator.confirmationParameters()!.price;\r\n parameters.priceId = Rotator.confirmationParameters()!.priceId;\r\n parameters.itemName = Rotator.bookingParameters().activityType.onlineBookingName;\r\n parameters.callbackAfterPayment = (e) =>\r\n {\r\n PaymentData.createInvoice(e.appointmentId, (response) =>\r\n {\r\n let paymentResultParameters = new PaymentResultParameters();\r\n paymentResultParameters.appointmentId = e.appointmentId;\r\n paymentResultParameters.documentId = response.invoiceId;\r\n paymentResultParameters.cashAdvanceInfo = response.cashAdvanceInfo;\r\n paymentResultParameters.documentName = response.pdfDocumentName;\r\n paymentResultParameters.documentBase64 = response.pdfDocument;\r\n Rotator.page(PageEnum.PaymentResult, paymentResultParameters);\r\n }, e.patientId)\r\n }\r\n Rotator.page(PageEnum.PaymentData, parameters);\r\n }\r\n }, this._divPayBook);\r\n\r\n this._btnBook = vr.createButton(\r\n {\r\n text: \"Prenota\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n cssContainer: \"margin-top: 5px;\",\r\n class: \"vrButtonBookingAppointment vrButtonPatient\",\r\n width: \"100%\",\r\n onClick: (e) => this.createAppointment((e) =>\r\n {\r\n this._appointmentId = e.appointmentId;\r\n this.manageAppointmentCreation();\r\n })\r\n }, this._divPayBook);\r\n\r\n switch (Rotator.bookingParameters().activityType.paymentMode)\r\n {\r\n case OnlineBookingPaymentModeEnum.None:\r\n {\r\n this._btnPay.hide();\r\n this._btnBook.show();\r\n }\r\n break;\r\n case OnlineBookingPaymentModeEnum.Optional:\r\n {\r\n this._btnPay.show();\r\n this._btnBook.show();\r\n }\r\n break;\r\n case OnlineBookingPaymentModeEnum.Required:\r\n {\r\n this._btnPay.show();\r\n this._btnBook.hide();\r\n }\r\n break;\r\n }\r\n\r\n if (Rotator.confirmationParameters()!.price <= 0)\r\n this._btnPay.hide();\r\n\r\n let paypalClientId = (Rotator.configuration().appPaypalSandboxMode) ? Rotator.configuration().appPaypalClientIdSandbox : Rotator.configuration().appPaypalClientId;\r\n let paypalClientSecret = (Rotator.configuration().appPaypalSandboxMode) ? Rotator.configuration().appPaypalClientSecretSandbox : Rotator.configuration().appPaypalClientSecret;\r\n if (paypalClientId == null || paypalClientId == \"\" || paypalClientSecret == null || paypalClientSecret == \"\")\r\n this._btnPay.hide();\r\n\r\n Support.checkLogin(() => { }, () => this._btnPay.hide());\r\n\r\n //#region FileLoading\r\n let activityType = Rotator.bookingParameters().activityType;\r\n if (activityType.onlineBookingLoadingFileModeId == OnlineBookingLoadingFileMode.YesLoading\r\n || activityType.onlineBookingLoadingFileModeId == OnlineBookingLoadingFileMode.RequireLoading)\r\n {\r\n let filesLoadedNumber = (Rotator.bookingParameters().filesLoaded == null) ? 0 : Rotator.bookingParameters().filesLoaded!.length;\r\n vr.createButton(\r\n {\r\n text: \"Carica file\" + ((filesLoadedNumber == 0) ? \"\" : \" (\" + filesLoadedNumber + \")\"),\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n cssContainer: \"margin-top: 5px;\",\r\n class: \"vrButtonBookingAppointment vrButtonPatient\",\r\n width: \"100%\",\r\n onClick: (e) => \r\n {\r\n Rotator.page(PageEnum.FileLoading);\r\n }\r\n }, this._divPayBook);\r\n }\r\n //#endregion\r\n\r\n vr.createSeparator({\r\n orientation: vr.OrientationEnum.Horizontal\r\n }, this._divPayBook)\r\n\r\n vr.createButton(\r\n {\r\n text: \"Annulla prenotazione\",\r\n colorSettings: { textColor: Rotator.color() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n cssContainer: \"margin-bottom: 10px;\",\r\n width: \"100%\",\r\n class: \"vrButtonBookingCancelAppointment vrButtonPatient\",\r\n onClick: (e) => \r\n {\r\n Rotator.confirmationParameters(null);\r\n Rotator.goToMainPage();\r\n }\r\n }, this._divPayBook);\r\n //#endregion\r\n\r\n //#region Confirmation buttons\r\n this._divConfirmations = vr.div(this._container, { css: \"display: none;\" });\r\n\r\n vr.createLabel({\r\n text: \"Prenotazione effettuata con successo!\",\r\n cssContainer: \"margin-top: 10px; margin-bottom: 10px;\",\r\n align: vr.TextAlignEnum.Center,\r\n fontSize: \"1.5em\",\r\n width: \"100%\"\r\n }, this._divConfirmations);\r\n\r\n let btnViewAppointment = vr.createButton(\r\n {\r\n text: \"Consulta appuntamento\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n cssContainer: \"margin-top: 10px;\",\r\n width: \"100%\",\r\n visible: false,\r\n class: \"vrButtonBookingViewAppointment vrButtonPatient\",\r\n onClick: (e) => \r\n {\r\n let parameters = new AppointmentDetailParameter();\r\n parameters.appointmentId = this._appointmentId;\r\n parameters.showMenuBurger = true;\r\n Rotator.page(PageEnum.AppointmentDetail, parameters);\r\n }\r\n }, this._divConfirmations);\r\n\r\n Support.checkLogin(() => \r\n {\r\n btnViewAppointment.show();\r\n });\r\n\r\n let btnBookAnother = vr.createButton(\r\n {\r\n text: \"Prenota un altro\",\r\n colorSettings: { textColor: Rotator.color() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n cssContainer: \"margin-top: 10px;\",\r\n width: \"100%\",\r\n class: \"vrButtonBookingBookAnother vrButtonPatient\",\r\n onClick: (e) => Rotator.goToMainPage()\r\n }, this._divConfirmations);\r\n\r\n if (Rotator.doctorMode())\r\n btnBookAnother.hide();\r\n //#endregion\r\n }\r\n\r\n private static manageAppointmentCreation(showInvoice = false)\r\n {\r\n puma(this._divConfirmations).show();\r\n puma(this._divPayBook).hide();\r\n this._txtNotes.disable();\r\n\r\n if (this._btnChangeBookingFor != null)\r\n this._btnChangeBookingFor.disable();\r\n\r\n if (showInvoice)\r\n puma(this._divInvoice).show();\r\n\r\n window.scrollTo(0, document.body.scrollHeight);\r\n\r\n Rotator.burgerButton().show();\r\n Rotator.backButton().hide();\r\n Rotator.confirmationParameters(null);\r\n Rotator.bookingParameters().bookingForInfo = null;\r\n }\r\n\r\n static createAppointment(callback?: (e: CreateAppointmentResponse) => void, errorCallback?: (e: vrshared.WebApiError) => void, async = true)\r\n {\r\n let request = new CreateAppointmentRequest();\r\n request.activityTypeId = Rotator.bookingParameters().activityType.id;\r\n request.price = Rotator.confirmationParameters()!.price;\r\n request.priceId = Rotator.confirmationParameters()!.priceId;\r\n\r\n let resource = Rotator.confirmationParameters()!.resource;\r\n if (resource != null)\r\n request.resourceId = resource.id;\r\n\r\n request.resourceInstrumentId = Rotator.confirmationParameters()!.resourceInstrumentId;\r\n request.resourceSpaceId = Rotator.confirmationParameters()!.resourceSpaceId;\r\n request.workplaceId = Rotator.confirmationParameters()!.workplace.id;\r\n request.createInvoice = false;\r\n request.note = this._txtNotes.value();\r\n\r\n let from = new Date(Rotator.confirmationParameters()!.timeslot.day);\r\n from.setHours(Rotator.confirmationParameters()!.timeslot.hourFromDisplay.hours, Rotator.confirmationParameters()!.timeslot.hourFromDisplay.minutes);\r\n request.webApiFrom = Date.toWebApiDateTime(from);\r\n\r\n if (Rotator.confirmationParameters()!.subjectId != null)\r\n request.subjectId = Rotator.confirmationParameters()!.subjectId;\r\n\r\n if (Rotator.bookingParameters().bookingForInfo != null && Rotator.bookingParameters().bookingForInfo!.id != 0)\r\n request.subjectId = Rotator.bookingParameters().bookingForInfo!.id;\r\n\r\n if (Rotator.patientId() != null)\r\n request.subjectId = Rotator.patientId();\r\n\r\n //#region Marketing UTM\r\n request.marketingUTMData = new MarketingUTMData();\r\n request.marketingUTMData.campaignSourceId = Rotator.campaignSourceId();\r\n request.marketingUTMData.campaignMediumId = Rotator.campaignMediumId();\r\n request.marketingUTMData.campaignName = Rotator.campaignName();\r\n //#endregion\r\n\r\n request.createFollowUp = Rotator.webComponentParameters()[0].createFollowUp;\r\n\r\n if (Rotator.bookingParameters().filesLoaded != null)\r\n {\r\n vr.filesToBase64(Rotator.bookingParameters().filesLoaded!).then((base64List) =>\r\n {\r\n let i = 0;\r\n request.filesLoaded = [];\r\n for (let file of Rotator.bookingParameters().filesLoaded!)\r\n {\r\n let fileLoaded = new FileLoaded();\r\n fileLoaded.base64 = base64List[i];\r\n fileLoaded.fileName = file.name;\r\n fileLoaded.mimeType = file.type;\r\n request.filesLoaded.push(fileLoaded);\r\n i++;\r\n }\r\n\r\n VrManager.notify(\"Attendere caricamento file in corso prima della prenotazione\");\r\n this.createAppointmentWebApi(request, callback, errorCallback, async);\r\n });\r\n }\r\n else\r\n this.createAppointmentWebApi(request, callback, errorCallback, async);\r\n }\r\n\r\n private static createAppointmentWebApi(request: CreateAppointmentRequest, callback?: (e: CreateAppointmentResponse) => void,\r\n errorCallback?: (e: vrshared.WebApiError) => void, async = true)\r\n {\r\n request.call(\r\n {\r\n success: (response: CreateAppointmentResponse) =>\r\n {\r\n Support.manageTrackingCookiesEvent(EventTypeEnum.Booked, Rotator.bookingParameters().activityType.id, { amount: Rotator.confirmationParameters()!.price });\r\n\r\n if (callback != null)\r\n callback(response);\r\n },\r\n error: (e) =>\r\n {\r\n if (errorCallback != null)\r\n errorCallback(e);\r\n },\r\n mode: (async) ? vrshared.WebApiModeEnum.Async : vrshared.WebApiModeEnum.Sync,\r\n loader: Rotator.container()\r\n });\r\n }\r\n\r\n static print(appointmentId: number)\r\n {\r\n let request = new DownloadBookingConfirmationReportRequest();\r\n request.appointmentId = Number(appointmentId);\r\n request.call(\r\n {\r\n success: (response: DownloadBookingConfirmationReportResponse) =>\r\n {\r\n vrshared.UtilityManager().downloadFile(response.pdfDataBase64, response.fileName, FileTypeEnum.Pdf);\r\n },\r\n mode: vrshared.WebApiModeEnum.Async,\r\n loader: Rotator.container()\r\n });\r\n }\r\n}\r\n\r\n//#region Classes\r\nclass CreateAppointmentRequest extends WebApiRequestBase\r\n{\r\n public method: string = \"/api/BookingWebApi/CreateAppointment\";\r\n\r\n subjectId?: number | null;\r\n from: Date;\r\n activityTypeId: number;\r\n price: number;\r\n resourceId: number;\r\n note: string;\r\n workplaceId: number;\r\n createInvoice: boolean;\r\n webApiFrom: WebApiDateTime;\r\n resourceInstrumentId: number;\r\n resourceSpaceId: number;\r\n marketingUTMData: MarketingUTMData;\r\n createFollowUp: boolean;\r\n filesLoaded: FileLoaded[];\r\n priceId: number;\r\n}\r\n\r\nexport class FileLoaded\r\n{\r\n base64: string;\r\n fileName: string;\r\n mimeType: string;\r\n}\r\n\r\nclass MarketingUTMData\r\n{\r\n public campaignSourceId: number;\r\n public campaignMediumId: number;\r\n public campaignName: string;\r\n}\r\n\r\nclass CreateAppointmentResponse extends WebApiResponseBase\r\n{\r\n public appointmentId: number;\r\n public documentId: number;\r\n public needsToAddStampRow: boolean;\r\n}\r\n\r\nclass DownloadBookingConfirmationReportRequest extends WebApiRequestBase\r\n{\r\n public method: string = \"/api/PrivateAreaWebApi/DownloadBookingReport\";\r\n public appointmentId: number;\r\n}\r\n\r\nclass DownloadBookingConfirmationReportResponse extends WebApiResponseBase\r\n{\r\n public fileName: string;\r\n public pdfDataBase64: string;\r\n}\r\n\r\nexport class Confirmation2Parameters\r\n{\r\n public subjectId?: number;\r\n}\r\n//#endregion","import { Rotator, puma } from \"../rotator\";\r\nimport { SelectionListControl } from \"./selectionListControl\";\r\nimport { Booking, StepEnum } from \"./booking\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\nimport { ResourceResponse } from \"../../src/shared/common\";\r\n\r\nexport class DoctorList\r\n{\r\n private static _container: HTMLElement;\r\n\r\n static initialize()\r\n {\r\n this._container = puma(\"
\").appendTo(Rotator.container())[0];\r\n Rotator.title(\"PRENOTA\");\r\n this.createControls();\r\n }\r\n\r\n static createControls()\r\n {\r\n Booking.createStep(StepEnum.Doctor, this._container, true, () => Rotator.back());\r\n\r\n let selectionListControl = new SelectionListControl(\r\n {\r\n container: this._container,\r\n rebind:\r\n {\r\n authKey: \"10(P9m+U3aM@10tt-Oeo\",\r\n method: \"/api/BookingWebApi/GetResources\",\r\n itemsPropertyName: \"resourcesList\",\r\n rebindAtStartup: true,\r\n parameters: () =>\r\n {\r\n let parameters: any = {};\r\n parameters.plantIdList = [Rotator.configuration().plant.id];\r\n\r\n if (Rotator.bookingParameters().activityType != null)\r\n parameters.activityTypeId = Rotator.bookingParameters().activityType.id;\r\n\r\n if (Rotator.bookingParameters().workplace != null)\r\n parameters.workplaceIdList = [Rotator.bookingParameters().workplace!.id];\r\n\r\n parameters.resourceId = Rotator.webComponentParameters()[0].specificDoctorId;\r\n parameters.resourceIdList = Rotator.webComponentParameters()[0].specificDoctorIdList;\r\n\r\n return parameters;\r\n },\r\n callback: () => \r\n {\r\n if (Rotator.bookingParameters().resource != null)\r\n selectionListControl.select(Rotator.bookingParameters().resource.id);\r\n }\r\n },\r\n onSelect: (e) =>\r\n {\r\n Rotator.bookingParameters().resource = (e.dataItem.id == 0) ? null : e.dataItem;\r\n Rotator.back();\r\n }\r\n }\r\n );\r\n }\r\n\r\n static getResources(callback?: (e: GetResourcesResponse) => void, loader: HTMLElement | boolean = false)\r\n {\r\n let workplaceIdList = (Rotator.bookingParameters().workplace != null) ? [Rotator.bookingParameters().workplace!.id] : null;\r\n let request = new GetResourcesRequest();\r\n request.resourceId = Rotator.webComponentParameters()[0].specificDoctorId;\r\n request.resourceIdList = Rotator.webComponentParameters()[0].specificDoctorIdList;\r\n request.workplaceIdList = workplaceIdList;\r\n\r\n // if ((Rotator.webComponentParameters()[0].specificDoctorId == null || Rotator.webComponentParameters()[0].specificDoctorId == 0) && (Rotator.webComponentParameters()[0].specificDoctorIdList == null || Rotator.webComponentParameters()[0].specificDoctorIdList.length == 0))\r\n {\r\n if (Rotator.bookingParameters().activityType != null)\r\n request.activityTypeId = Rotator.bookingParameters().activityType.id;\r\n }\r\n\r\n request.call(\r\n {\r\n success: (response: GetResourcesResponse) =>\r\n {\r\n Rotator.bookingParameters().resourceList = response.resourcesList;\r\n\r\n if (Rotator.webComponentParameters()[0].specificDoctorId != null)\r\n {\r\n let resource = Rotator.bookingParameters().resourceList.filter(k => k.id == Rotator.webComponentParameters()[0].specificDoctorId)[0];\r\n Rotator.bookingParameters().resource = resource;\r\n }\r\n\r\n if (callback != null)\r\n callback(response);\r\n },\r\n mode: vrshared.WebApiModeEnum.Async,\r\n loader: loader,\r\n loaderDelay: 200\r\n });\r\n }\r\n}\r\n\r\n//#region Classes\r\nclass GetResourcesRequest extends WebApiRequestBase\r\n{\r\n public method: string = \"/api/BookingWebApi/GetResources\";\r\n\r\n public activityTypeId: number;\r\n public workplaceIdList: number[] | null;\r\n public includeActivitiesInResponse: boolean;\r\n public onlyBookableOnline?: boolean;\r\n public resourceId?: number;\r\n public resourceIdList?: number[];\r\n}\r\n\r\nclass GetResourcesResponse extends WebApiResponseBase\r\n{\r\n public resourcesList: ResourceResponse[];\r\n}\r\n//#endregion","import { Rotator, puma, PageEnum } from \"../../src/rotator\";\r\nimport { Confirmation1 } from \"./confirmation1\";\r\nimport { OnlineBookingLoadingFileMode } from \"../../src/shared/common\";\r\nimport { VrManager } from \"../../src/shared/vrManager\";\r\n\r\nexport class FileLoading\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\r\n\tstatic initialize()\r\n\t{\r\n\t\tthis._container = puma(\"
\").appendTo(Rotator.container())[0];\r\n\t\tRotator.title(\"CARICA FILE\");\r\n\r\n\t\tthis.createControls();\r\n\t}\r\n\r\n\tstatic createControls()\r\n\t{\r\n\t\tConfirmation1.drawSummary(vr.div(this._container, { class: \"vrPatientDivSlot\" }), true);\r\n\t\tlet activityType = Rotator.bookingParameters().activityType;\r\n\r\n\t\tlet divFiles = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\t\tvr.createLabel(\r\n\t\t\t{\r\n\t\t\t\ttext: String.isNotNullOrEmpty(activityType.onlineBookingLoadingFileMessage)\r\n\t\t\t\t\t? activityType.onlineBookingLoadingFileMessage\r\n\t\t\t\t\t: ((activityType.onlineBookingLoadingFileModeId == OnlineBookingLoadingFileMode.RequireLoading) ? \"Questa prestazione prevede necessariamente il caricamento di alcuni file\" : \"Per questa prestazione è possibile caricare dei file\"),\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t}, divFiles);\r\n\r\n\t\tlet upload = vr.createUpload({\r\n\t\t\tuploadButton: \"Carica file...\",\r\n\t\t\tfileList: true,\r\n\t\t\tprogressBar: true,\r\n\t\t\tmultiple: true,\r\n\t\t\tautoUpload: false,\r\n\t\t\tdropArea: !Rotator.isMobile(),\r\n\t\t\tcssContainer: \"margin-bottom: 5px; margin-top: 10px;\",\r\n\t\t}, divFiles);\r\n\r\n\t\tif (Rotator.bookingParameters().filesLoaded != null)\r\n\t\t\tupload.addFiles(Rotator.bookingParameters().filesLoaded!);\r\n\r\n\t\tvr.createButton(\r\n\t\t\t{\r\n\t\t\t\ttext: (Rotator.bookingParameters().filesLoaded != null) ? \"Aggiorna o carica file\" : \"Carica file\",\r\n\t\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\t\tclass: \"vrButtonBookingAppointment vrButtonPatient\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tonClick: (e) => \r\n\t\t\t\t{\r\n\t\t\t\t\tlet files = upload.getFiles();\r\n\t\t\t\t\tif (files.length == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (Rotator.bookingParameters().filesLoaded == null\r\n\t\t\t\t\t\t\t|| (Rotator.bookingParameters().filesLoaded != null && activityType.onlineBookingLoadingFileModeId == OnlineBookingLoadingFileMode.RequireLoading))\r\n\t\t\t\t\t\t\tVrManager.notify(\"Caricare almeno un file\", undefined, { type: vr.NotifierTypeEnum.Warning });\r\n\r\n\t\t\t\t\t\te.sender.text(\"Carica file\");\r\n\t\t\t\t\t\tRotator.bookingParameters().filesLoaded = null;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tRotator.bookingParameters().filesLoaded = files;\r\n\t\t\t\t\tRotator.page(PageEnum.Confirmation2);\r\n\t\t\t\t}\r\n\t\t\t}, this._container);\r\n\r\n\t\tif (activityType.onlineBookingLoadingFileModeId == OnlineBookingLoadingFileMode.RequireLoading)\r\n\t\t{\r\n\t\t\tvr.createButton(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: \"Annulla prenotazione\",\r\n\t\t\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\t\t\tcssContainer: \"margin-top: 10px;\",\r\n\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\tclass: \"vrButtonBookingCancelAppointment vrButtonPatient\",\r\n\t\t\t\t\tonClick: (e) => \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tRotator.bookingParameters().filesLoaded = null;\r\n\t\t\t\t\t\tRotator.confirmationParameters(null);\r\n\t\t\t\t\t\tRotator.goToMainPage();\r\n\t\t\t\t\t}\r\n\t\t\t\t}, this._container);\r\n\t\t}\r\n\t}\r\n}","import { Rotator, puma } from \"../rotator\";\r\nimport { Booking, StepEnum } from \"./booking\";\r\n\r\nexport class FromList\r\n{\r\n private static _container: HTMLElement;\r\n\r\n static initialize()\r\n {\r\n this._container = puma(\"
\").appendTo(Rotator.container())[0];\r\n Rotator.title(\"PRENOTA\");\r\n this.createControls();\r\n }\r\n\r\n static createControls()\r\n {\r\n Booking.createStep(StepEnum.From, this._container, true, () => Rotator.back());\r\n\r\n let divCalendar = vr.div(this._container, { css: \"text-align: center;\" });\r\n vr.createCalendar(\r\n {\r\n width: \"100%\",\r\n selectedColor: Rotator.color(),\r\n value: (Rotator.bookingParameters().from != null) ? new Date(Rotator.bookingParameters().from) : new Date(),\r\n availableFrom: new Date(),\r\n onAfterChange: (e) =>\r\n {\r\n Rotator.bookingParameters().from = e.value!;\r\n Rotator.back();\r\n }\r\n }, divCalendar);\r\n }\r\n}","import { Rotator, puma } from \"../../src/rotator\";\r\nimport { CashAdvanceInfo } from \"../../src/privateArea/paymentData\";\r\nimport { Confirmation1 } from \"./confirmation1\";\r\n\r\ndeclare var leafletImage: any;\r\n\r\nexport class PaymentResult\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\tprivate static _parameters: PaymentResultParameters;\r\n\tprivate static _base64Map: string;\r\n\r\n\tstatic initialize(parameters: PaymentResultParameters)\r\n\t{\r\n\t\tthis._parameters = parameters;\r\n\t\tthis._container = puma(\"
\").appendTo(Rotator.container())[0];\r\n\t\tRotator.title(\"CONFERMA\");\r\n\r\n\t\tthis.createControls();\r\n\t\twindow.setTimeout(() => Rotator.burgerButton().show(), 300);\r\n\t\tRotator.confirmationParameters(null);\r\n\t\tRotator.bookingParameters().bookingForInfo = null;\r\n\t}\r\n\r\n\tstatic createControls()\r\n\t{\r\n\t\tlet divSummary = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\t\tConfirmation1.drawSummary(divSummary);\r\n\r\n\t\tlet map = vr.createMap(\r\n\t\t\t{\r\n\t\t\t\tlatitude: Rotator.confirmationParameters()!.workplace.latitude,\r\n\t\t\t\tlongitude: Rotator.confirmationParameters()!.workplace.longitude,\r\n\t\t\t\tcssContainer: \"margin-top: 15px;\",\r\n\t\t\t\theight: 120,\r\n\t\t\t\tenable: false,\r\n\t\t\t\tmode: vr.MapModeEnum.Streets,\r\n\t\t\t\tonClick: (e) => \r\n\t\t\t\t{\r\n\t\t\t\t\tvrshared.UtilityManager().openUrl(\"https://www.google.com/maps/search/?api=1&query=\" + Rotator.confirmationParameters()!.workplace.latitude + \",\" + Rotator.confirmationParameters()!.workplace.longitude, true);\r\n\t\t\t\t}\r\n\t\t\t}, divSummary);\r\n\r\n\t\tleafletImage(map.map(), (err: any, canvas: any) =>\r\n\t\t{\r\n\t\t\tthis._base64Map = canvas.toDataURL(\"image/jpeg\").replace(\"data:image/jpeg;base64,\", \"\");\r\n\t\t});\r\n\r\n\t\tlet divSlot = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"margin-bottom: 30px;\" });\r\n\t\tvr.createLabel({\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\talign: vr.TextAlignEnum.Center,\r\n\t\t\ttext: (this._parameters.cashAdvanceInfo == null) ? \"Pagamento riuscito con successo!\" : \"Acconto di \" + this._parameters.cashAdvanceInfo.cashAdvancePrice + \"€ pagato con successo!\"\r\n\t\t}, divSlot);\r\n\r\n\t\tvr.createButton(\r\n\t\t\t{\r\n\t\t\t\ttext: \"Prenota un altro\",\r\n\t\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\t\tcssContainer: \"margin-top: 10px;\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tonClick: (e) => Rotator.goToMainPage()\r\n\t\t\t}, divSlot);\r\n\r\n\t\tif (this._parameters.documentId > 0)\r\n\t\t{\r\n\t\t\tvr.createButton(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: \"Scarica fattura\",\r\n\t\t\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\t\t\tcssContainer: \"margin-top: 10px;\",\r\n\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\tonClick: (e) => vrshared.UtilityManager().downloadFile(this._parameters.documentBase64, this._parameters.documentName)\r\n\t\t\t\t}, divSlot);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//#region Classes\r\nexport class PaymentResultParameters\r\n{\r\n\tappointmentId: number;\r\n\tdocumentId: number;\r\n\tdocumentName: string;\r\n\tdocumentBase64: string;\r\n\tcashAdvanceInfo: CashAdvanceInfo;\r\n}\r\n//#endregion","import { Rotator, puma, PageEnum } from \"../rotator\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"../shared/webApi\";\r\nimport { ResourceResponse, Timeslot, WorkplaceResponse, GenderEnum } from \"../shared/common\";\r\nimport { TimeslotListParameters } from \"./timeslotList\";\r\nimport { DoctorList } from \"./doctorList\";\r\nimport { EventTypeEnum, PriceTypeEnum, Support } from \"../support\";\r\nimport { WaitingListParameters } from \"./waitingList\";\r\nimport { param } from \"jquery\";\r\n\r\nexport class ResourceTimeslots\r\n{\r\n private static _container: HTMLElement;\r\n private static _indexForLoader: number;\r\n\r\n static initialize()\r\n {\r\n this._container = puma(\"
\").appendTo(Rotator.container())[0];\r\n Rotator.title(\"DISPONIBILITÀ\");\r\n this._indexForLoader = 0;\r\n\r\n if (Rotator.bookingParameters().resourceList == null)\r\n DoctorList.getResources((e) => this.drawResourcesSlot(), Rotator.container());\r\n else\r\n this.drawResourcesSlot();\r\n }\r\n\r\n private static drawResourcesSlot()\r\n {\r\n let resources = Rotator.bookingParameters().resourceList.filter(k => k.id != 0);\r\n if (Rotator.bookingParameters().resource != null)\r\n resources = resources.filter(k => k.id == Rotator.bookingParameters().resource.id);\r\n\r\n if (resources.length == 0)\r\n {\r\n vr.createLabel({\r\n text: \"Non è presente alcun personale sanitario disponibile per effettuare la prestazione selezionata\",\r\n width: \"100%\",\r\n align: vr.TextAlignEnum.Center\r\n }, this._container);\r\n }\r\n else if (resources.length > 1)\r\n vrshared.LoaderManager().show(Rotator.container(), true, \"resourcesLoadDiv\");\r\n\r\n //resources = resources.take(1);\r\n for (let resource of resources)\r\n {\r\n let divSlot = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n let divResourceInfo = vr.div(divSlot, { css: \"display: flex;\" });\r\n\r\n //#region Image/Icon\r\n if (resource.hasAvatar || ((resource as any).imageBase64 != null && (resource as any).imageBase64 != \"\"))\r\n {\r\n let avatar = resource.imageBase64;\r\n vr.createImage(\r\n {\r\n value: avatar,\r\n base64: true,\r\n width: 70,\r\n height: 70,\r\n cssContainer: \"justify-content: center; margin-right: 10px;\",\r\n css: \"border-radius: 35px;\"\r\n }, divResourceInfo);\r\n }\r\n else\r\n vr.icon(vr.IconClassicLight.UserDoctor, divResourceInfo, { css: \"justify-content: center; margin-right: 10px; font-size: 5em; color: \" + Rotator.color() + \";\" });\r\n //#endregion\r\n\r\n //#region Info\r\n let divInfo = vr.div(divResourceInfo, { css: \"display: inline-block; width: Calc(100% - 75px); text-align: left; min-height: 70px;\" });\r\n\r\n let title = (resource.title != null && resource.title != \"\") ? resource.title : ((resource.genderEnum == GenderEnum.Female) ? \"Dott.ssa\" : \"Dott.\");\r\n vr.createLabel(\r\n {\r\n text: \"\" + title + \" \" + resource.name,\r\n width: \"100%\",\r\n css: \"font-weight: 600;\",\r\n noBr: true\r\n }, divInfo);\r\n\r\n if (resource.qualification != null && resource.qualification.length > 0)\r\n {\r\n vr.createLabel(\r\n {\r\n text: resource.qualification,\r\n width: \"100%\",\r\n css: \"font-size: 1em;\"\r\n }, divInfo);\r\n }\r\n\r\n if (resource.rating != null && resource.rating.values.length > 0)\r\n {\r\n vr.createRating(\r\n {\r\n cssContainer: \"margin-top: 7px;\",\r\n max: resource.rating.total,\r\n value: resource.rating.values.sum() / resource.rating.values.length,\r\n total: resource.rating.values.length,\r\n enable: false\r\n }, divInfo);\r\n }\r\n //#endregion\r\n\r\n //#region ActivityType\r\n let divActivityType = vr.div(divSlot, { css: \"margin-top: 10px;\" });\r\n vr.icon(vr.IconClassicLight.FileLines, divActivityType, { css: \"margin-right: 5px; position: relative; top: -1px; color: \" + Rotator.color() });\r\n vr.createLabel(\r\n {\r\n text: Rotator.bookingParameters().activityType.onlineBookingName,\r\n width: \"Calc(100% - 25px)\",\r\n class: \"vrPatient_lblActivityType\"\r\n }, divActivityType);\r\n //#endregion\r\n\r\n //#region Workplaces\r\n if (Rotator.bookingParameters().workplace == null)\r\n {\r\n let divWorkplaces = vr.div(divSlot);\r\n this.getNextAvailability(resource.id, null, Rotator.bookingParameters().from, (e) =>\r\n {\r\n let divSlots = vr.div(divSlot, { id: \"vrPatientDivSlots\", css: \"margin-top: 10px; min-height: 137px;\" });\r\n if (e.nextAvailabilitiesByWorkplace.length == 0)\r\n {\r\n let workplaceList = Rotator.bookingParameters().workplaceList.filter(k => k.id != 0);\r\n let workplace = null;\r\n if (workplaceList.length == 1)\r\n workplace = workplaceList[0];\r\n\r\n this.drawWorkplaceTimeslots(divSlots, workplace, resource, []);\r\n }\r\n else \r\n {\r\n if (e.nextAvailabilitiesByWorkplace.length > 1)\r\n {\r\n for (let availabilityWorkplace of e.nextAvailabilitiesByWorkplace)\r\n {\r\n let workplace = Rotator.bookingParameters().workplaceList.filter(k => k.id == availabilityWorkplace.workplaceId)[0];\r\n let divWorkplace = vr.div(divWorkplaces, { class: \"vrPatientDiwWorkplace\", css: \"width: Calc(50% - 20px); border-bottom: solid 3px #eaeaea; display: inline-block; text-align: center; padding: 10px;\" });\r\n vr.icon(vr.IconClassicLight.MapPin, divWorkplace, { css: \"margin-right: 5px; position: relative; top: -1px; color: \" + Rotator.color() });\r\n puma(divWorkplace).attr(\"value\", workplace.id);\r\n puma(divWorkplace).click((e: any) =>\r\n {\r\n //#region Transiction effect\r\n let oldSelected = puma(e.currentTarget).parent().find(\".vrPatientDiwWorkplace.vrPatientWorkplaceSelected\");\r\n if (oldSelected.attr(\"value\") == puma(e.currentTarget).attr(\"value\"))\r\n return;\r\n\r\n let colorOpacity = Rotator.color() + \"47\";\r\n oldSelected.css(\"border-bottom\", \"solid 3px \" + colorOpacity);\r\n window.setTimeout(() => oldSelected.css(\"border-bottom\", \"solid 3px #eaeaea\"), 100);\r\n oldSelected.removeClass(\"vrPatientWorkplaceSelected\");\r\n //#endregion\r\n\r\n puma(e.currentTarget).css(\"border-bottom\", \"solid 3px \" + Rotator.color());\r\n puma(e.currentTarget).addClass(\"vrPatientWorkplaceSelected\");\r\n this.getNextAvailability(resource.id, workplace.id, Rotator.bookingParameters().from, (e2) =>\r\n {\r\n this.drawWorkplaceTimeslots(divSlots, workplace, resource, e2.nextAvailabilities);\r\n }, divSlots);\r\n });\r\n\r\n vr.createLabel({\r\n text: workplace.city,\r\n noBr: true\r\n }, divWorkplace);\r\n }\r\n\r\n puma(puma(divSlot).find(\".vrPatientDiwWorkplace\")[0]).addClass(\"vrPatientWorkplaceSelected\");\r\n puma(puma(divSlot).find(\".vrPatientDiwWorkplace\")[0]).css(\"border-bottom\", \"solid 3px \" + Rotator.color());\r\n }\r\n\r\n let workplace = Rotator.bookingParameters().workplaceList.filter(k => k.id == e.nextAvailabilitiesByWorkplace[0].workplaceId)[0];\r\n this.getNextAvailability(resource.id, workplace.id, Rotator.bookingParameters().from, (e3) =>\r\n {\r\n this.drawWorkplaceTimeslots(divSlots, workplace, resource, e3.nextAvailabilities);\r\n }, divSlots);\r\n }\r\n vrshared.LoaderManager().hide(\"resourcesLoadDiv\");\r\n }, false);\r\n }\r\n else\r\n {\r\n let divSlots = vr.div(divSlot, { id: \"vrPatientDivSlots\", css: \"margin-top: 10px; min-height: 137px;\" });\r\n this.getNextAvailability(resource.id, Rotator.bookingParameters().workplace!.id, Rotator.bookingParameters().from, (f) =>\r\n {\r\n this.drawWorkplaceTimeslots(divSlots, Rotator.bookingParameters().workplace!, resource, f.nextAvailabilities);\r\n vrshared.LoaderManager().hide(\"resourcesLoadDiv\");\r\n }, divSlots);\r\n }\r\n //#endregion\r\n }\r\n\r\n Support.manageTrackingCookiesEvent(EventTypeEnum.SearchAvailabilities, Rotator.bookingParameters().activityType.id);\r\n }\r\n\r\n static drawWorkplaceTimeslots(divSlot: HTMLElement, workplace: WorkplaceResponse | null, resource: ResourceResponse | null, timeslots: Timeslot[])\r\n {\r\n puma(divSlot).empty();\r\n\r\n //#region Address\r\n if (resource != null && workplace != null)\r\n {\r\n let divWorkplace = vr.div(divSlot, { css: \"margin-top: 5px;\" });\r\n vr.icon(vr.IconClassicLight.MapPin, divWorkplace, { css: \"margin-right: 5px; position: relative; top: -1px; color: \" + Rotator.color() });\r\n let address = Support.getAddressName(workplace);\r\n vr.createLabel(\r\n {\r\n text: address + \"
\" + workplace.name + \"\",\r\n width: \"Calc(100% - 25px)\"\r\n }, divWorkplace);\r\n }\r\n //#endregion\r\n\r\n let defaultTimeslot = timeslots[0];\r\n if (defaultTimeslot == null)\r\n {\r\n let divNoTimeslots = vr.div(divSlot, { css: \"display: flex; align-items: center; justify-content: center; min-height: 93px; flex-direction: column;\" });\r\n\r\n //#region No timeslots\r\n let noAvailabilityMessage = Rotator.configuration().appNoAvailabilitiesMessage;\r\n vr.createLabel({\r\n text: (noAvailabilityMessage != null) ? noAvailabilityMessage : \"Non sono presenti disponibilità\",\r\n css: \"font-size: 1.2em;\",\r\n width: \"100%\",\r\n cssContainer: \"height: 50px; margin-bottom: 10px; margin-top: 10px;\",\r\n colorSettings: { textColor: \"#737373\" },\r\n align: vr.TextAlignEnum.Center,\r\n noBr: 3\r\n }, divNoTimeslots);\r\n\r\n //#region Buttons\r\n let divNoAvailabilityButtons = null;\r\n if ((Rotator.configuration().appNoAvailabilitiesPhoneNumber != null && Rotator.configuration().appNoAvailabilitiesPhoneNumber.length > 0)\r\n || (Rotator.configuration().appNoAvailabilitiesMail != null && Rotator.configuration().appNoAvailabilitiesMail.length > 0))\r\n divNoAvailabilityButtons = vr.div(divNoTimeslots, { css: \"width: 100%; display: flex;\" });\r\n\r\n if (Rotator.configuration().appNoAvailabilitiesPhoneNumber != null && Rotator.configuration().appNoAvailabilitiesPhoneNumber.length > 0)\r\n {\r\n vr.createButton({\r\n text: \"Chiama\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n width: \"100%\",\r\n onClick: (e) =>\r\n {\r\n let link = document.createElement(\"a\");\r\n link.href = \"tel:\" + Rotator.configuration().appNoAvailabilitiesPhoneNumber;\r\n link.click();\r\n }\r\n }, divNoAvailabilityButtons);\r\n }\r\n\r\n if (Rotator.configuration().appNoAvailabilitiesMail != null && Rotator.configuration().appNoAvailabilitiesMail.length > 0\r\n && !Rotator.bookingParameters().activityType.useWaitingListIfNoAvailabilities)\r\n {\r\n vr.createButton({\r\n text: \"Email\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n width: \"100%\",\r\n onClick: (e) =>\r\n {\r\n let link = document.createElement(\"a\");\r\n link.href = \"mailto:\" + Rotator.configuration().appNoAvailabilitiesMail;\r\n link.click();\r\n }\r\n }, divNoAvailabilityButtons);\r\n }\r\n //#endregion\r\n\r\n //#region Waiting list\r\n if (Rotator.bookingParameters().activityType.useWaitingListIfNoAvailabilities === true && workplace != null)\r\n {\r\n vr.createButton({\r\n text: \"Aggiungi alla lista di attesa\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n cssContainer: \"margin-top: 5px;\",\r\n width: \"100%\",\r\n onClick: (e) =>\r\n {\r\n let waitingListParameters = new WaitingListParameters();\r\n waitingListParameters.workplaceId = workplace.id;\r\n waitingListParameters.resourceId = (resource != null) ? resource.id : 0;\r\n Rotator.page(PageEnum.WaitingList, waitingListParameters);\r\n }\r\n }, divNoTimeslots);\r\n }\r\n //#endregion\r\n\r\n //#endregion\r\n\r\n return;\r\n }\r\n\r\n //#region Price\r\n let activityTypeName = Rotator.bookingParameters().activityType.onlineBookingName;\r\n let displayPrice = Support.displayPrice(defaultTimeslot.price, PriceTypeEnum.ActivityType, true);\r\n puma(divSlot).parent().find(\".vrPatient_lblActivityType\").html(activityTypeName + displayPrice);\r\n //#endregion\r\n\r\n let divFirstAvailability = vr.div(divSlot, { css: \"margin-top: 5px;\" });\r\n vr.icon(vr.IconClassicLight.Calendar, divFirstAvailability, { css: \"margin-right: 5px; position: relative; top: -1px; color: \" + Rotator.color() });\r\n vr.createLabel(\r\n {\r\n text: \"Prima disponibilità: \" + new Date(defaultTimeslot.day).toItalyShortString() + \"\",\r\n width: \"Calc(100% - 25px)\"\r\n }, divFirstAvailability);\r\n\r\n let divTimeslots = vr.div(divSlot, { css: \"padding-top: 10px;\" });\r\n let i = 0;\r\n\r\n timeslots = timeslots.filter(k => new Date(new Date(k.day.replace(\"Z\", \"\")).setHours(0, 0, 0)).isEqualsTo(new Date(new Date(defaultTimeslot.day).setHours(0, 0, 0))));\r\n for (let timeslot of timeslots)\r\n {\r\n ResourceTimeslots.createButtonTimeslot(resource, workplace!, divTimeslots, true, timeslots, timeslot);\r\n if (i == 2)\r\n {\r\n i++;\r\n break;\r\n }\r\n i++;\r\n }\r\n\r\n // Fill empty slots\r\n while (i <= 2)\r\n {\r\n vr.createButton(\r\n {\r\n css: \"box-shadow: #ccc 0px 1px 3px; width: calc(100% - 10px); color: #000;\",\r\n cssContainer: \"width: 25%; justify-content: center; margin-bottom: 10px; min-height: 46px;\",\r\n text: \"x\"\r\n }, divTimeslots);\r\n i++;\r\n }\r\n\r\n ResourceTimeslots.createButtonTimeslot(resource, workplace!, divTimeslots, false, timeslots);\r\n }\r\n\r\n static createButtonTimeslot(resource: ResourceResponse | null, workplace: WorkplaceResponse, divTimeslots: HTMLElement, isSlot = false, timeslots: Timeslot[], timeslot?: Timeslot)\r\n {\r\n let text = \"Altre\";\r\n let btnClass = \"vrButtonBookingTimeslotOther\";\r\n if (isSlot && timeslot != null)\r\n {\r\n let fromHours = String(timeslot.hourFromDisplay.hours).padStart(2, \"0\");\r\n let fromMinutes = String(timeslot.hourFromDisplay.minutes).padStart(2, \"0\");\r\n text = fromHours + \":\" + fromMinutes;\r\n\r\n btnClass = \"vrButtonBookingTimeslot\";\r\n }\r\n\r\n vr.createButton(\r\n {\r\n text: text,\r\n icon: (isSlot) ? undefined : vr.IconClassicLight.ChevronRight,\r\n iconSettings: { position: vr.PositionEnum.Right },\r\n colorSettings: (isSlot) ? { textColor: Rotator.color() } : { textColor: Rotator.textColor(), background: Rotator.color() },\r\n css: ((Rotator.isMobile() ? \"font-size: 1em !important;\" : \"\")) + \"box-shadow: 0 1px 3px \" + ((isSlot) ? Rotator.color() : \"rgba(0,0,0,.3)\") + \"; width: Calc(100% - 10px);\" + ((!isSlot) ? \"font-size: 1em; height: 44px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\" : \"\"),\r\n cssContainer: \"width: 25%; justify-content: center; margin-bottom: 10px; min-height: 46px;\",\r\n class: btnClass,\r\n tag: isSlot,\r\n onClick: (e) =>\r\n {\r\n let resourceParameter = resource;\r\n if (resource == null && timeslot != null)\r\n resourceParameter = Rotator.bookingParameters().resourceList.filter(k => k.id == timeslot.resourceSubjectId)[0];\r\n\r\n let parameters = new TimeslotListParameters();\r\n parameters.resource = resourceParameter;\r\n parameters.workplace = workplace;\r\n parameters.resourceInstrumentId = (timeslot != null) ? timeslot.resourceInstrumentId : 0;\r\n parameters.resourceSpaceId = (timeslot != null) ? timeslot.resourceSpaceId : 0;\r\n\r\n if (timeslots != null)\r\n parameters.timeslots = timeslots;\r\n\r\n if (timeslot != null)\r\n {\r\n parameters.timeslot = timeslot;\r\n parameters.price = timeslot.price;\r\n parameters.priceId = timeslot.priceId;\r\n }\r\n else\r\n {\r\n parameters.timeslot = timeslots.first();\r\n parameters.price = timeslots.first().price;\r\n parameters.priceId = timeslots.first().priceId;\r\n }\r\n\r\n Support.manageTrackingCookiesEvent(EventTypeEnum.SelectAvailability, Rotator.bookingParameters().activityType.id);\r\n\r\n if (e.sender.tag() === false)\r\n Rotator.page(PageEnum.TimeslotList, parameters);\r\n else\r\n Rotator.page(PageEnum.Confirmation1, parameters);\r\n }\r\n }, divTimeslots);\r\n }\r\n\r\n static getNextAvailability(resourceId: number | null, workplaceId: number | null, from: Date, callback?: (e: GetNextAvailabilityResponse) => void, divSlot?: HTMLElement | boolean)\r\n {\r\n this._indexForLoader++;\r\n if (divSlot !== false)\r\n vrshared.LoaderManager().show(divSlot as HTMLElement, true, this._indexForLoader);\r\n\r\n let request = new GetNextAvailabilityRequest();\r\n request.activityTypeId = Rotator.bookingParameters().activityType.id;\r\n request.searchFrom = Date.convertDateFromClient(from)!;\r\n request.resourceId = (resourceId == null) ? 0 : resourceId;\r\n request.workplaces = (workplaceId != null) ? [workplaceId] : Rotator.bookingParameters().workplaceList.map(k => k.id);\r\n request.call(\r\n {\r\n success: (response: GetNextAvailabilityResponse) =>\r\n {\r\n if (callback != null)\r\n callback(response);\r\n },\r\n mode: vrshared.WebApiModeEnum.Async,\r\n loader: false\r\n });\r\n }\r\n}\r\n\r\n//#region Classes\r\nclass GetNextAvailabilityRequest extends WebApiRequestBase\r\n{\r\n public method: string = \"/api/BookingWebApi/GetNextAvailability\";\r\n\r\n public searchFrom: Date;\r\n public workplaces: number[] | null;\r\n public resourceId: number | null;\r\n public activityTypeId: number;\r\n}\r\n\r\nclass GetNextAvailabilityResponse extends WebApiResponseBase\r\n{\r\n public nextAvailabilities: Timeslot[];\r\n public nextAvailabilitiesByWorkplace: NextAvailabilityByWorkplace[];\r\n}\r\n\r\nclass NextAvailabilityByWorkplace\r\n{\r\n public workplaceId: number;\r\n public workplaceName: string;\r\n public nextAvailabilities: Timeslot[];\r\n}\r\n//#endregion","import { puma, Rotator } from \"../rotator\";\r\nimport { WebApiRequestBase } from \"../../src/shared/webApi\";\r\n\r\nexport class SelectionListControl\r\n{\r\n private _options: SelectionListControlOptions;\r\n private _items: ControlItem[];\r\n private _txtSearchFilter: vr.TextBox;\r\n private _value?: string | number | null;\r\n\r\n constructor(options: SelectionListControlOptions)\r\n {\r\n if (options.selectionFocusMode == null)\r\n options.selectionFocusMode = false;\r\n\r\n this._options = options;\r\n if (this._options.rebind != null && this._options.rebind.rebindAtStartup === true)\r\n this.rebind();\r\n }\r\n\r\n private getAllItems()\r\n {\r\n let items: ControlItem[] = [];\r\n for (let item of this.items())\r\n {\r\n if (item == null)\r\n continue;\r\n\r\n items.push(item);\r\n if (item.children != null && item.children.length > 0)\r\n {\r\n for (let child of item.children)\r\n {\r\n if (child != null)\r\n items.push(child);\r\n }\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n items(items?: ControlItem[]): ControlItem[]\r\n {\r\n if (items != null) \r\n {\r\n this._items = items;\r\n this.drawDataSource();\r\n }\r\n return this._items;\r\n }\r\n\r\n private drawDataSource(searchedText?: string | null): void\r\n {\r\n puma(this.getOptions().container).find(\".vrPatientSelectionUl\").remove();\r\n\r\n let timeout = 0;\r\n this._txtSearchFilter = vr.createTextBox(\r\n {\r\n width: \"100%\",\r\n icon: vr.IconClassicLight.Search,\r\n placeholder: \"Cerca...\",\r\n class: \"vrComboBoxFilter\",\r\n css: \"height: 100%; width: 100%; padding-top: 0px; padding-bottom: 0px;\",\r\n cssContainer: \"margin-bottom: 5px; margin-top: 5px; height: 35px;\",\r\n onKeyUp: (e) =>\r\n {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(() => \r\n {\r\n let text: string = e.sender.value();\r\n this.filter(text, this._txtSearchFilter.element());\r\n }, 200);\r\n }\r\n }, this.getOptions().container);\r\n\r\n let items = this.items();\r\n if (searchedText != null)\r\n items = this.getFilteredArrayByInputText(searchedText);\r\n\r\n if (items.length == 1 && items[0] == null)\r\n return;\r\n\r\n items = items.filter(k => (k.children != null && k.children.length > 0) || k.children == null);\r\n this.drawItems(items, this.getOptions().container);\r\n }\r\n\r\n private drawItems(items: ControlItem[], elementToAppend: HTMLElement): void\r\n {\r\n let options = this.getOptions();\r\n if (items.length == 0)\r\n return;\r\n\r\n let i = 0;\r\n let ul = puma(\"\").appendToPuma(elementToAppend);\r\n for (let item of items)\r\n {\r\n let children = this.getOnlyChildrenItems(item);\r\n let li = puma(\"
  • \").appendToPuma(ul);\r\n\r\n if (item.children == null && this.isChildren(item))\r\n puma(li).closest(\".vrPatientSelectionUl\").hide();\r\n\r\n let rowText = item.text.replace(/'/g, \"'\");\r\n if (options.template != null)\r\n rowText = options.template({ dataItem: item });\r\n\r\n let comboItem = puma(\"
    \").appendToPuma(li);\r\n let comboItemText = puma(\"\" + rowText + \"\").appendToPuma(comboItem);\r\n puma(comboItemText).click((e: any) =>\r\n {\r\n if (item.children == null)\r\n {\r\n this._value = item.value;\r\n this.select(this._value, true);\r\n }\r\n else\r\n {\r\n puma(comboItem).closest(\"li\").siblings().hide();\r\n puma(comboItem).closest(\"li\").show();\r\n\r\n if (this._value != null || items.length > 1)\r\n puma(comboItem).closest(\"li\").find(\".\" + vr.IconClassicLight.Close.split(\" \")[1]).show();\r\n\r\n let visibleItems = puma(comboItem).closest(\"li\").find(\"li:visible\");\r\n if (visibleItems.length == 0)\r\n {\r\n //#region Expand\r\n puma(comboItem).closest(\"li\").find(\"ul\").show();\r\n puma(comboItem).closest(\"li\").find(\"li\").show();\r\n puma(comboItem).closest(\"li\").find(\".bold\").css(\"font-weight\", \"600\");\r\n //#endregion\r\n }\r\n }\r\n });\r\n\r\n if (items.length == 1 && i == 0 && item.children != null)\r\n puma(comboItemText).click();\r\n\r\n if (children != null && children.length > 0)\r\n {\r\n puma(comboItemText).addClass(\"bold\");\r\n this.drawItems(this.getOnlyChildrenItems(item), li);\r\n }\r\n\r\n if (!this.isChildren(item) && options.selectionFocusMode)\r\n {\r\n let iconClear = vr.icon(vr.IconClassicLight.Close, comboItem, { css: \"background-color: \" + Rotator.color() + \"; color: \" + Rotator.textColor() + \"; padding: 3px; border-radius: 10px; padding-left: 4px; padding-right: 4px;position: absolute; right: 10px; top: 7px; font-size: 1.5em; display: none;\" });\r\n puma(iconClear).on(\"click\", (e: JQuery.ClickEvent) =>\r\n {\r\n this.clear(true, true);\r\n });\r\n\r\n if (items.length <= 1)\r\n puma(iconClear).hide();\r\n }\r\n\r\n i++;\r\n }\r\n }\r\n\r\n private getFilteredArrayByInputText(value: string): ControlItem[]\r\n {\r\n value = value.toLowerCase();\r\n let filteredArray: ControlItem[] = [];\r\n let arrayWhereSearch = this.getAllItems().map(k => String(k.text).toLowerCase());\r\n arrayWhereSearch!.forEach((k, index) => \r\n {\r\n if (k.indexOf(value) != -1)\r\n filteredArray.push(this.getAllItems()[index]);\r\n });\r\n return filteredArray;\r\n }\r\n\r\n private getOnlyChildrenItems(parentItem: ControlItem): ControlItem[]\r\n {\r\n return parentItem.children;\r\n }\r\n\r\n private getAllChildrenItems(): ControlItem[]\r\n {\r\n let children: ControlItem[] = [];\r\n for (let item of this.items())\r\n {\r\n if (item.children != null && item.children.length > 0)\r\n children.pushRange(item.children);\r\n }\r\n return children;\r\n }\r\n\r\n private isChildren(item: ControlItem)\r\n {\r\n return this.getAllChildrenItems().map(k => k.value).includes(item.value);\r\n }\r\n\r\n private getDataChildrenItems(parentItem?: ControlItem | null): ControlItem[]\r\n {\r\n let dataItems = (parentItem == null) ? this.items() : this.getOnlyChildrenItems(parentItem);\r\n let items: ControlItem[] = [];\r\n for (let dataElement of dataItems)\r\n {\r\n items.push(dataElement);\r\n if (this.getOnlyChildrenItems(dataElement).length > 0)\r\n {\r\n for (let dateChildrenItem of this.getDataChildrenItems(dataElement))\r\n items.push(dateChildrenItem);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n private filter(text: string, element: HTMLElement): void\r\n {\r\n let options = this.getOptions();\r\n if (text == \"\")\r\n this.clear(false);\r\n else\r\n {\r\n puma(options.container).find(\".vrPatientSelectionItemText.bold\").css(\"font-weight\", \"600\");\r\n puma(options.container).find(\"li\").hide();\r\n\r\n let items = this.getFilteredArrayByInputText(text);\r\n let texts = items.map(k => k.text);\r\n\r\n if (texts.length > 0)\r\n {\r\n for (let comboItemText of Array.from(puma(options.container).find(\".vrPatientSelectionItemText\")))\r\n {\r\n if (texts.includes(puma(comboItemText).attr(\"text\")))\r\n {\r\n puma(comboItemText).closest(\".vrPatientSelectionLi\").show();\r\n puma(comboItemText).closest(\".vrPatientSelectionLi\").closest(\".vrPatientSelectionUl\").show();\r\n puma(comboItemText).closest(\".vrPatientSelectionLi\").closest(\".vrPatientSelectionUl\").closest(\".vrPatientSelectionLi\").show();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n rebind()\r\n {\r\n puma(this.getOptions().container).find(\".vrPatientSelectionUl\").remove();\r\n puma(this.getOptions().container).find(\".vrComboBoxFilter\").parent().remove();\r\n\r\n let rebindRequest = this.getOptions().rebind!;\r\n\r\n let request = new WebApiRequestBase();\r\n if (rebindRequest.itemsPropertyName == null)\r\n rebindRequest.itemsPropertyName = \"items\";\r\n\r\n (request as any).itemsPropertyName = rebindRequest.itemsPropertyName;\r\n\r\n //#region Method\r\n if (!rebindRequest.method!.startsWith(\"/api/\"))\r\n {\r\n if (rebindRequest.method!.startsWith(\"/\"))\r\n rebindRequest.method!.substring(1);\r\n\r\n rebindRequest.method = \"/api/\" + rebindRequest.method;\r\n }\r\n request.method = rebindRequest.method!;\r\n //#endregion\r\n\r\n //#region Paramaters\r\n if (rebindRequest.parameters != null)\r\n {\r\n let parameters = rebindRequest.parameters();\r\n let jsonParameters = Object.getOwnPropertyNames(parameters);\r\n for (let param of jsonParameters)\r\n (request as any)[param] = parameters[param];\r\n }\r\n //#endregion\r\n\r\n request.call(\r\n {\r\n success: (response: any) =>\r\n {\r\n //#region Set data source if rebind\r\n if (response[(request as RebindRequest).itemsPropertyName!] != null)\r\n this.items(response[(request as RebindRequest).itemsPropertyName!]);\r\n\r\n if (this._txtSearchFilter != null)\r\n this._txtSearchFilter.focus();\r\n //#endregion\r\n\r\n if (rebindRequest!.callback != null)\r\n rebindRequest!.callback(response);\r\n },\r\n mode: vrshared.WebApiModeEnum.Async,\r\n loader: Rotator.container(),\r\n loaderDelay: 500\r\n });\r\n }\r\n\r\n select(value: string | number, triggerChange = false)\r\n {\r\n let options = this.getOptions();\r\n if (triggerChange)\r\n {\r\n let item = this.getAllItems().filter(k => k.value == value)[0];\r\n if (options.onSelect != null)\r\n {\r\n let selectEvent = new OnSelectEvent();\r\n selectEvent.text = item.text;\r\n selectEvent.value = item.value;\r\n selectEvent.dataItem = item;\r\n options.onSelect(selectEvent);\r\n\r\n if (selectEvent.isDefaultPrevented())\r\n return;\r\n }\r\n }\r\n\r\n this.clear();\r\n this._value = value;\r\n\r\n for (let comboItemText of Array.from(puma(options.container).find(\".vrPatientSelectionItemText\")))\r\n {\r\n if (puma(comboItemText).attr(\"value\") == value)\r\n {\r\n puma(comboItemText).closest(\".vrPatientSelectionLi\").show();\r\n puma(comboItemText).closest(\".vrPatientSelectionLi\").closest(\".vrPatientSelectionUl\").show();\r\n puma(comboItemText).css(\"background-color\", Rotator.color());\r\n puma(comboItemText).css(\"color\", Rotator.textColor());\r\n puma(comboItemText).closest(\".vrPatientSelectionLi\").siblings().show();\r\n\r\n if (options.selectionFocusMode)\r\n {\r\n puma(comboItemText).closest(\".vrPatientSelectionLi\").closest(\".vrPatientSelectionUl\").closest(\"li\").siblings().hide();\r\n puma(comboItemText).closest(\".vrPatientSelectionLi\").closest(\".vrPatientSelectionUl\").closest(\"li\").find(\".\" + vr.IconClassicLight.Close.split(\" \")[1]).show();\r\n }\r\n\r\n puma(comboItemText).closest(\".vrPatientSelectionLi\").closest(\".vrPatientSelectionUl\").closest(\"li\").show();\r\n puma(comboItemText).closest(\".vrPatientSelectionLi\").closest(\".vrPatientSelectionUl\").closest(\"li\").find(\".bold\").css(\"font-weight\", \"600\");\r\n break;\r\n }\r\n }\r\n }\r\n\r\n focus()\r\n {\r\n this._txtSearchFilter.focus();\r\n }\r\n\r\n clear(clearValue = true, triggerChange = false): void\r\n {\r\n let options = this.getOptions();\r\n if (options.selectionFocusMode)\r\n puma(options.container).find(\"li\").hide();\r\n\r\n puma(options.container).find(\".vrPatientSelectionItemText.bold\").css(\"font-weight\", \"normal\");\r\n\r\n let liList = Array.from(puma(options.container).find(\"li\"));\r\n for (let li of liList)\r\n {\r\n if (puma(li).find(\"ul\").length > 0)\r\n {\r\n puma(li).find(\"ul\").hide();\r\n puma(li).show();\r\n }\r\n }\r\n\r\n for (let comboItemText of Array.from(puma(options.container).find(\".vrPatientSelectionItemText\")))\r\n {\r\n puma(comboItemText).css(\"background-color\", \"#FFF\");\r\n puma(comboItemText).css(\"color\", Rotator.color());\r\n }\r\n\r\n puma(options.container).find(\".\" + vr.IconClassicLight.Close.split(\" \")[1]).hide();\r\n\r\n if (this.items() != null && this.items().length == 1)\r\n {\r\n let comboItemText = puma(options.container).find(\"li:first-child .vrPatientSelectionItemText\")[0];\r\n puma(comboItemText).closest(\"li\").siblings().hide();\r\n puma(comboItemText).closest(\"li\").show();\r\n\r\n let visibleItems = puma(comboItemText).closest(\"li\").find(\"li:visible\");\r\n if (visibleItems.length == 0)\r\n {\r\n //#region Expand\r\n puma(comboItemText).closest(\"li\").find(\"ul\").show();\r\n puma(comboItemText).closest(\"li\").find(\"li\").show();\r\n puma(comboItemText).closest(\"li\").find(\".bold\").css(\"font-weight\", \"600\");\r\n //#endregion\r\n }\r\n }\r\n\r\n if (clearValue)\r\n this._value = null;\r\n else if (this._value != null)\r\n this.select(this._value);\r\n\r\n if (triggerChange)\r\n {\r\n if (options.onClear != null)\r\n {\r\n let clearEvent = new OnClearEvent();\r\n clearEvent.sender = this;\r\n options.onClear(clearEvent);\r\n }\r\n }\r\n }\r\n\r\n container()\r\n {\r\n return this.getOptions().container;\r\n }\r\n\r\n private getOptions()\r\n {\r\n return this._options;\r\n }\r\n}\r\n\r\nclass SelectionListControlOptions\r\n{\r\n container: HTMLElement;\r\n rebind?: RebindRequest;\r\n filter?: boolean;\r\n selectionFocusMode?: boolean;\r\n template?: (e: TemplateEvent) => string;\r\n\r\n onSelect?: (e: OnSelectEvent) => void;\r\n onClear?: (e: OnClearEvent) => void;\r\n}\r\n\r\nclass OnClearEvent\r\n{\r\n sender: SelectionListControl;\r\n}\r\n\r\nclass TemplateEvent\r\n{\r\n dataItem?: any;\r\n}\r\n\r\nclass RebindRequest\r\n{\r\n authKey?: string;\r\n method?: string;\r\n rebindAtStartup?: boolean;\r\n itemsPropertyName?: string;\r\n\r\n callback?: (response?: any) => void;\r\n parameters?: () => any;\r\n}\r\n\r\nclass OnSelectEvent\r\n{\r\n value: string | number;\r\n text: string;\r\n dataItem: any;\r\n\r\n private _defaultPrevented: boolean = false;\r\n\r\n preventDefault()\r\n {\r\n this._defaultPrevented = true;\r\n }\r\n\r\n isDefaultPrevented()\r\n {\r\n return this._defaultPrevented;\r\n }\r\n}\r\n\r\nclass ControlItem\r\n{\r\n text: string;\r\n value: string | number;\r\n children: ControlItem[];\r\n}","import { Rotator, puma, PageEnum } from \"../rotator\";\r\nimport { PriceTypeEnum, Support } from \"../support\";\r\nimport { AvailabilityRequestMultiplant, AvailabilityResponse, GenderEnum, ResourceResponse, Timeslot, WorkplaceResponse } from \"../shared/common\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"../shared/webApi\";\r\nimport { ResourceTimeslots } from \"./resourceTimeslots\";\r\n\r\nexport class TimeslotList\r\n{\r\n private static _container: HTMLElement;\r\n private static _parameters: TimeslotListParameters;\r\n private static _startDate: Date;\r\n private static _divTimeslots: HTMLElement;\r\n private static _initialDate: Date;\r\n private static _divWorkplace: HTMLElement;\r\n private static _popupAddress: HTMLElement;\r\n private static _popupAddressBackground: HTMLElement;\r\n private static _btnBack: vr.Button;\r\n\r\n static initialize(parameters: TimeslotListParameters)\r\n {\r\n if (parameters == null)\r\n {\r\n Rotator.back();\r\n return;\r\n }\r\n\r\n this._parameters = parameters;\r\n this._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n Rotator.title(\"DISPONIBILITÀ\");\r\n this.createControls();\r\n }\r\n\r\n private static createControls()\r\n {\r\n //#region Info\r\n let divInfo = vr.div(this._container, { css: \"padding: 10px; padding-top: 0px; padding-bottom: 0px;\" });\r\n\r\n if (this._parameters.resource != null && !Rotator.sailor())\r\n {\r\n let resource = this._parameters.resource;\r\n let title = (resource.title != null && resource.title != \"\") ? resource.title : ((resource.genderEnum == GenderEnum.Female) ? \"Dott.ssa\" : \"Dott.\");\r\n vr.createLabel(\r\n {\r\n text: title + \" \" + \"\" + resource.name + \"\",\r\n width: \"100%\"\r\n }, divInfo);\r\n }\r\n\r\n let divActivityType = vr.div(divInfo, { css: \"margin-top: 5px;\" });\r\n vr.icon(vr.IconClassicLight.FileLines, divActivityType, { css: \"margin-right: 5px; color: \" + Rotator.color() });\r\n\r\n let displayPrice = Support.displayPrice(this._parameters.price, PriceTypeEnum.ActivityType, true);\r\n vr.createLabel(\r\n {\r\n text: Rotator.bookingParameters().activityType.onlineBookingName + displayPrice,\r\n width: \"Calc(100% - 25px)\"\r\n }, divActivityType);\r\n\r\n //#region Address\r\n let workplace = this._parameters.workplace;\r\n this._divWorkplace = vr.div(divActivityType, { css: \"margin-top: 10px; border-radius: 10px; padding: 5px; padding-left: 10px; padding-right: 10px;\" });\r\n this._divWorkplace.style.cssText += \"background-color: \" + Rotator.color() + \"; color: \" + Rotator.textColor() + \"; box-shadow: 0 1px 5px \" + Rotator.color();\r\n puma(this._divWorkplace).on(\"click\", (e: JQuery.ClickEvent) =>\r\n {\r\n if (puma(this._popupAddress).is(\":visible\"))\r\n this.hidePopupAddress();\r\n else\r\n this.showPopupAddress();\r\n });\r\n\r\n this.chooseAddress(workplace);\r\n this.createPopupAddress();\r\n //#endregion\r\n\r\n vr.createSeparator(\r\n {\r\n orientation: vr.OrientationEnum.Horizontal\r\n }, this._container);\r\n //#endregion\r\n\r\n //#region Timeslots\r\n let divTimeslotsContainer = vr.div(this._container, { css: \"display: flex; justify-content: space-between;\" });\r\n let divBack = vr.div(divTimeslotsContainer, { css: \"width: 40px;\" });\r\n this._btnBack = vr.createButton({\r\n icon: vr.IconClassicLight.ChevronLeft,\r\n css: \"font-size: 2em; border: none;\",\r\n enable: false,\r\n colorSettings: { textColor: Rotator.color() },\r\n onClick: (e) =>\r\n {\r\n this._startDate = this._startDate.addDays(-3);\r\n if (this._startDate.isLessThan(this._initialDate, true))\r\n {\r\n this._startDate = this._initialDate;\r\n this._btnBack.disable();\r\n }\r\n this.getTimeslots();\r\n }\r\n }, divBack);\r\n\r\n this._divTimeslots = vr.div(divTimeslotsContainer, { css: \"width: 100%; overflow-x: hidden; white-space: nowrap;\" });\r\n this._startDate = new Date(this._parameters.timeslot.day);\r\n this._startDate.setHours(0, 0, 0, 0);\r\n this._initialDate = new Date(this._startDate);\r\n this.getTimeslots();\r\n\r\n let divNext = vr.div(divTimeslotsContainer, { css: \"width: 40px;\" });\r\n vr.createButton({\r\n icon: vr.IconClassicLight.ChevronRight,\r\n css: \"font-size: 2em; border: none;\",\r\n colorSettings: { textColor: Rotator.color() },\r\n onClick: (e) =>\r\n {\r\n this._btnBack.enable();\r\n this._startDate = this._startDate.addDays(3);\r\n this.getTimeslots();\r\n }\r\n }, divNext);\r\n //#endregion\r\n }\r\n\r\n private static chooseAddress(workplace: WorkplaceResponse)\r\n {\r\n puma(this._divWorkplace).empty();\r\n let address = Support.getAddressName(workplace);\r\n vr.createLabel(\r\n {\r\n text: \"\" + address + \"
    \" + workplace.name + \"\",\r\n width: \"Calc(100% - 30px)\",\r\n colorSettings: { textColor: Rotator.textColor() }\r\n }, this._divWorkplace);\r\n vr.icon(vr.IconClassicLight.ChevronDown, this._divWorkplace, { css: \"margin-left: 10px; color: #FFF; font-size: 1.5em; position: relative; top: 9px;\" });\r\n\r\n this._parameters.workplace = workplace;\r\n }\r\n\r\n private static hidePopupAddress()\r\n {\r\n puma(this._popupAddress).hide();\r\n puma(this._popupAddressBackground).hide();\r\n }\r\n\r\n private static showPopupAddress()\r\n {\r\n puma(this._popupAddress).show();\r\n puma(this._popupAddressBackground).show();\r\n }\r\n\r\n private static createPopupAddress()\r\n {\r\n this._popupAddress = vr.div(this._container, { class: \"vrPatient_popupAddress\" });\r\n puma(this._popupAddress).hide();\r\n\r\n this._popupAddressBackground = vr.div(puma(\".vrPatientDivContainer\"), { class: \"vrPatient_popupBackground\" });\r\n puma(this._popupAddressBackground).hide();\r\n puma(this._popupAddressBackground).on(\"click\", (e: JQuery.ClickEvent) =>\r\n {\r\n this.hidePopupAddress();\r\n });\r\n\r\n for (let workplace of Rotator.bookingParameters().workplaceList)\r\n {\r\n if (workplace.id == 0 || workplace.id == null)\r\n continue;\r\n\r\n let divWorkplace = vr.div(this._popupAddress, { class: \"vrPatient_popupAddressDivWorkplace\" });\r\n vr.icon(vr.IconClassicLight.MapPin, divWorkplace, { css: \"margin-right: 5px;\" });\r\n let address = Support.getAddressName(workplace);\r\n vr.createLabel(\r\n {\r\n text: workplace.name + \"
    \" + address + \"\",\r\n width: \"Calc(100% - 45px)\"\r\n }, divWorkplace);\r\n\r\n let iconSelected = vr.icon(vr.IconClassicLight.Star, divWorkplace, { css: \"margin-left: 5px; display: none; color: #FFF; font-size: 1.5em; position: relative; top: 10px; color: \" + Rotator.color() });\r\n if (this._parameters.workplace.id == workplace.id)\r\n puma(iconSelected).show();\r\n\r\n puma(divWorkplace).on(\"click\", (e: JQuery.ClickEvent) =>\r\n {\r\n puma(this._popupAddress).find(\".\" + vr.IconClassicLight.Star.split(\" \")[1]).hide();\r\n puma(e.currentTarget).find(\".\" + vr.IconClassicLight.Star.split(\" \")[1]).show();\r\n\r\n this.hidePopupAddress();\r\n this.chooseAddress(workplace);\r\n this.getTimeslots();\r\n });\r\n }\r\n }\r\n\r\n private static getTimeslots()\r\n {\r\n this._startDate.setHours(0, 0, 0, 0);\r\n\r\n let request = new GetTimeslotsRequest();\r\n request.from = Date.convertDateFromClient(this._startDate)!;\r\n request.to = Date.convertDateFromClient(this._startDate.addDays(3).addSeconds(-1))!;\r\n\r\n let requestMultiplantList: AvailabilityRequestMultiplant[] = [];\r\n let requestMultiPlant = new AvailabilityRequestMultiplant();\r\n requestMultiPlant.getNext = false;\r\n requestMultiPlant.activityTypeId = Rotator.bookingParameters().activityType.id;\r\n requestMultiPlant.workplaceIdList = [this._parameters.workplace.id];\r\n requestMultiPlant.resourceId = (this._parameters.resource != null) ? this._parameters.resource.id : 0;\r\n requestMultiplantList.push(requestMultiPlant);\r\n request.request = requestMultiplantList;\r\n\r\n vrshared.LoaderManager().show(Rotator.container());\r\n request.call(\r\n {\r\n success: (response: GetTimeslotsResponse) =>\r\n {\r\n vrshared.LoaderManager().hide();\r\n puma(this._divTimeslots).empty();\r\n this.drawTimeslots(response.availabilityList, response.allTimeslots);\r\n },\r\n mode: vrshared.WebApiModeEnum.Async,\r\n loader: false\r\n });\r\n }\r\n\r\n private static drawTimeslots(availabilityList: AvailabilityResponse[], timeslotList: Timeslot[])\r\n {\r\n this._startDate.setHours(0, 0, 0, 0);\r\n\r\n //#region Map day/timeslots\r\n let usableTimeslots: Timeslot[] = [];\r\n\r\n let dayTimeslots = new Map();\r\n let startDateTimeslots = timeslotList.filter(k =>\r\n {\r\n let date = new Date(k.day);\r\n date.setHours(0, 0, 0, 0);\r\n return Date.equals(this._startDate, date);\r\n });\r\n dayTimeslots.set(this._startDate, startDateTimeslots);\r\n usableTimeslots.pushRange(startDateTimeslots);\r\n\r\n let secondDate = this._startDate.addDays(1);\r\n let secondDateTimeslots = timeslotList.filter(k =>\r\n {\r\n let date = new Date(k.day);\r\n date.setHours(0, 0, 0, 0);\r\n return Date.equals(secondDate, date);\r\n });\r\n dayTimeslots.set(secondDate, secondDateTimeslots);\r\n usableTimeslots.pushRange(secondDateTimeslots);\r\n\r\n let thirdDate = this._startDate.addDays(2);\r\n let thirdDateTimeslots = timeslotList.filter(k =>\r\n {\r\n let date = new Date(k.day);\r\n date.setHours(0, 0, 0, 0);\r\n return Date.equals(thirdDate, date);\r\n });\r\n dayTimeslots.set(thirdDate, thirdDateTimeslots);\r\n usableTimeslots.pushRange(thirdDateTimeslots);\r\n //#endregion\r\n\r\n let maxLength = 0;\r\n dayTimeslots.forEach((value: Timeslot[], key: Date) =>\r\n {\r\n if (value.length > maxLength)\r\n maxLength = value.length;\r\n });\r\n\r\n dayTimeslots.forEach((value: Timeslot[], key: Date) =>\r\n {\r\n let divTimeslot = vr.div(this._divTimeslots, { css: \"display: inline-flex; width: 33.5%; justify-content: center; justify-items: center; flex-direction: column;\" });\r\n\r\n vr.createLabel({\r\n text: Support.getDayWeekName(key, true),\r\n css: \"font-size: 1.1em; font-weight: 600;\",\r\n cssContainer: \"justify-content: center;\"\r\n }, divTimeslot);\r\n\r\n vr.createLabel({\r\n text: key.getDate() + \" \" + Support.getMonthName(key, true),\r\n css: \"font-size: 1.1em;\",\r\n cssContainer: \"justify-content: center; margin-bottom: 10px;\"\r\n }, divTimeslot);\r\n\r\n for (let i = 0; i < maxLength; i++)\r\n {\r\n let timeslot = value[i];\r\n let fromHours = \"\";\r\n let fromMinutes = \"\";\r\n if (timeslot != null)\r\n {\r\n fromHours = String(timeslot.hourFromDisplay.hours).padStart(2, \"0\");\r\n fromMinutes = String(timeslot.hourFromDisplay.minutes).padStart(2, \"0\");\r\n }\r\n\r\n vr.createButton(\r\n {\r\n text: (timeslot != null) ? fromHours + \":\" + fromMinutes : \"x\",\r\n colorSettings: { textColor: (timeslot != null) ? Rotator.color() : \"#000\" },\r\n css: ((timeslot != null) ? \"box-shadow: 0 1px 3px \" + Rotator.color() : \"box-shadow: 0 1px 3px rgba(0,0,0,.3)\") + \"; width: Calc(100% - 10px);\",\r\n cssContainer: \"width: 100%; justify-content: center; margin-bottom: 10px;\",\r\n onClick: (e) =>\r\n {\r\n if (timeslot != null)\r\n {\r\n let resourceList = availabilityList.map(k => k.resource);\r\n let resource = resourceList.filter(k => k.id == timeslot.resourceSubjectId)[0];\r\n\r\n let parameters = new TimeslotListParameters();\r\n parameters.resource = (this._parameters.resource != null) ? this._parameters.resource : resource;\r\n parameters.price = this._parameters.price;\r\n parameters.priceId = this._parameters.priceId;\r\n parameters.workplace = this._parameters.workplace;\r\n parameters.timeslot = timeslot;\r\n\r\n Rotator.confirmationParameters(parameters);\r\n Rotator.page(PageEnum.Confirmation1, parameters);\r\n }\r\n }\r\n }, divTimeslot);\r\n }\r\n });\r\n\r\n //#region No Availabilities\r\n if (usableTimeslots.length == 0)\r\n {\r\n let divNoAvailabilities = vr.div(this._divTimeslots, { css: \"display: flex; margin-top: 5px; flex-direction: column; align-items: center; min-height: 80px;\" });\r\n let lblText = vr.createLabel({\r\n cssContainer: \"margin-bottom: 10px; font-size: 1.2em;\",\r\n colorSettings: { textColor: \"#adadad\" }\r\n }, divNoAvailabilities);\r\n\r\n vrshared.LoaderManager().hide();\r\n ResourceTimeslots.getNextAvailability((this._parameters.resource != null) ? this._parameters.resource.id : null, this._parameters.workplace.id, this._startDate, (e) =>\r\n {\r\n vrshared.LoaderManager().hide();\r\n let nextTimeslots = e.nextAvailabilities;\r\n\r\n if (nextTimeslots.length == 0)\r\n lblText.value(\"Nessuna disponibilità\");\r\n else\r\n {\r\n lblText.value(\"Prossima disponibilità\");\r\n vr.createButton({\r\n text: new Date(nextTimeslots.first().day).toItalyLongString(),\r\n colorSettings: { textColor: Rotator.color() },\r\n css: \"box-shadow: 0 1px 3px rgba(0,0,0,.3)\",\r\n width: \"100%\",\r\n onClick: (e) =>\r\n {\r\n this._btnBack.enable();\r\n this._startDate = new Date(nextTimeslots.first().day);\r\n this.getTimeslots();\r\n }\r\n }, divNoAvailabilities);\r\n }\r\n }, Rotator.container());\r\n\r\n return;\r\n }\r\n vrshared.LoaderManager().hide();\r\n //#endregion\r\n }\r\n}\r\n\r\n//#region Classes\r\nexport class TimeslotListParameters\r\n{\r\n timeslots: Timeslot[];\r\n resource: ResourceResponse | null;\r\n price: number;\r\n priceId: number;\r\n workplace: WorkplaceResponse;\r\n timeslot: Timeslot;\r\n subjectId: number;\r\n resourceInstrumentId: number;\r\n resourceSpaceId: number;\r\n}\r\n\r\nclass GetTimeslotsRequest extends WebApiRequestBase\r\n{\r\n public method: string = \"/api/BookingWebApi/GetTimeslots\";\r\n\r\n public request: AvailabilityRequestMultiplant[];\r\n public from: Date;\r\n public to: Date;\r\n}\r\n\r\nclass GetTimeslotsResponse extends WebApiResponseBase\r\n{\r\n public allTimeslots: Timeslot[];\r\n public availabilityList: AvailabilityResponse[];\r\n}\r\n\r\n//#endregion","import { Popup, Support } from \"../../src/support\";\r\nimport { puma, Rotator } from \"../../src/rotator\";\r\nimport { Profile } from \"../../src/privateArea/profile\";\r\nimport { ContactTypeEnum, WebApiDateTime } from \"../../src/shared/common\";\r\nimport { VrManager } from \"../../src/shared/vrManager\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\n\r\nexport class WaitingList\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\tprivate static _parameters: WaitingListParameters;\r\n\tprivate static _txtName: vr.TextBox;\r\n\tprivate static _txtSurname: vr.TextBox;\r\n\tprivate static _txtEmail: vr.TextBox;\r\n\tprivate static _txtPhoneNumber: vr.TextBox;\r\n\tprivate static _dtpDeadline: vr.DatePicker;\r\n\tprivate static _txtNotes: vr.TextBox;\r\n\tprivate static _chkPrivacy: vr.CheckBox;\r\n\tprivate static _subjectId: number;\r\n\r\n\tstatic initialize(parameters: WaitingListParameters)\r\n\t{\r\n\t\tthis._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\t\tthis._parameters = parameters;\r\n\t\tRotator.title(\"LISTA DI ATTESA\");\r\n\t\tthis.createControls();\r\n\t}\r\n\r\n\tprivate static createControls()\r\n\t{\r\n\t\tlet divInfo = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\tthis._txtName = vr.createTextBox({\r\n\t\t\tlabel: \"Nome\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divInfo);\r\n\r\n\t\tthis._txtSurname = vr.createTextBox({\r\n\t\t\tlabel: \"Cognome\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divInfo);\r\n\r\n\t\tthis._txtEmail = vr.createTextBox({\r\n\t\t\tlabel: \"Email\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divInfo);\r\n\r\n\t\tthis._txtPhoneNumber = vr.createTextBox({\r\n\t\t\tlabel: \"Cellulare\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divInfo);\r\n\r\n\t\tlet divDeadline = vr.div(divInfo, { css: \"position: relative;\" });\r\n\t\tthis._dtpDeadline = Support.createDatePicker(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Fino a che giorno è disposto/a ad attendere?\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n\t\t\t\tvalue: new Date().addMonths(1)\r\n\t\t\t}, divDeadline);\r\n\r\n\t\tthis._txtNotes = vr.createTextBox({\r\n\t\t\tlabel: \"Note\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n\t\t\tmode: vr.TextModeEnum.MultiLine,\r\n\t\t\trows: 3\r\n\t\t}, divInfo);\r\n\r\n\t\t//#region Privacy\r\n\t\tlet divPrivacy = vr.div(divInfo, { css: \"text-align: left; display: flex; margin-top: 10px;\" });\r\n\t\tthis._chkPrivacy = vr.createCheckBox(\r\n\t\t\t{\r\n\t\t\t}, divPrivacy);\r\n\r\n\t\tlet privacyLabelText = Rotator.configuration().appPrivacyLabelText;\r\n\t\tif (privacyLabelText == null || privacyLabelText == \"\")\r\n\t\t\tprivacyLabelText = \"Ho letto e accetto la [privacy] (*)\";\r\n\r\n\t\tif (privacyLabelText.includes(\"[\"))\r\n\t\t{\r\n\t\t\tlet textToHighlight = privacyLabelText.substring(\r\n\t\t\t\tprivacyLabelText.lastIndexOf(\"[\") + 1,\r\n\t\t\t\tprivacyLabelText.lastIndexOf(\"]\")\r\n\t\t\t);\r\n\t\t\tprivacyLabelText = privacyLabelText.replace(/\\[.*\\]/, \"\" + textToHighlight + \"\")\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tprivacyLabelText = privacyLabelText.replace(\"privacy\", \"privacy\");\r\n\t\t\tprivacyLabelText = privacyLabelText.replace(\"Privacy\", \"Privacy\");\r\n\t\t}\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: privacyLabelText,\r\n\t\t\tfontSize: \"1.1em\",\r\n\t\t\tcssContainer: \"top: -1px;\",\r\n\t\t\twidth: \"Calc(100% - 35px)\",\r\n\t\t\tonClick: (e) => \r\n\t\t\t{\r\n\t\t\t\twndPrivacy.open(null, false, { top: Rotator.container().scrollTop });\r\n\t\t\t}\r\n\t\t}, divPrivacy);\r\n\r\n\t\tlet wndPrivacy = vr.createWindow(\r\n\t\t\t{\r\n\t\t\t\ttitle: \"Privacy\",\r\n\t\t\t\tmaximized: false,\r\n\t\t\t\tcontent: Rotator.configuration().privacyText,\r\n\t\t\t\tcss: \"overflow-y: auto;\",\r\n\t\t\t\tcssContainer: \"width: 100% !important; height: \" + (Rotator.container().clientHeight - 20) + \"px !important; position: absolute !important; left: 0px !important;\",\r\n\t\t\t\tdraggable: false,\r\n\t\t\t\tmodal: false,\r\n\t\t\t\thideCloseIcon: true,\r\n\t\t\t\tfooter:\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t{ type: vr.WindowFooterItemTypeEnum.Close, text: \"Chiudi\" },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttype: vr.WindowFooterItemTypeEnum.Ok, text: \"Accetta\", onClick: (e) => \r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\twndPrivacy.close();\r\n\t\t\t\t\t\t\t\tthis._chkPrivacy.checked(true);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t]\r\n\t\t\t}, Rotator.shadowRoot() as any);\r\n\t\tpuma(wndPrivacy.container()).appendToPuma(this._container);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Buttons\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Aggiungimi alla lista\",\r\n\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tclass: \"vrButtonAddToWaitingList vrButtonPatient\",\r\n\t\t\tcssContainer: \"margin-top: -5px;\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tonClick: (e) => \r\n\t\t\t{\r\n\t\t\t\t//#region Check\r\n\t\t\t\tlet error = \"\";\r\n\r\n\t\t\t\tif (this._txtName.isEmpty())\r\n\t\t\t\t\terror += \"Nome, \";\r\n\r\n\t\t\t\tif (this._txtSurname.isEmpty())\r\n\t\t\t\t\terror += \"Cognome, \";\r\n\r\n\t\t\t\tif (this._txtPhoneNumber.isEmpty())\r\n\t\t\t\t\terror += \"Cellulare, \";\r\n\r\n\t\t\t\tif (this._dtpDeadline.value() == null)\r\n\t\t\t\t\terror += \"Data, \";\r\n\r\n\t\t\t\tif (!this._chkPrivacy.checked())\r\n\t\t\t\t\terror += \"Privacy, \";\r\n\r\n\t\t\t\tif (error.length > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\terror = \"Riempire i campi obbligatori: \" + error.substring(0, error.length - 2);\r\n\t\t\t\t\tVrManager.notify(error, \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t//#endregion\r\n\r\n\t\t\t\tlet request = new AddToWaitingListRequest();\r\n\t\t\t\trequest.customerId = this._subjectId;\r\n\t\t\t\trequest.customerName = this._txtName.value();\r\n\t\t\t\trequest.customerSurname = this._txtSurname.value();\r\n\t\t\t\trequest.customerEmail = this._txtEmail.value();\r\n\t\t\t\trequest.customerPhoneNumber = this._txtPhoneNumber.value();\r\n\t\t\t\trequest.deadline = Date.toWebApiDateTime(this._dtpDeadline.value());\r\n\t\t\t\trequest.privacy = this._chkPrivacy.checked();\r\n\t\t\t\trequest.workplaceId = this._parameters.workplaceId;\r\n\t\t\t\trequest.note = this._txtNotes.value();\r\n\t\t\t\trequest.activityTypeId = Rotator.bookingParameters().activityType.id;\r\n\t\t\t\trequest.resourceId = this._parameters.resourceId;\r\n\t\t\t\trequest.call(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsuccess: (response: AddToWaitingListResponse) =>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tRotator.burgerButton().show();\r\n\t\t\t\t\t\t\tRotator.backButton().hide();\r\n\r\n\t\t\t\t\t\t\tpuma(this._container).empty();\r\n\t\t\t\t\t\t\tlet divMessageConfirmation = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\t\t\t\t\t\tvr.createLabel({\r\n\t\t\t\t\t\t\t\ttext: Rotator.configuration().appConfirmationMessageAddedToWaitingList,\r\n\t\t\t\t\t\t\t\twidth: \"100%\"\r\n\t\t\t\t\t\t\t}, divMessageConfirmation);\r\n\r\n\t\t\t\t\t\t\tvr.createButton(\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttext: \"Prenota un altro\",\r\n\t\t\t\t\t\t\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\t\t\t\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\t\t\t\t\t\t\tcssContainer: \"margin-top: 10px;\",\r\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\tclass: \"vrButtonBookingBookAnother vrButtonPatient\",\r\n\t\t\t\t\t\t\t\t\tonClick: (e) => Rotator.goToMainPage()\r\n\t\t\t\t\t\t\t\t}, divMessageConfirmation);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\t\t\tloader: Rotator.container()\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}, this._container);\r\n\t\t//#endregion\r\n\r\n\t\tSupport.checkLogin(() => \r\n\t\t{\r\n\t\t\tProfile.getSubject(null, (response) =>\r\n\t\t\t{\r\n\t\t\t\tthis._subjectId = response.id;\r\n\r\n\t\t\t\t//#region Name & Surname\r\n\t\t\t\tthis._txtName.value(response.name);\r\n\t\t\t\tif (response.name.length > 0)\r\n\t\t\t\t\tthis._txtName.disable();\r\n\r\n\t\t\t\tthis._txtSurname.value(response.surname);\r\n\t\t\t\tif (response.surname.length > 0)\r\n\t\t\t\t\tthis._txtSurname.disable();\r\n\t\t\t\t//#endregion\r\n\r\n\t\t\t\t//#region Contacts\r\n\t\t\t\tif (response.contacts != null && response.contacts.length > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tlet emailContactInfo = response.contacts.filter(k => k.conactType == ContactTypeEnum.PrivateEmail)[0];\r\n\t\t\t\t\tif (emailContactInfo != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis._txtEmail.tag(emailContactInfo.contactId);\r\n\t\t\t\t\t\tthis._txtEmail.value(emailContactInfo.value);\r\n\t\t\t\t\t\tthis._txtEmail.disable();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet mobilePhoneContactInfo = response.contacts.filter(k => k.conactType == ContactTypeEnum.PrivateMobile)[0];\r\n\t\t\t\t\tif (mobilePhoneContactInfo != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis._txtPhoneNumber.tag(mobilePhoneContactInfo.contactId);\r\n\t\t\t\t\t\tthis._txtPhoneNumber.value(mobilePhoneContactInfo.value);\r\n\t\t\t\t\t\tthis._txtPhoneNumber.disable();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t//#endregion\r\n\r\n\t\t\t\tif (response.hasPrivacy)\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divPrivacy).hide();\r\n\t\t\t\t\tthis._chkPrivacy.checked(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n}\r\n\r\n//#region Classes\r\nexport class WaitingListParameters\r\n{\r\n\tworkplaceId: number;\r\n\tresourceId: number;\r\n}\r\n\r\nclass AddToWaitingListRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/BookingWebApi/AddToWaitingList\";\r\n\r\n\tcustomerName: string;\r\n\tcustomerSurname: string;\r\n\tcustomerEmail: string;\r\n\tcustomerPhoneNumber: string;\r\n\tdeadline: WebApiDateTime;\r\n\tprivacy: boolean;\r\n\tcustomerId: number;\r\n\tworkplaceId: number;\r\n\tnote: string;\r\n\tactivityTypeId: number;\r\n\tresourceId: number;\r\n}\r\n\r\nclass AddToWaitingListResponse extends WebApiResponseBase\r\n{\r\n\r\n}\r\n//#endregion","import { Rotator, puma } from \"../rotator\";\r\nimport { SelectionListControl } from \"./selectionListControl\";\r\nimport { Booking, StepEnum } from \"./booking\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\nimport { WorkplaceResponse } from \"../../src/shared/common\";\r\nimport { DoctorList } from \"./doctorList\";\r\n\r\nexport class WorkplaceList\r\n{\r\n private static _container: HTMLElement;\r\n\r\n static initialize()\r\n {\r\n this._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n Rotator.title(\"PRENOTA\");\r\n this.createControls();\r\n }\r\n\r\n static createControls()\r\n {\r\n Booking.createStep(StepEnum.Workplace, this._container, true, () => Rotator.back());\r\n\r\n let selectionListControl = new SelectionListControl(\r\n {\r\n container: this._container,\r\n rebind:\r\n {\r\n authKey: \"10(P9m+U3aM@10tt-Oeo\",\r\n method: \"/api/BookingWebApi/GetWorkplaces\",\r\n itemsPropertyName: \"workplacesList\",\r\n rebindAtStartup: true,\r\n parameters: () =>\r\n {\r\n return {\r\n \"plantIdList\": [Rotator.configuration().plant.id],\r\n \"latitude\": Rotator.bookingParameters().latitude,\r\n \"longitude\": Rotator.bookingParameters().longitude,\r\n \"activityTypeId\": (Rotator.bookingParameters().activityType != null) ? Rotator.bookingParameters().activityType.id : 0,\r\n \"onlyBookableOnline\": true\r\n }\r\n },\r\n callback: () => \r\n {\r\n if (Rotator.bookingParameters().workplace != null)\r\n selectionListControl.select(Rotator.bookingParameters().workplace!.id);\r\n }\r\n },\r\n onSelect: (e) =>\r\n {\r\n Rotator.bookingParameters().workplace = (e.dataItem.id == 0) ? null : e.dataItem;\r\n Rotator.back();\r\n\r\n DoctorList.getResources();\r\n }\r\n }\r\n );\r\n }\r\n\r\n static getWorkplaces(callback?: (e: GetWorkplacesResponse) => void, mode = vrshared.WebApiModeEnum.Async)\r\n {\r\n let request = new GetWorkplacesRequest();\r\n request.plantIdList = [Rotator.configuration().plant.id];\r\n request.latitude = Rotator.bookingParameters().latitude;\r\n request.longitude = Rotator.bookingParameters().longitude;\r\n request.activityTypeId = (Rotator.bookingParameters().activityType != null) ? Rotator.bookingParameters().activityType.id : 0;\r\n request.onlyBookableOnline = true;\r\n request.call(\r\n {\r\n success: (response: GetWorkplacesResponse) =>\r\n {\r\n Rotator.bookingParameters().workplaceList = response.workplacesList;\r\n if (callback != null)\r\n callback(response);\r\n },\r\n mode: mode,\r\n loader: false\r\n });\r\n }\r\n}\r\n\r\n//#region Classes\r\nclass GetWorkplacesRequest extends WebApiRequestBase\r\n{\r\n public method: string = \"/api/BookingWebApi/GetWorkplaces\";\r\n\r\n public plantIdList: number[];\r\n public latitude: number;\r\n public longitude: number;\r\n public onlyBookableOnline?: boolean;\r\n public activityTypeId: number;\r\n}\r\n\r\nclass GetWorkplacesResponse extends WebApiResponseBase\r\n{\r\n public workplacesList: WorkplaceResponse[];\r\n}\r\n//#endregion","import { Rotator, puma, PageEnum } from \"../rotator\";\r\nimport { EventTypeEnum, Support } from \"../support\";\r\nimport { ResourceTimeslots } from \"./resourceTimeslots\";\r\n\r\nexport class WorkplaceTimeslots\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\r\n\tstatic initialize()\r\n\t{\r\n\t\tthis._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\t\tRotator.title(\"DISPONIBILITÀ\");\r\n\r\n\t\tthis.drawWorkplacesSlots();\r\n\t}\r\n\r\n\tprivate static drawWorkplacesSlots()\r\n\t{\r\n\t\tlet workplaces = Rotator.bookingParameters().workplaceList.filter(k => k.id != 0);\r\n\t\tif (Rotator.bookingParameters().workplace != null)\r\n\t\t\tworkplaces = workplaces.filter(k => k.id == Rotator.bookingParameters().workplace!.id);\r\n\r\n\t\tif (workplaces.length == 0)\r\n\t\t{\r\n\t\t\tvr.createLabel({\r\n\t\t\t\ttext: \"Non è presente alcuna sede disponibile per effettuare la prestazione selezionata\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\talign: vr.TextAlignEnum.Center\r\n\t\t\t}, this._container);\r\n\t\t}\r\n\r\n\t\tfor (let workplace of workplaces)\r\n\t\t{\r\n\t\t\tlet divSlot = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\t\t//#region Image/Icon\r\n\t\t\tvr.icon(vr.IconClassicLight.Map, divSlot, { css: \"justify-content: center; float: left; margin-top: 5px; margin-right: 10px; font-size: 4em; color: \" + Rotator.color() + \";\" });\r\n\t\t\t//#endregion\r\n\r\n\t\t\t//#region Info\r\n\t\t\tlet divInfo = vr.div(divSlot, { css: \"display: inline-block; width: Calc(100% - 75px); text-align: left; min-height: 70px;\" });\r\n\r\n\t\t\tvr.createLabel(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: workplace.name,\r\n\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\tcss: \"font-weight: 600;\",\r\n\t\t\t\t\tnoBr: true\r\n\t\t\t\t}, divInfo);\r\n\r\n\t\t\tlet address = Support.getAddressName(workplace);\r\n\t\t\tvr.createLabel(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: \"\" + address + \"\",\r\n\t\t\t\t\twidth: \"Calc(100% - 25px)\"\r\n\t\t\t\t}, divInfo);\r\n\t\t\t//#endregion\r\n\r\n\t\t\t//#region ActivityType\r\n\t\t\tlet divActivityType = vr.div(divSlot, { css: \"margin-top: 10px;\" });\r\n\t\t\tvr.icon(vr.IconClassicLight.FileLines, divActivityType, { css: \"margin-right: 5px; position: relative; top: -1px; color: \" + Rotator.color() });\r\n\t\t\tvr.createLabel(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: Rotator.bookingParameters().activityType.onlineBookingName,\r\n\t\t\t\t\twidth: \"Calc(100% - 25px)\",\r\n\t\t\t\t\tclass: \"vrPatient_lblActivityType\"\r\n\t\t\t\t}, divActivityType);\r\n\t\t\t//#endregion\r\n\r\n\t\t\t//#region Slots\r\n\t\t\tlet divSlots = vr.div(divSlot, { id: \"vrPatientDivSlots\", css: \"margin-top: 10px; min-height: 88px;\" });\r\n\t\t\tResourceTimeslots.getNextAvailability(null, workplace.id, Rotator.bookingParameters().from, (e) =>\r\n\t\t\t{\r\n\t\t\t\tResourceTimeslots.drawWorkplaceTimeslots(divSlots, workplace, null, e.nextAvailabilities);\r\n\t\t\t}, divSlots);\r\n\t\t\t//#endregion\r\n\t\t}\r\n\r\n\t\tSupport.manageTrackingCookiesEvent(EventTypeEnum.SearchAvailabilities, Rotator.bookingParameters().activityType.id);\r\n\t}\r\n}\r\n\r\n//#region Classes\r\n\r\n//#endregion","import { Support } from \"../../src/support\";\r\nimport { Rotator, PageEnum, puma } from \"../rotator\";\r\n\r\nexport class InfoPage\r\n{\r\n private static _container: HTMLElement;\r\n\r\n static initialize()\r\n {\r\n this._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\r\n let appName = Rotator.configuration().appName;\r\n Rotator.title((appName == null || appName == \"\") ? \"INFO\" : appName);\r\n\r\n this.createControls();\r\n }\r\n\r\n private static createControls()\r\n {\r\n let base64Logo = Support.getAppLogo();\r\n if (base64Logo != null && base64Logo != \"\")\r\n {\r\n vr.createImage({\r\n base64: true,\r\n value: base64Logo,\r\n width: \"100%\",\r\n position: vr.ImagePositionTypeEnum.Center,\r\n cssContainer: \"max-height: 80px;\",\r\n height: 80\r\n }, this._container);\r\n }\r\n\r\n //#region Contacts\r\n let email = Rotator.configuration().appEmail;\r\n let phoneNumber = Rotator.configuration().appPhoneNumber;\r\n let website = Rotator.configuration().appWebsite;\r\n\r\n if ((email != null && email != \"\") || (phoneNumber != null && phoneNumber != \"\") || (website != null && website != \"\"))\r\n {\r\n let divContactsContainer = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"margin-top: 15px;\" });\r\n\r\n vr.createLabel({\r\n text: \"CONTATTI\",\r\n width: \"100%\",\r\n css: \"color: \" + Rotator.color() + \";\",\r\n cssContainer: \"padding-bottom: 10px; border-bottom: solid 1px \" + Rotator.color() + \";\",\r\n align: vr.TextAlignEnum.Center,\r\n bold: true,\r\n noBr: true\r\n }, divContactsContainer);\r\n\r\n if (email != null && email != \"\")\r\n {\r\n vr.createLabel({\r\n text: email,\r\n width: \"100%\",\r\n mode: vr.LabelModeEnum.Mail,\r\n linkCss: \"text-decoration: none; color: #000;\",\r\n cssContainer: \"border-top: solid 1px #E6E6E6; padding: 10px; width: Calc(100% - 20px); padding-bottom: 15px;\",\r\n noBr: true\r\n }, divContactsContainer);\r\n }\r\n\r\n if (phoneNumber != null && phoneNumber != \"\")\r\n {\r\n vr.createLabel({\r\n text: phoneNumber,\r\n width: \"100%\",\r\n mode: vr.LabelModeEnum.Phone,\r\n linkCss: \"text-decoration: none; color: #000;\",\r\n cssContainer: \"border-top: solid 1px #E6E6E6; padding: 10px; width: Calc(100% - 20px); padding-bottom: 15px;\",\r\n noBr: true\r\n }, divContactsContainer);\r\n }\r\n\r\n if (website != null && website != \"\")\r\n {\r\n if (!website.startsWith(\"http\"))\r\n website = \"https://\" + website;\r\n\r\n vr.createLabel({\r\n text: website,\r\n width: \"100%\",\r\n mode: vr.LabelModeEnum.Link,\r\n linkCss: \"text-decoration: none; color: #000;\",\r\n cssContainer: \"border-top: solid 1px #E6E6E6; padding: 10px; width: Calc(100% - 20px); padding-bottom: 15px;\",\r\n noBr: true\r\n }, divContactsContainer);\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Workplaces\r\n let workplaces = Rotator.configuration().plant.workplaces;\r\n if (workplaces != null && workplaces.length > 0)\r\n {\r\n let divWorkplacesContainer = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"margin-top: 15px;\" });\r\n\r\n vr.createLabel({\r\n text: \"SEDI\",\r\n width: \"100%\",\r\n css: \"color: \" + Rotator.color() + \";\",\r\n cssContainer: \"padding-bottom: 10px; border-bottom: solid 1px \" + Rotator.color() + \";\",\r\n align: vr.TextAlignEnum.Center,\r\n bold: true\r\n }, divWorkplacesContainer);\r\n\r\n let divWorkplaces = vr.div(divWorkplacesContainer, { css: \"max-height: \" + (Rotator.container().clientHeight - divWorkplacesContainer.offsetTop - 60) + \"px; overflow-y: auto;\" });\r\n for (let workplace of workplaces)\r\n {\r\n if (workplace == null || workplace.street == null)\r\n continue;\r\n\r\n let textWorkplace = workplace.street + \" - \" + workplace.zip + \", \" + workplace.city + \" (\" + workplace.province + \")\";\r\n if (workplace.geoCoordinate != null)\r\n textWorkplace = \"\" + textWorkplace + \"\";\r\n\r\n vr.createLabel({\r\n text: textWorkplace,\r\n width: \"100%\",\r\n cssContainer: \"border-top: solid 1px #E6E6E6; padding: 10px; width: Calc(100% - 20px); padding-bottom: 15px;\"\r\n }, divWorkplaces);\r\n }\r\n }\r\n //#endregion\r\n\r\n // let divCredits = vr.div(this._container, { css: \"position: absolute; bottom: 0px; padding: 10px; padding-top: 5px; padding-bottom: 5px; width: Calc(100% - 20px); background-color: #FFF; border-top: solid 1px \" + Rotator.color() + \"; color: \" + Rotator.color() + \"; text-align: right;\" });\r\n // vr.createLabel({\r\n // text: \"© Vettore.Medical\",\r\n // css: \"font-size: 1em;\",\r\n // colorSettings: { textColor: Rotator.color() }\r\n // }, divCredits);\r\n }\r\n}","import { Rotator, puma, PageEnum } from \"../../src/rotator\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"../shared/webApi\";\r\nimport { AuthenticationManager, PasswordRules } from \"../../src/shared/authenticationManager\";\r\nimport { VrManager } from \"../../src/shared/vrManager\";\r\n\r\nexport class ChangePassword\r\n{\r\n private static _container: HTMLElement;\r\n private static _parameters?: ChangePasswordParameters;\r\n private static _txtPassword: vr.TextBox;\r\n private static _txtPasswordConfirm: vr.TextBox;\r\n private static _btnChangePassword: vr.Button;\r\n private static _passwordRules: PasswordRules;\r\n\r\n static initialize(parameters?: ChangePasswordParameters)\r\n {\r\n this._parameters = parameters;\r\n this._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n Rotator.title(\"PASSWORD\");\r\n\r\n this._passwordRules = AuthenticationManager.getPasswordRules();\r\n this.createControls();\r\n }\r\n\r\n static createControls()\r\n {\r\n puma(this._container).empty();\r\n if (this._parameters != null && this._parameters.passwordExpiredGuid != null)\r\n {\r\n vr.createLabel(\r\n {\r\n text: \"La password è scaduta, per cui è necessario impostarne una nuova\",\r\n mode: vr.LabelModeEnum.Default,\r\n cssContainer: \"margin-bottom: 10px;\"\r\n }, this._container);\r\n }\r\n\r\n this._txtPassword = vr.createTextBox(\r\n {\r\n label: \"Password\",\r\n placeholder: \"Password\",\r\n onEnterKey: () => this._btnChangePassword.click(),\r\n mode: vr.TextModeEnum.Password,\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px;\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n onKeyUp: (e) =>\r\n {\r\n let result = AuthenticationManager.checkPasswordStrength(String(e.value), this._passwordRules);\r\n if (!result.IsValid && e.value != \"\")\r\n this._txtPassword.error(result.ErrorMessage, vr.ErrorModeEnum.Solid, vr.ErrorPositionEnum.Bottom, vr.ErrorHideModeEnum.Never);\r\n else\r\n this._txtPassword.hideError();\r\n }\r\n }, this._container);\r\n this._txtPassword.focus();\r\n\r\n this._txtPasswordConfirm = vr.createTextBox(\r\n {\r\n label: \"Conferma password\",\r\n placeholder: \"Conferma password\",\r\n onEnterKey: () => this._btnChangePassword.click(),\r\n mode: vr.TextModeEnum.Password,\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px;\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n onKeyUp: (e) =>\r\n {\r\n if (this._txtPassword.value() != this._txtPasswordConfirm.value() && e.value != \"\")\r\n this._txtPasswordConfirm.error(\"Le password devono coincidere!\", vr.ErrorModeEnum.Solid, vr.ErrorPositionEnum.Bottom, vr.ErrorHideModeEnum.Never);\r\n else\r\n this._txtPasswordConfirm.hideError();\r\n }\r\n }, this._container);\r\n\r\n this._btnChangePassword = vr.createButton({\r\n text: \"Conferma modifica\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n width: \"100%\",\r\n class: \"vrButtonChangePassword vrButtonPatient\",\r\n onClick: (e) =>\r\n {\r\n //#region Check\r\n let error = false;\r\n if (this._txtPassword.isEmpty())\r\n {\r\n this._txtPassword.error(\"Password obbligatoria\", vr.ErrorModeEnum.Solid, vr.ErrorPositionEnum.Bottom);\r\n error = true;\r\n }\r\n\r\n if (this._txtPasswordConfirm.isEmpty())\r\n {\r\n this._txtPasswordConfirm.error(\"Conferma password obbligatoria\", vr.ErrorModeEnum.Solid, vr.ErrorPositionEnum.Bottom);\r\n error = true;\r\n }\r\n\r\n if (this._txtPassword.value() !== this._txtPasswordConfirm.value())\r\n {\r\n this._txtPasswordConfirm.error(\"Le password devono coincidere\", vr.ErrorModeEnum.Solid, vr.ErrorPositionEnum.Bottom);\r\n error = true;\r\n }\r\n\r\n if (this._txtPassword.hasError() || this._txtPasswordConfirm.hasError())\r\n error = true;\r\n\r\n if (error)\r\n return;\r\n //#endregion\r\n\r\n let isPasswordStrong = AuthenticationManager.isPasswordStrong(this._txtPassword.value());\r\n if (!isPasswordStrong)\r\n {\r\n VrManager.notify(\"La password non è abbastanza sicura\");\r\n return;\r\n }\r\n\r\n let request = new ChangePasswordRequest();\r\n request.passwordExpireGuid = (this._parameters != null) ? this._parameters.passwordExpiredGuid : null;\r\n request.password = this._txtPassword.value();\r\n request.call(\r\n {\r\n success: (response: ChangePasswordResponse) =>\r\n {\r\n if (Rotator.inBookingFlow())\r\n VrManager.notify(\"Password cambiata con successo. A breve verrai reindirizzato alla pagina di login. Attendi...\");\r\n else\r\n VrManager.notify(\"Password cambiata con successo\");\r\n\r\n if (Rotator.inBookingFlow())\r\n {\r\n vrshared.LoaderManager().show();\r\n window.setTimeout(() => \r\n {\r\n vrshared.LoaderManager().hide();\r\n Rotator.page(PageEnum.Login);\r\n }, 1500);\r\n }\r\n else\r\n Rotator.back();\r\n },\r\n loader: Rotator.container()\r\n });\r\n }\r\n }, this._container);\r\n }\r\n}\r\n\r\n//#region Classes\r\nexport class ChangePasswordParameters\r\n{\r\n passwordExpiredGuid?: string;\r\n}\r\n\r\n//#region ChangePassword\r\nclass ChangePasswordRequest extends WebApiRequestBase \r\n{\r\n public method: string = \"/api/LoginWebApi/ChangePassword\";\r\n public passwordExpireGuid?: string | null;\r\n public password: string;\r\n}\r\n\r\nclass ChangePasswordResponse extends WebApiResponseBase \r\n{\r\n}\r\n//#endregion\r\n\r\n//#endregion","import { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\nimport { Rotator, puma, PageEnum } from \"../../src/rotator\";\r\nimport { LoginParameters } from \"./login\";\r\n\r\nexport class ForgotPassword\r\n{\r\n private static _container: HTMLElement;\r\n private static _txtUsername: vr.TextBox;\r\n private static _btnSendPassword: vr.Button;\r\n\r\n static initialize()\r\n {\r\n this._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n Rotator.title(\"PASSWORD\");\r\n\r\n this.createControls();\r\n }\r\n\r\n static createControls()\r\n {\r\n puma(this._container).empty();\r\n this._txtUsername = vr.createTextBox(\r\n {\r\n label: \"Nome utente\",\r\n placeholder: \"Nome utente\",\r\n onEnterKey: () => this._btnSendPassword.click(),\r\n mode: vr.TextModeEnum.Text,\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px;\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n }, this._container);\r\n\r\n let textRecoverPassword = \"Una nuova password di accesso sarà inviata tramite SMS al numero di telefono cellulare inserito in fase di registrazione dell'utente\";\r\n if (Rotator.configuration().appHasEmailNotificationsPlannedForLoginCredentials)\r\n textRecoverPassword = \"Una nuova password di accesso sarà inviata tramite Email\";\r\n\r\n vr.createLabel(\r\n {\r\n text: textRecoverPassword,\r\n mode: vr.LabelModeEnum.Default,\r\n cssContainer: \"margin-bottom: 10px;\"\r\n }, this._container);\r\n\r\n this._btnSendPassword = vr.createButton({\r\n text: \"Recupera password\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n cssContainer: \"margin-top: 10px;\",\r\n width: \"100%\",\r\n class: \"vrButtonRecoverPassword vrButtonPatient\",\r\n onClick: (e) =>\r\n {\r\n //#region Check\r\n let error = false;\r\n if (this._txtUsername.isEmpty())\r\n {\r\n this._txtUsername.error(\"Nome utente obbligatorio\", vr.ErrorModeEnum.Solid);\r\n error = true;\r\n }\r\n\r\n if (error)\r\n return;\r\n //#endregion\r\n\r\n this.recoverPassword(this._txtUsername.value()).then(() =>\r\n {\r\n let loginParameters = new LoginParameters();\r\n loginParameters.fromRegister = true;\r\n loginParameters.username = this._txtUsername.value();\r\n Rotator.page(PageEnum.Login, loginParameters);\r\n });\r\n }\r\n }, this._container);\r\n }\r\n\r\n static recoverPassword(username: string)\r\n {\r\n let promise = new Promise((callback) =>\r\n {\r\n let request = new ForgotPasswordRequest();\r\n request.username = username;\r\n request.call(\r\n {\r\n success: (response: ForgotPasswordResponse) =>\r\n {\r\n callback();\r\n },\r\n loader: Rotator.container()\r\n });\r\n });\r\n return promise;\r\n }\r\n}\r\n\r\n//#region ForgotPassword\r\nclass ForgotPasswordRequest extends WebApiRequestBase \r\n{\r\n public method: string = \"/api/LoginWebApi/ForgotPassword\";\r\n public username: string;\r\n}\r\n\r\nclass ForgotPasswordResponse extends WebApiResponseBase \r\n{\r\n}\r\n//#endregion","import { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\nimport { Rotator, puma, PageEnum, AppLoginModeEnum } from \"../../src/rotator\";\r\nimport { ChangePasswordParameters } from \"./changePassword\";\r\nimport { MandatoryFieldInfo, OnlineBookingMandatoryFieldTypeEnum, PreregisterSettings, Register, RegisterParameters, RegisterRequest, RegisterResponse, RegisterResult } from \"./register\";\r\nimport { CheckLoginRequest, CheckLoginResponse, Support } from \"../../src/support\";\r\nimport { Menu } from \"../../src/shared/menu\";\r\nimport { ForgotPassword } from \"./forgotPassword\";\r\nimport { VrManager } from \"../../src/shared/vrManager\";\r\nimport { DeviceTypeEnum } from \"../../src/main\";\r\nimport { BookingParameters } from \"../../src/booking/booking\";\r\nimport { TimeslotListParameters } from \"../../src/booking/timeslotList\";\r\n\r\nexport class Login\r\n{\r\n private static _container: HTMLElement;\r\n private static _txtUsername: vr.TextBox;\r\n private static _txtPassword: vr.TextBox;\r\n private static _txtVerificationCode: vr.TextBox;\r\n private static _abortController: AbortController;\r\n private static _btnLogin: vr.Button;\r\n private static _parameters?: LoginParameters;\r\n private static _txtFiscalCodeAlreadyPatient: vr.TextBox;\r\n private static _pwdErrorsCount: number;\r\n\r\n private static _fields: MandatoryFieldInfo[];\r\n private static _txtName: vr.TextBox;\r\n private static _txtSurname: vr.TextBox;\r\n private static _txtPhoneNumber: vr.TextBox;\r\n private static _txtEmail: vr.TextBox;\r\n private static _chkPrivacy: vr.CheckBox;\r\n private static _chkPrivacyCommercial: vr.CheckBox;\r\n\r\n static initialize(parameters: LoginParameters)\r\n {\r\n this._parameters = parameters;\r\n this._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n Rotator.title(\"LOGIN\");\r\n\r\n Support.checkLogin(() => Rotator.goToMainPage(), () => this.createControls());\r\n }\r\n\r\n static createControls()\r\n {\r\n puma(this._container).empty();\r\n this._pwdErrorsCount = 0;\r\n\r\n if (!Rotator.inBookingFlow() && !Rotator.sailor())\r\n {\r\n Rotator.backButton().hide();\r\n Rotator.burgerButton().show();\r\n }\r\n else\r\n {\r\n Rotator.backButton().show();\r\n Rotator.burgerButton().hide();\r\n }\r\n\r\n if (this._parameters != null && this._parameters.fromRegister === true)\r\n {\r\n let text = \"Hai ricevuto un SMS con le credenziali per accedere al servizio\";\r\n if (Rotator.configuration().appHasEmailNotificationsPlannedForLoginCredentials)\r\n text = \"Hai ricevuto una mail con le credenziali per accedere al servizio\";\r\n\r\n vr.createLabel(\r\n {\r\n text: text,\r\n mode: vr.LabelModeEnum.Default,\r\n cssContainer: \"margin-bottom: 10px;\"\r\n }, this._container);\r\n\r\n if (this._parameters != null && this._parameters.username != null)\r\n {\r\n vr.createButton(\r\n {\r\n text: \"Invia di nuovo\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n width: \"100%\",\r\n class: \"vrButtonResendSMS vrButtonPatient\",\r\n onClick: (e) =>\r\n {\r\n ForgotPassword.recoverPassword(this._parameters!.username);\r\n e.sender.disable();\r\n window.setTimeout(() => e.sender.enable(), 5000);\r\n }\r\n }, this._container);\r\n }\r\n\r\n vr.createSeparator({\r\n orientation: vr.OrientationEnum.Horizontal\r\n }, this._container)\r\n }\r\n\r\n this._txtUsername = vr.createTextBox(\r\n {\r\n label: \"Nome utente\",\r\n placeholder: \"Nome utente\",\r\n onEnterKey: () => this._btnLogin.click(),\r\n mode: vr.TextModeEnum.Text,\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px;\",\r\n autocomplete: vr.TextBoxAutoCompleteEnum.Username,\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n }, this._container);\r\n this._txtUsername.focus();\r\n\r\n if (this._parameters != null && this._parameters.username != null)\r\n this._txtUsername.value(this._parameters.username);\r\n\r\n this._txtPassword = vr.createTextBox(\r\n {\r\n label: \"Password\",\r\n placeholder: \"Password\",\r\n onEnterKey: () => this._btnLogin.click(),\r\n mode: vr.TextModeEnum.Password,\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px;\",\r\n autocomplete: vr.TextBoxAutoCompleteEnum.CurrentPassword,\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n }, this._container);\r\n\r\n this._txtVerificationCode = vr.createTextBox(\r\n {\r\n label: \"Codice OTP\",\r\n placeholder: \"Codice OTP\",\r\n visible: false,\r\n attributes: [{ name: \"autocomplete\", value: \"one-time-code\" }],\r\n onEnterKey: (e) => this._btnLogin.click(),\r\n mode: vr.TextModeEnum.Text,\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px;\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n }, this._container);\r\n\r\n this._btnLogin = vr.createButton({\r\n text: \"Accedi\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n width: \"100%\",\r\n class: \"vrButtonLogin vrButtonPatient\",\r\n onClick: (e) =>\r\n {\r\n //#region Check\r\n let error = false;\r\n if (this._txtUsername.isEmpty())\r\n {\r\n this._txtUsername.error(\"Nome utente obbligatorio\", vr.ErrorModeEnum.Solid);\r\n error = true;\r\n }\r\n\r\n if (this._txtPassword.isEmpty())\r\n {\r\n this._txtPassword.error(\"Password obbligatoria\", vr.ErrorModeEnum.Solid);\r\n error = true;\r\n }\r\n\r\n if (error)\r\n return;\r\n //#endregion\r\n\r\n if (this._abortController != null)\r\n this._abortController.abort();\r\n\r\n let validationCode = (this._txtVerificationCode.visible()) ? this._txtVerificationCode.value() : \"\";\r\n if (this._txtVerificationCode.visible() && validationCode == \"\")\r\n {\r\n vr.notifyWarning(\"Inserire il codice OTP ricevuto\");\r\n return;\r\n }\r\n\r\n this.login(this._txtUsername.value(), this._txtPassword.value(), undefined, undefined, undefined, validationCode);\r\n }\r\n }, this._container);\r\n\r\n if (Rotator.configuration().appSpidEnabled)\r\n {\r\n vr.createButton({\r\n text: \"Accedi con SPID\",\r\n colorSettings: { background: \"#06C\", textColor: \"#FFF\" },\r\n css: \"box-shadow: 0 1px 3px #06C;\",\r\n cssContainer: \"margin-top: 10px;\",\r\n width: \"100%\",\r\n class: \"vrButtonLogin vrButtonPatient\",\r\n icon: vr.IconSharpSolid.User,\r\n iconSettings: { css: \"position: relative; top: -2px; margin-right: 5px; background-color: #FFF; color: #06C; padding: 5px; border-radius: 10px; padding-top: 4px; padding-bottom: 3px; font-size: 12px;\" },\r\n onClick: (e) =>\r\n {\r\n this.manageSpidButton(() =>\r\n {\r\n if (Rotator.inBookingFlow())\r\n Rotator.page(PageEnum.Confirmation2);\r\n else if (this._parameters != null && this._parameters.successCallback != null)\r\n this._parameters!.successCallback();\r\n else\r\n Rotator.page(PageEnum.AppointmentList);\r\n });\r\n }\r\n }, this._container)\r\n }\r\n\r\n vr.createLabel(\r\n {\r\n text: \"Password dimenticata? Recuperala\",\r\n colorSettings:\r\n {\r\n textColor: Rotator.color()\r\n },\r\n width: \"100%\",\r\n cssContainer: \"margin-top: 10px;\",\r\n css: \"text-decoration: underline;\",\r\n align: vr.TextAlignEnum.Right,\r\n onClick: (e) => \r\n {\r\n Rotator.page(PageEnum.ForgotPassword);\r\n }\r\n }, this._container);\r\n\r\n //#region Register with fiscal code\r\n if (!Rotator.configuration().appHideFiscalCodeImpersonification)\r\n {\r\n vr.createSeparator(\r\n {\r\n size: 1,\r\n orientation: vr.OrientationEnum.Horizontal\r\n }, this._container);\r\n\r\n this._txtFiscalCodeAlreadyPatient = vr.createTextBox(\r\n {\r\n label: \"Non hai mai fatto l'accesso, ma sei già paziente? Usa il tuo codice fiscale\",\r\n labelSettings: { mode: vr.LabelModeEnum.Default, css: \"white-space: normal\" },\r\n placeholder: \"Codice fiscale\",\r\n mode: vr.TextModeEnum.Text,\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px;\",\r\n inputMode: vr.TextTransformModeEnum.Uppercase,\r\n onEnterKey: () => btnImpersonificate.click()\r\n }, this._container);\r\n\r\n let btnImpersonificate = vr.createButton(\r\n {\r\n text: \"Registrati con codice fiscale\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n width: \"100%\",\r\n class: \"vrButtonRegisterWithFiscalCode vrButtonPatient\",\r\n onClick: (e) =>\r\n {\r\n //#region Check\r\n let error = false;\r\n if (this._txtFiscalCodeAlreadyPatient.isEmpty())\r\n {\r\n this._txtFiscalCodeAlreadyPatient.error(\"Codice fiscale obbligatorio\", vr.ErrorModeEnum.Solid);\r\n error = true;\r\n }\r\n\r\n if (error)\r\n return;\r\n //#endregion\r\n\r\n this.impersonificate();\r\n }\r\n }, this._container);\r\n }\r\n //#endregion\r\n\r\n //#region HideRegistrationIntoLogin\r\n if (Rotator.configuration().appHideRegistrationIntoLogin === false)\r\n {\r\n vr.createSeparator(\r\n {\r\n size: 1,\r\n orientation: vr.OrientationEnum.Horizontal\r\n }, this._container);\r\n\r\n vr.createLabel(\r\n {\r\n text: \"Oppure registrati\",\r\n mode: vr.LabelModeEnum.Default,\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px;\"\r\n }, this._container);\r\n\r\n //#region Name if no login\r\n this._txtName = vr.createTextBox({\r\n label: \"Nome\",\r\n width: \"100%\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n visible: false\r\n }, this._container);\r\n\r\n this._txtSurname = vr.createTextBox({\r\n label: \"Cognome\",\r\n width: \"100%\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n visible: false\r\n }, this._container);\r\n\r\n if (Rotator.configuration().appLoginRequired == AppLoginModeEnum.Never)\r\n {\r\n this._txtName.show();\r\n this._txtSurname.show();\r\n }\r\n //#endregion\r\n\r\n this._txtPhoneNumber = vr.createTextBox({\r\n label: \"Cellulare\",\r\n width: \"100%\",\r\n mode: vr.TextModeEnum.Numeric,\r\n align: vr.TextAlignEnum.Left,\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n }, this._container);\r\n\r\n this._txtEmail = vr.createTextBox({\r\n label: \"Email\",\r\n width: \"100%\",\r\n mode: vr.TextModeEnum.Mail,\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n visible: false\r\n }, this._container);\r\n\r\n Register.getMandatoryFields((e) =>\r\n {\r\n this._fields = e.fields;\r\n if (e.fields.filter(k => k.fieldType == OnlineBookingMandatoryFieldTypeEnum.EMail)[0].isVisible)\r\n this._txtEmail.show();\r\n });\r\n\r\n //#region Privacy\r\n let divPrivacy = vr.div(this._container, { css: \"text-align: left; display: flex; margin-top: 10px;\" });\r\n this._chkPrivacy = vr.createCheckBox(\r\n {\r\n }, divPrivacy);\r\n\r\n let privacyLabelText = Rotator.configuration().appPrivacyLabelText;\r\n if (privacyLabelText == null || privacyLabelText == \"\")\r\n privacyLabelText = \"Ho letto e accetto la [privacy] (*)\";\r\n\r\n if (privacyLabelText.includes(\"[\"))\r\n {\r\n let textToHighlight = privacyLabelText.substring(\r\n privacyLabelText.lastIndexOf(\"[\") + 1,\r\n privacyLabelText.lastIndexOf(\"]\")\r\n );\r\n privacyLabelText = privacyLabelText.replace(/\\[.*\\]/, \"\" + textToHighlight + \"\")\r\n }\r\n else\r\n {\r\n privacyLabelText = privacyLabelText.replace(\"privacy\", \"privacy\");\r\n privacyLabelText = privacyLabelText.replace(\"Privacy\", \"Privacy\");\r\n }\r\n\r\n vr.createLabel({\r\n text: privacyLabelText,\r\n fontSize: \"1.1em\",\r\n cssContainer: \"top: -1px;\",\r\n width: \"Calc(100% - 35px)\",\r\n onClick: (e) => \r\n {\r\n wndPrivacy.open(null, false, { top: Rotator.container().scrollTop });\r\n }\r\n }, divPrivacy);\r\n\r\n let wndPrivacy = vr.createWindow(\r\n {\r\n title: \"Privacy\",\r\n maximized: false,\r\n content: Rotator.configuration().privacyText,\r\n css: \"overflow-y: auto;\",\r\n cssContainer: \"width: 100% !important; height: \" + (Rotator.container().clientHeight - 20) + \"px !important; position: absolute !important; left: 0px !important;\",\r\n draggable: false,\r\n modal: false,\r\n hideCloseIcon: true,\r\n footer:\r\n [\r\n { type: vr.WindowFooterItemTypeEnum.Close, text: \"Chiudi\" },\r\n {\r\n type: vr.WindowFooterItemTypeEnum.Ok, text: \"Accetta\", onClick: (e) => \r\n {\r\n wndPrivacy.close();\r\n this._chkPrivacy.checked(true);\r\n }\r\n }\r\n ]\r\n }, Rotator.shadowRoot() as any);\r\n puma(wndPrivacy.container()).appendToPuma(this._container);\r\n //#endregion\r\n\r\n if (Rotator.configuration().privacyCommercial && !Rotator.configuration().appHidePrivacyCommercial)\r\n {\r\n let privacyCommercialLabelText = Rotator.configuration().appPrivacyCommercialLabelText;\r\n if (privacyCommercialLabelText == null || privacyCommercialLabelText == \"\")\r\n privacyCommercialLabelText = \"Presto il consenso al trattamento dei dati personali relativi al mio stato di salute\";\r\n\r\n this._chkPrivacyCommercial = vr.createCheckBox({\r\n text: privacyCommercialLabelText,\r\n width: \"100%\",\r\n cssContainer: \"font-size: 0.9em;\"\r\n }, this._container);\r\n }\r\n\r\n vr.createButton(\r\n {\r\n text: \"Registrati\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n cssContainer: \"margin-top: 10px;\",\r\n width: \"100%\",\r\n class: \"vrButtonRegister vrButtonPatient\",\r\n onClick: (e) =>\r\n {\r\n if (Rotator.sailor())\r\n {\r\n Rotator.page(PageEnum.SailorRegister);\r\n }\r\n else if (Rotator.configuration().appPreregisterSubject)\r\n {\r\n //#region Check\r\n let error = this.checkRequiredFields();\r\n if (error)\r\n return;\r\n //#endregion\r\n\r\n let preregisterSettings = new PreregisterSettings();\r\n preregisterSettings.name = this._txtName.value();\r\n preregisterSettings.surname = this._txtSurname.value();\r\n preregisterSettings.phoneNumber = String(this._txtPhoneNumber.value());\r\n preregisterSettings.emailAddress = this._txtEmail.value();\r\n preregisterSettings.privacyForMedicalBooking = this._chkPrivacy.checked();\r\n preregisterSettings.privacyForCommercialUse = (this._chkPrivacyCommercial != null) ? this._chkPrivacyCommercial.checked() : false;\r\n Register.preregister(preregisterSettings, (e) => \r\n {\r\n let parameters = new RegisterParameters();\r\n parameters.preregisterId = e!.preregisterId;\r\n parameters.customerName = this._txtName.value();\r\n parameters.customerSurname = this._txtSurname.value();\r\n parameters.customerMail = this._txtEmail.value();\r\n parameters.customerPhone = String(this._txtPhoneNumber.value());\r\n parameters.privacyCommercial = (this._chkPrivacyCommercial != null) ? this._chkPrivacyCommercial.checked() : false;\r\n Rotator.page(PageEnum.Register, parameters);\r\n });\r\n }\r\n else\r\n {\r\n let error = this.checkRequiredFields();\r\n if (error)\r\n return;\r\n\r\n let parameters = new RegisterParameters();\r\n parameters.customerName = this._txtName.value();\r\n parameters.customerSurname = this._txtSurname.value();\r\n parameters.customerMail = this._txtEmail.value();\r\n parameters.customerPhone = String(this._txtPhoneNumber.value());\r\n parameters.privacyCommercial = (this._chkPrivacyCommercial != null) ? this._chkPrivacyCommercial.checked() : false;\r\n Rotator.page(PageEnum.Register, parameters);\r\n }\r\n }\r\n }, this._container);\r\n }\r\n //#endregion\r\n }\r\n\r\n static manageSpidButton(callback?: Function)\r\n {\r\n let returnUrl = encodeURIComponent(location.href);\r\n if (Rotator.deviceType() != null)\r\n returnUrl += \"&deviceType=\" + Rotator.deviceType();\r\n\r\n let plantId = Rotator.configuration().plant.id;\r\n let spidUrl = 'https://gsvc-vrtokens.vrapp.it/Home/MySpidLogin?nodemo=1&plantId=' + plantId + '&returnUrl=' + returnUrl;\r\n\r\n if (Rotator.deviceType() != null) \r\n {\r\n //#region From App\r\n let data: SpidCookieData = new SpidCookieData();\r\n data.inBookingFlow = Rotator.inBookingFlow();\r\n data.bookingParameters = Rotator.bookingParameters();\r\n data.confirmationParameters = Rotator.confirmationParameters();\r\n vrshared.CookieManager().setCookieMinutes(\"spidCookieData\", data, 30);\r\n\r\n spidUrl += \"&deviceType=\" + Rotator.deviceType();\r\n if (Rotator.deviceType() == DeviceTypeEnum.Ios)\r\n location.href = spidUrl;\r\n else\r\n window.open(spidUrl, \"_blank\");\r\n //#endregion\r\n }\r\n else\r\n {\r\n //#region From Website\r\n let width = screen.availWidth - 150;\r\n let height = screen.availHeight - 150;\r\n let top = window!.top!.outerHeight / 2 + window!.top!.screenY - (height / 2);\r\n let left = window!.top!.outerWidth / 2 + window!.top!.screenX - (width / 2);\r\n window.open(spidUrl, \"_blank\", \"width= \" + width + \", height= \" + height + \", top=\" + top + \", left=\" + left)\r\n\r\n window.addEventListener(\r\n \"message\",\r\n (event) =>\r\n {\r\n let data = event.data;\r\n let fiscalCode = data.fiscalCode;\r\n this.checkSpidLogin(data, callback);\r\n },\r\n false\r\n );\r\n //#endregion\r\n }\r\n }\r\n\r\n static checkSpidLogin(spidLoginData: SpidLoginData, callback?: Function)\r\n {\r\n let request = new CheckSpidLoginRequest();\r\n request.fiscalCode = spidLoginData.fiscalCode;\r\n request.call(\r\n {\r\n success: (response: CheckSpidLoginResponse) =>\r\n {\r\n if (response.userLogged)\r\n {\r\n //#region User exists and now it's logged\r\n VrManager.notify(\"Accesso riuscito\");\r\n\r\n Menu.manageState(true);\r\n if (callback != null)\r\n callback();\r\n //#endregion\r\n }\r\n else\r\n {\r\n //#region User not exists and now I have to create it\r\n VrManager.notify(\"Necessaria registrazione\");\r\n\r\n let parameters = new RegisterParameters();\r\n parameters.customerFiscalCode = spidLoginData.fiscalCode;\r\n parameters.fromSpid = true;\r\n\r\n var txt = document.createElement(\"textarea\");\r\n txt.innerHTML = spidLoginData.name;\r\n spidLoginData.name = txt.value;\r\n txt.innerHTML = spidLoginData.surname;\r\n spidLoginData.surname = txt.value;\r\n txt.innerHTML = spidLoginData.mobilePhone;\r\n spidLoginData.mobilePhone = txt.value;\r\n txt.remove()\r\n\r\n if (spidLoginData.name != null && spidLoginData.name != \"\")\r\n parameters.customerName = spidLoginData.name;\r\n\r\n if (spidLoginData.surname != null && spidLoginData.surname != \"\")\r\n parameters.customerSurname = spidLoginData.surname;\r\n\r\n if (spidLoginData.mobilePhone != null && spidLoginData.mobilePhone != \"\")\r\n parameters.spidMobilePhone = spidLoginData.mobilePhone;\r\n\r\n if (spidLoginData.mail != null && spidLoginData.mail != \"\")\r\n parameters.spidMail = spidLoginData.mail;\r\n\r\n if (spidLoginData.gender != null && spidLoginData.gender != \"\")\r\n parameters.customerGender = spidLoginData.gender;\r\n\r\n if (spidLoginData.birthdate != null && spidLoginData.birthdate != \"\")\r\n parameters.customerBirthdate = new Date(spidLoginData.birthdate);\r\n\r\n parameters.callback = () =>\r\n {\r\n Menu.manageState(true);\r\n if (callback != null)\r\n callback();\r\n };\r\n Rotator.page(PageEnum.Register, parameters);\r\n //#endregion\r\n }\r\n },\r\n loader: Rotator.container()\r\n });\r\n }\r\n\r\n private static checkRequiredFields()\r\n {\r\n let error = false;\r\n if (this._txtPhoneNumber.isEmpty())\r\n {\r\n this._txtPhoneNumber.error(undefined, undefined, undefined, vr.ErrorHideModeEnum.Never);\r\n error = true;\r\n }\r\n else\r\n this._txtPhoneNumber.hideError();\r\n\r\n let fieldEmail = this._fields.filter(k => k.fieldType == OnlineBookingMandatoryFieldTypeEnum.EMail)[0];\r\n if (fieldEmail != null && this._txtEmail.isEmpty() && fieldEmail.isMandatory)\r\n {\r\n this._txtEmail.error(undefined, undefined, undefined, vr.ErrorHideModeEnum.Never);\r\n error = true;\r\n }\r\n else\r\n this._txtEmail.hideError();\r\n\r\n if (!this._chkPrivacy.checked())\r\n {\r\n this._chkPrivacy.error();\r\n error = true;\r\n }\r\n return error;\r\n }\r\n\r\n private static impersonificate()\r\n {\r\n let request = new RegisterRequest();\r\n request.fiscalCodeAlreadyPatient = this._txtFiscalCodeAlreadyPatient.value();\r\n request.call(\r\n {\r\n success: (response: RegisterResponse) => \r\n {\r\n if (response.registerResult == RegisterResult.PatientCreated || response.registerResult == RegisterResult.PatientFound)\r\n {\r\n let loginParameters = new LoginParameters();\r\n loginParameters.fromRegister = true;\r\n loginParameters.username = \"\";\r\n Rotator.page(PageEnum.Login, loginParameters);\r\n }\r\n else\r\n Register.manageRegisterResult(response.registerResult, response.ExceptionMessage, true);\r\n },\r\n loader: Rotator.container()\r\n });\r\n }\r\n\r\n static login(username: string, password: string, callback?: Function, notLoggedCallback?: Function, encrypted = false, doubleFactorCode = \"\")\r\n {\r\n //#region Check\r\n if (username == \"\" || password == \"\")\r\n {\r\n vr.notifyWarning(\"Username e password obbligatori\");\r\n return;\r\n }\r\n //#endregion\r\n\r\n let request = new DoLoginRequest();\r\n request.username = username.trim();\r\n request.password = password.trim();\r\n request.credentialsEncrypted = encrypted;\r\n request.deviceId = Rotator.token();\r\n request.operatingSystemName = (vrshared.DeviceManager().isIphone()) ? \"iphone\" : \"android\";\r\n request.throwException = true;\r\n request.doubleFactorCode = doubleFactorCode;\r\n request.call(\r\n {\r\n success: (response: DoLoginResponse) =>\r\n {\r\n if (this._abortController != null)\r\n this._abortController.abort();\r\n\r\n let successCallback = null;\r\n if (callback == null)\r\n {\r\n if (Rotator.inBookingFlow())\r\n successCallback = () => Rotator.page(PageEnum.Confirmation2);\r\n else if (this._parameters != null && this._parameters.successCallback != null)\r\n successCallback = this._parameters!.successCallback;\r\n else\r\n successCallback = () => Rotator.page(PageEnum.AppointmentList);\r\n }\r\n else\r\n successCallback = callback;\r\n\r\n switch (response.loginStatus)\r\n {\r\n case LoginStatusEnum.Ok:\r\n {\r\n doubleFactorCode = \"\";\r\n switch (response.loginResult)\r\n {\r\n case LoginResult.Success:\r\n {\r\n vrshared.CookieManager().setCookie(\"credentials\", { username: response.encryptedUsername, password: response.encryptedPassword });\r\n successCallback!();\r\n Menu.manageState(true);\r\n }\r\n break;\r\n case LoginResult.WrongUsernameAndPassword:\r\n {\r\n VrManager.notify(\"Nome utente e password non corretti\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n }\r\n break;\r\n case LoginResult.UsernameExistButWrongPassword:\r\n {\r\n VrManager.notify(\"Password non corretta\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\r\n if (this._pwdErrorsCount != null)\r\n {\r\n this._pwdErrorsCount++;\r\n if (this._pwdErrorsCount == 3)\r\n Rotator.page(PageEnum.ForgotPassword);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n break;\r\n case LoginStatusEnum.Error:\r\n {\r\n VrManager.notify(\"Si è verificato un errore\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n Menu.manageState(false);\r\n }\r\n break;\r\n case LoginStatusEnum.PasswordExpired:\r\n {\r\n let parameters = new ChangePasswordParameters();\r\n parameters.passwordExpiredGuid = response.passwordExpiredGuid;\r\n Rotator.page(PageEnum.ChangePassword, parameters);\r\n Menu.manageState(false);\r\n }\r\n break;\r\n case LoginStatusEnum.RequireDoubleFactorAuthentication:\r\n {\r\n if (this._txtVerificationCode != null)\r\n {\r\n this._txtVerificationCode.show();\r\n\r\n if (\"OTPCredential\" in window)\r\n {\r\n window.addEventListener(\"DOMContentLoaded\", e =>\r\n {\r\n this._abortController = new AbortController();\r\n setTimeout(() =>\r\n {\r\n this._abortController.abort();\r\n }, 1 * 60 * 1000); // Abort after 1 minute\r\n\r\n // Invoke the Web OTP API\r\n (navigator.credentials as any).get({\r\n otp: { transport: [\"sms\"] },\r\n signal: this._abortController.signal\r\n }).then((otp: any) =>\r\n {\r\n this._txtVerificationCode.value(otp.code);\r\n });\r\n });\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n },\r\n error: (e) =>\r\n {\r\n doubleFactorCode = \"\";\r\n if (notLoggedCallback != null)\r\n notLoggedCallback();\r\n\r\n if (e.message != null)\r\n {\r\n let message = e.message;\r\n if (e.message.trim() == \"Unauthorized\")\r\n message = \"Nome utente o password non corretti\";\r\n\r\n VrManager.notify(message, \"\", { type: vr.NotifierTypeEnum.Error });\r\n }\r\n\r\n Menu.manageState(false);\r\n },\r\n showError: false,\r\n mode: vrshared.WebApiModeEnum.Async,\r\n loader: Rotator.container()\r\n });\r\n }\r\n}\r\n\r\nexport class LoginParameters\r\n{\r\n fromRegister: boolean;\r\n username: string;\r\n successCallback?: Function | null;\r\n}\r\n\r\nexport class SpidLoginData\r\n{\r\n fiscalCode: string;\r\n name: string;\r\n surname: string;\r\n mobilePhone: string;\r\n mail: string;\r\n gender: string;\r\n birthdate: string;\r\n}\r\n\r\n//#region CheckSpidLogin\r\nclass CheckSpidLoginRequest extends WebApiRequestBase \r\n{\r\n public method: string = \"/api/LoginWebApi/CheckSpidLogin\";\r\n\r\n public fiscalCode: string;\r\n}\r\n\r\nclass CheckSpidLoginResponse extends WebApiResponseBase \r\n{\r\n userLogged: boolean;\r\n}\r\n\r\nexport class SpidCookieData\r\n{\r\n inBookingFlow: boolean;\r\n bookingParameters: BookingParameters;\r\n confirmationParameters: TimeslotListParameters | null;\r\n}\r\n//#endregion\r\n\r\n//#region DoLogin\r\nclass DoLoginRequest extends WebApiRequestBase \r\n{\r\n public method: string = \"/api/LoginWebApi/DoLogin\";\r\n\r\n public username: string;\r\n public password: string;\r\n public credentialsEncrypted: boolean;\r\n public deviceId: string;\r\n public operatingSystemName: string;\r\n public throwException: boolean;\r\n doubleFactorCode: string;\r\n}\r\n\r\nclass DoLoginResponse extends WebApiResponseBase \r\n{\r\n public loginStatus: LoginStatusEnum;\r\n public passwordExpiredGuid: string;\r\n public encryptedUsername: string;\r\n public encryptedPassword: string;\r\n public loginResult: LoginResult;\r\n public patientName: string;\r\n public patientAge: number;\r\n}\r\n\r\nenum LoginResult\r\n{\r\n Success = 1,\r\n UsernameExistButWrongPassword = 2,\r\n WrongUsernameAndPassword = 3,\r\n}\r\n\r\nenum LoginStatusEnum\r\n{\r\n Error = 1,\r\n Ok = 2,\r\n PasswordExpired = 3,\r\n RequireDoubleFactorAuthentication = 4\r\n}\r\n//#endregion","import { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\nimport { Rotator, puma, PageEnum, SailorTypeEnum } from \"../../src/rotator\";\r\nimport { LoginParameters } from \"./login\";\r\nimport { BirthAddressInfo, City, ForeignAddress, ItalianAddress, WebApiDateTime } from \"../../src/shared/common\";\r\nimport { EventTypeEnum, Popup, Support } from \"../../src/support\";\r\nimport { Profile } from \"../../src/privateArea/profile\";\r\nimport { SailorSasnModeEnum as SailorSasnModeEnum } from \"../../src/sailor/sailorRegister\";\r\nimport { VrManager } from \"../../src/shared/vrManager\";\r\n\r\nexport class Register\r\n{\r\n private static _container: HTMLElement;\r\n private static _txtName: vr.TextBox;\r\n private static _txtSurname: vr.TextBox;\r\n private static _txtMobilePhone: vr.TextBox;\r\n private static _txtMail: vr.TextBox;\r\n private static _txtFiscalCode: vr.TextBox;\r\n private static _txtLandline: vr.TextBox;\r\n private static _dtpBirthdate: vr.DatePicker;\r\n private static _cmbBirthCity: vr.ComboBox;\r\n private static _swtItalianForeignBirthCity: vr.Switch;\r\n private static _cmbForeignBirthCityCountry: vr.ComboBox;\r\n private static _txtForeignBirthCity: vr.TextBox;\r\n private static _btgGender: vr.ButtonGroup;\r\n private static _btnRegister: vr.Button;\r\n private static _parameters: RegisterParameters;\r\n private static _fields: MandatoryFieldInfo[];\r\n\r\n private static _swtItalianForeignResidenceAddress: vr.Switch;\r\n private static _txtItalyResidenceAddress: vr.TextBox;\r\n private static _cmbItalyResidenceCity: vr.ComboBox;\r\n private static _txtItalyResidenceProvince: vr.TextBox;\r\n private static _cmbItalyResidenceZip: vr.ComboBox;\r\n private static _txtOutItalyResidenceAddress: vr.TextBox;\r\n private static _cmbOutItalyResidenceCountry: vr.ComboBox;\r\n\r\n static initialize(parameters: RegisterParameters)\r\n {\r\n this._parameters = parameters;\r\n this._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n Rotator.title(\"REGISTRATI\");\r\n\r\n Support.checkLogin(() => Rotator.goToMainPage(), () => \r\n {\r\n this.getMandatoryFields((e) =>\r\n {\r\n this._fields = e.fields;\r\n this.createControls();\r\n });\r\n });\r\n }\r\n\r\n static createControls()\r\n {\r\n puma(this._container).empty();\r\n\r\n //#region Info\r\n let divInfo = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n this._txtName = vr.createTextBox(\r\n {\r\n label: \"Nome\",\r\n placeholder: \"Nome\",\r\n onEnterKey: () => this._btnRegister.click(),\r\n mode: vr.TextModeEnum.Text,\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px;\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n }, divInfo);\r\n this._txtName.focus();\r\n\r\n this._txtSurname = vr.createTextBox(\r\n {\r\n label: \"Cognome\",\r\n placeholder: \"Cognome\",\r\n onEnterKey: () => this._btnRegister.click(),\r\n mode: vr.TextModeEnum.Text,\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px;\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n }, divInfo);\r\n\r\n if (this._parameters != null && this._parameters.fromSpid)\r\n {\r\n this._txtMobilePhone = vr.createTextBox(\r\n {\r\n label: \"Cellulare\",\r\n placeholder: \"Cellulare\",\r\n onEnterKey: () => this._btnRegister.click(),\r\n mode: vr.TextModeEnum.Text,\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px;\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n }, divInfo);\r\n\r\n this._txtMail = vr.createTextBox(\r\n {\r\n label: \"Mail\",\r\n placeholder: \"Mail\",\r\n onEnterKey: () => this._btnRegister.click(),\r\n mode: vr.TextModeEnum.Text,\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px;\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n }, divInfo);\r\n }\r\n\r\n this._txtLandline = vr.createTextBox(\r\n {\r\n label: \"Telefono fisso\",\r\n placeholder: \"Telefono fisso\",\r\n mode: vr.TextModeEnum.Text,\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 10px;\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n }, divInfo);\r\n this.manageFields(this._fields, OnlineBookingMandatoryFieldTypeEnum.Landline, this._txtLandline);\r\n\r\n this._btgGender = vr.createButtonGroup(\r\n {\r\n label: \"Sesso\",\r\n width: \"100%\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n cssContainer: \"margin-bottom: 10px;\",\r\n //selectedColor: Rotator.color(),\r\n items:\r\n [\r\n { text: \"Maschio\", value: \"M\" },\r\n { text: \"Femmina\", value: \"F\" }\r\n ],\r\n selectionMode: vr.SelectionModeEnum.Single\r\n }, divInfo);\r\n this.manageFields(this._fields, OnlineBookingMandatoryFieldTypeEnum.Gender, this._btgGender);\r\n //#endregion\r\n\r\n //#region BirthCity\r\n let divBirthInfo = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"margin-top: 10px;\" });\r\n\r\n this._dtpBirthdate = Support.createDatePicker(\r\n {\r\n label: \"Data di nascita\",\r\n width: \"100%\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n cssContainer: \"margin-bottom: 10px;\",\r\n }, divBirthInfo);\r\n this.manageFields(this._fields, OnlineBookingMandatoryFieldTypeEnum.BirthDate, this._dtpBirthdate);\r\n\r\n let divBirthCity = vr.div(divBirthInfo);\r\n this.manageFields(this._fields, OnlineBookingMandatoryFieldTypeEnum.BirthLocation, null, divBirthCity);\r\n\r\n if (!this._dtpBirthdate.visible() && !puma(divBirthCity).is(\":visible\"))\r\n puma(divBirthInfo).hide();\r\n\r\n vr.createLabel({\r\n text: \"Città di nascita\",\r\n colorSettings: { textColor: Rotator.color() },\r\n }, divBirthCity);\r\n\r\n this._swtItalianForeignBirthCity = vr.createSwitch({\r\n labelOff: \"Italia\",\r\n labelOn: \"Fuori Italia\",\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 5px;\",\r\n onChange: (e) => \r\n {\r\n if (e.checked)\r\n {\r\n puma(divItalyBirthCity).hide();\r\n puma(divForeignBirthCity).show();\r\n }\r\n else\r\n {\r\n puma(divItalyBirthCity).show();\r\n puma(divForeignBirthCity).hide();\r\n }\r\n }\r\n }, divBirthCity);\r\n\r\n let divItalyBirthCity = vr.div(divBirthCity);\r\n this._cmbBirthCity = vr.createComboBox(\r\n {\r\n label: \"Città di nascita\",\r\n width: \"100%\",\r\n cssContainer: \"margin-right: 10px;\",\r\n webService: {\r\n authKey: \"h]K)x@)k2j.@{=7D\",\r\n method: Rotator.patientUrl() + \"/api/UtilityWebApi/GetAllCities\",\r\n itemsPropertyName: \"cities\",\r\n typedTextPropertyName: \"searchText\",\r\n parameters: () =>\r\n {\r\n return {\r\n onlyActive: false\r\n }\r\n }\r\n }\r\n }, divItalyBirthCity);\r\n\r\n let divForeignBirthCity = vr.div(divBirthCity, { css: \"display: none;\" });\r\n this._cmbForeignBirthCityCountry = vr.createComboBox(\r\n {\r\n label: \"Nazione\",\r\n width: \"100%\"\r\n }, divForeignBirthCity);\r\n\r\n this._txtForeignBirthCity = vr.createTextBox(\r\n {\r\n label: \"Città\",\r\n width: \"100%\",\r\n cssContainer: \"margin-right: 10px;\"\r\n }, divForeignBirthCity);\r\n //#endregion\r\n\r\n //#region Fiscal code\r\n let divFiscalCode = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"display: flex;\" });\r\n this._txtFiscalCode = vr.createTextBox({\r\n label: \"Codice fiscale\",\r\n width: \"100%\",\r\n labelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n inputMode: vr.TextTransformModeEnum.Uppercase\r\n }, divFiscalCode);\r\n\r\n if (this._parameters == null || !this._parameters.fromSpid)\r\n this.manageFields(this._fields, OnlineBookingMandatoryFieldTypeEnum.FiscalCode, this._txtFiscalCode);\r\n else\r\n this._txtFiscalCode.disable();\r\n\r\n let btnVerifyFiscalCode = vr.createButton({\r\n icon: vr.IconClassicLight.Check,\r\n colorSettings: { textColor: Rotator.color() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; height: 35px !important;\",\r\n cssContainer: \"top: 6px;\",\r\n visible: false,\r\n tooltip: \"Verifica codice fiscale\",\r\n onClick: (e) =>\r\n {\r\n Profile.checkFiscalCode(this._txtFiscalCode.value(), this._cmbForeignBirthCityCountry.value(), (e) =>\r\n {\r\n if (!e.isValid)\r\n this._txtFiscalCode.error();\r\n else\r\n this._txtFiscalCode.hideError();\r\n\r\n VrManager.notify((e.isValid) ? \"Codice fiscale valido\" : \"Codice fiscale non valido\");\r\n });\r\n }\r\n }, divFiscalCode)\r\n if (this._txtFiscalCode.visible() && (this._parameters == null || !this._parameters.fromSpid))\r\n btnVerifyFiscalCode.show();\r\n\r\n let btnCalcFiscalCode = vr.createButton({\r\n text: \"Calcola codice\",\r\n width: \"100%\",\r\n cssContainer: \"margin-top: 10px;\",\r\n colorSettings: { textColor: Rotator.color() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n visible: false,\r\n onClick: (e) =>\r\n {\r\n let birthAddressInfo = null;\r\n if (!this._swtItalianForeignBirthCity.checked())\r\n {\r\n //#region Italian\r\n if (this._cmbBirthCity.value() != null && this._cmbBirthCity.value() != \"\")\r\n {\r\n birthAddressInfo = new BirthAddressInfo();\r\n birthAddressInfo.istatCode = this._cmbBirthCity.value()!;\r\n }\r\n //#endregion\r\n }\r\n else\r\n {\r\n //#region Foreign\r\n let countrySelected = this._cmbForeignBirthCityCountry.getSelectedItem();\r\n if (countrySelected != null)\r\n {\r\n birthAddressInfo = new BirthAddressInfo();\r\n birthAddressInfo.countryCode = this._cmbForeignBirthCityCountry.value()!;\r\n birthAddressInfo.address = this._txtForeignBirthCity.value();\r\n }\r\n //#endregion\r\n }\r\n\r\n Profile.computeFiscalCode(this._txtName.value(), this._txtSurname.value(), this._btgGender.getSelectedValues()[0], this._dtpBirthdate.value()!, birthAddressInfo,\r\n (e) =>\r\n {\r\n if (e.invalidFieldsMessage != null && e.invalidFieldsMessage != \"\")\r\n VrManager.notify(e.invalidFieldsMessage, \"\", { type: vr.NotifierTypeEnum.Error });\r\n else\r\n {\r\n this._txtFiscalCode.value(e.fiscalCode);\r\n this._txtFiscalCode.hideError();\r\n }\r\n });\r\n }\r\n }, divFiscalCode);\r\n\r\n if ((this._parameters == null || !this._parameters.fromSpid) && this._txtFiscalCode.visible() && this._txtName.visible() && this._txtSurname.visible() && this._btgGender.visible() && this._dtpBirthdate.visible() && puma(divBirthCity).is(\":visible\"))\r\n btnCalcFiscalCode.show();\r\n //#endregion\r\n\r\n //#region Address\r\n let divResidence = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"margin-top: 10px;\" });\r\n this.manageFields(this._fields, OnlineBookingMandatoryFieldTypeEnum.ResidenceAddress, null, divResidence);\r\n\r\n vr.createLabel({\r\n text: \"Indirizzo di residenza\",\r\n colorSettings: { textColor: Rotator.color() },\r\n }, divResidence);\r\n\r\n this._swtItalianForeignResidenceAddress = vr.createSwitch({\r\n labelOff: \"Italia\",\r\n labelOn: \"Fuori Italia\",\r\n width: \"100%\",\r\n cssContainer: \"margin-bottom: 5px;\",\r\n onChange: (e) => \r\n {\r\n if (e.checked)\r\n {\r\n puma(divItalyResidence).hide();\r\n puma(divOutItalyResidence).show();\r\n }\r\n else\r\n {\r\n puma(divItalyResidence).show();\r\n puma(divOutItalyResidence).hide();\r\n }\r\n }\r\n }, divResidence);\r\n\r\n let divItalyResidence = vr.div(divResidence);\r\n this._txtItalyResidenceAddress = vr.createTextBox(\r\n {\r\n label: \"Via\",\r\n width: \"100%\"\r\n }, divItalyResidence);\r\n\r\n this._cmbItalyResidenceCity = vr.createComboBox(\r\n {\r\n label: \"Comune\",\r\n width: \"100%\",\r\n cssContainer: \"margin-right: 10px;\",\r\n webService: {\r\n authKey: \"h]K)x@)k2j.@{=7D\",\r\n method: Rotator.patientUrl() + \"/api/UtilityWebApi/GetAllCities\",\r\n itemsPropertyName: \"cities\",\r\n typedTextPropertyName: \"searchText\",\r\n parameters: () =>\r\n {\r\n return {\r\n onlyActive: true\r\n }\r\n }\r\n },\r\n onAfterChange: (e) =>\r\n {\r\n this.calcProvinceAndZipByCity(e.value, (e) =>\r\n {\r\n this._txtItalyResidenceProvince.clear();\r\n this._cmbItalyResidenceZip.clearItems();\r\n\r\n this._txtItalyResidenceProvince.value(e.city.provinceAbbreviation);\r\n this._cmbItalyResidenceZip.items(e.city.zipCodes.map(k => { return { text: k.zipCode, value: k.zipCode } }));\r\n this._cmbItalyResidenceZip.value(e.city.zipCodes.first().zipCode);\r\n });\r\n }\r\n }, divItalyResidence);\r\n\r\n this._txtItalyResidenceProvince = vr.createTextBox(\r\n {\r\n label: \"Provincia\",\r\n enable: false,\r\n align: vr.TextAlignEnum.Center,\r\n width: \"Calc(50% - 10px)\",\r\n cssContainer: \"margin-right: 10px;\"\r\n }, divItalyResidence);\r\n\r\n this._cmbItalyResidenceZip = vr.createComboBox(\r\n {\r\n label: \"CAP\",\r\n placeholder: \"\",\r\n width: \"50%\"\r\n }, divItalyResidence);\r\n\r\n let divOutItalyResidence = vr.div(divResidence, { css: \"display: none;\" });\r\n this._txtOutItalyResidenceAddress = vr.createTextBox(\r\n {\r\n label: \"Indirizzo\",\r\n width: \"100%\",\r\n cssContainer: \"margin-right: 10px;\"\r\n }, divOutItalyResidence);\r\n\r\n this._cmbOutItalyResidenceCountry = vr.createComboBox(\r\n {\r\n label: \"Nazione\",\r\n width: \"100%\"\r\n }, divOutItalyResidence);\r\n //#endregion\r\n\r\n this._btnRegister = vr.createButton({\r\n text: \"Registrati\",\r\n colorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n css: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n cssContainer: \"margin-bottom: 30px;\",\r\n width: \"100%\",\r\n class: \"vrButtonRegister vrButtonPatient\",\r\n onClick: (e) =>\r\n {\r\n //#region Check\r\n let error = false;\r\n if (this._txtName.isEmpty())\r\n {\r\n this._txtName.error(\"Nome obbligatorio\", vr.ErrorModeEnum.Solid);\r\n error = true;\r\n }\r\n\r\n if (this._txtSurname.isEmpty())\r\n {\r\n this._txtSurname.error(\"Cognome obbligatorio\", vr.ErrorModeEnum.Solid);\r\n error = true;\r\n }\r\n\r\n if (error)\r\n return;\r\n //#endregion\r\n\r\n this.register();\r\n }\r\n }, this._container);\r\n\r\n if (this._parameters != null)\r\n {\r\n if (this._parameters.customerName != null && this._parameters.customerName != \"\" && this._parameters.customerName.trim().toLowerCase() != \"prenotazione online\")\r\n this._txtName.value(this._parameters.customerName);\r\n\r\n if (this._parameters.customerSurname != null && this._parameters.customerSurname != \"\" && this._parameters.customerSurname.trim().toLowerCase() != \"non completata\")\r\n this._txtSurname.value(this._parameters.customerSurname);\r\n\r\n if (this._parameters.customerFiscalCode != null && this._parameters.customerFiscalCode != \"\")\r\n this._txtFiscalCode.value(this._parameters.customerFiscalCode);\r\n\r\n if (this._parameters.spidMobilePhone != null && this._parameters.spidMobilePhone != \"\")\r\n this._txtMobilePhone.value(this._parameters.spidMobilePhone);\r\n\r\n if (this._parameters.spidMail != null && this._parameters.spidMail != \"\")\r\n this._txtMail.value(this._parameters.spidMail);\r\n\r\n if (this._parameters.customerGender != null && this._parameters.customerGender != \"\" && this._btgGender.visible())\r\n this._btgGender.select([this._parameters.customerGender]);\r\n\r\n if (this._parameters.customerBirthdate != null && this._dtpBirthdate.visible())\r\n this._dtpBirthdate.value(this._parameters.customerBirthdate);\r\n }\r\n\r\n this.getAllCountries((e: GetAllCountriesResponse) =>\r\n {\r\n this._cmbOutItalyResidenceCountry.items(e.countries);\r\n this._cmbForeignBirthCityCountry.items(e.countries);\r\n });\r\n }\r\n\r\n static getAllCountries(callback?: (e: GetAllCountriesResponse) => void, mode = vr.WebApiModeEnum.Async)\r\n {\r\n let request = new GetAllCountriesRequest();\r\n request.call(\r\n {\r\n success: (response: GetAllCountriesResponse) =>\r\n {\r\n if (callback != null)\r\n callback(response);\r\n },\r\n mode: mode\r\n }\r\n );\r\n }\r\n\r\n static getAllCategories(callback?: (e: GetAllCategoriesResponse) => void, mode = vr.WebApiModeEnum.Async)\r\n {\r\n let request = new GetAllCategoriesRequest();\r\n request.plantIdList = [Rotator.configuration().plant.id];\r\n request.call(\r\n {\r\n success: (response: GetAllCategoriesResponse) =>\r\n {\r\n if (callback != null)\r\n callback(response);\r\n },\r\n mode: mode\r\n }\r\n );\r\n }\r\n\r\n static manageFields(fields: MandatoryFieldInfo[], fieldTypeEnum: OnlineBookingMandatoryFieldTypeEnum, control?: vr.VrControl | null, container?: HTMLElement)\r\n {\r\n let field = fields.filter(k => k.fieldType == fieldTypeEnum)[0];\r\n if (field == null || (field != null && !field.isVisible))\r\n {\r\n if (control != null)\r\n control.hide();\r\n\r\n if (container != null)\r\n puma(container).hide();\r\n }\r\n }\r\n\r\n static calcProvinceAndZipByCity(cityIstatCode: string, callback?: (e: GetCityInfoByIstatCodeResponse) => void)\r\n {\r\n let request = new GetCityInfoByIstatCodeRequest();\r\n request.cityOrCountryIstatCode = cityIstatCode;\r\n request.call(\r\n {\r\n success: (response: GetCityInfoByIstatCodeResponse) =>\r\n {\r\n let cityInfo = response.city;\r\n if (cityInfo == null)\r\n return;\r\n\r\n if (callback != null)\r\n callback(response);\r\n },\r\n mode: vrshared.WebApiModeEnum.Async\r\n }\r\n );\r\n }\r\n\r\n private static register()\r\n {\r\n //#region Check\r\n let error = this.checkMandatoryFields(this._fields, this._txtFiscalCode, this._dtpBirthdate, this._swtItalianForeignBirthCity,\r\n this._cmbBirthCity, this._cmbForeignBirthCityCountry, this._txtForeignBirthCity, this._btgGender, this._swtItalianForeignResidenceAddress,\r\n this._txtItalyResidenceAddress, this._cmbItalyResidenceCity, this._txtItalyResidenceProvince, this._cmbItalyResidenceZip,\r\n this._txtOutItalyResidenceAddress, this._cmbOutItalyResidenceCountry, this._txtLandline);\r\n\r\n if (error)\r\n return;\r\n //#endregion\r\n\r\n let request = new RegisterRequest();\r\n if (this._parameters != null)\r\n {\r\n if (this._parameters.preregisterId != null)\r\n request.id = this._parameters.preregisterId;\r\n\r\n if (this._parameters.customerPhone != null)\r\n request.phone = this._parameters.customerPhone;\r\n\r\n if (this._parameters.customerMail != null)\r\n request.mail = this._parameters.customerMail;\r\n\r\n if (this._parameters.fromSpid)\r\n {\r\n request.phone = this._txtMobilePhone.value();\r\n request.mail = this._txtMail.value();\r\n }\r\n }\r\n\r\n request.webApiBirthDate = Date.toWebApiDateTime(this._dtpBirthdate.value());\r\n request.surname = this._txtSurname.value();\r\n request.name = this._txtName.value();\r\n request.fiscalCode = this._txtFiscalCode.value();\r\n request.landline = this._txtLandline.value();\r\n request.gender = this._btgGender.getSelectedValues()[0];\r\n request.privacy = true;\r\n request.privacyCommercial = (this._parameters != null && this._parameters.privacyCommercial);\r\n\r\n request.birthAddressInfo = new BirthAddressInfo();\r\n if (!this._swtItalianForeignBirthCity.checked())\r\n {\r\n //#region Italian\r\n request.birthAddressInfo.istatCode = this._cmbBirthCity.value()!;\r\n //#endregion\r\n }\r\n else\r\n {\r\n //#region Foreign\r\n let countrySelected = this._cmbForeignBirthCityCountry.getSelectedItem();\r\n if (countrySelected != null)\r\n request.birthAddressInfo.countryCode = this._cmbForeignBirthCityCountry.value()!;\r\n\r\n request.birthAddressInfo.address = this._txtForeignBirthCity.value();\r\n //#endregion\r\n }\r\n\r\n if (!this._swtItalianForeignResidenceAddress.checked())\r\n {\r\n //#region Italian address\r\n let italianAddress = new ItalianAddress();\r\n italianAddress.street = this._txtItalyResidenceAddress.value();\r\n italianAddress.istatCode = this._cmbItalyResidenceCity.value()!;\r\n italianAddress.zipCode = this._cmbItalyResidenceZip.text();\r\n request.italianAddress = italianAddress;\r\n //#endregion\r\n }\r\n else \r\n {\r\n //#region Foreign address\r\n let foreignAddress = new ForeignAddress();\r\n foreignAddress.address = this._txtOutItalyResidenceAddress.value();\r\n\r\n let countrySelected = this._cmbOutItalyResidenceCountry.getSelectedItem();\r\n if (countrySelected != null)\r\n foreignAddress.countryCode = this._cmbOutItalyResidenceCountry.value()!;\r\n\r\n request.foreignAddress = foreignAddress;\r\n //#endregion\r\n }\r\n\r\n request.throwException = false;\r\n request.createUserAccount = this._parameters == null || !this._parameters.fromSpid;\r\n request.fromSpid = this._parameters != null && this._parameters.fromSpid;\r\n request.call(\r\n {\r\n success: (response: RegisterResponse) => \r\n {\r\n if (response.registerResult == RegisterResult.PatientCreated || response.registerResult == RegisterResult.PatientFound)\r\n {\r\n if (this._parameters != null && this._parameters.fromSpid)\r\n {\r\n VrManager.notify(\"Accesso riuscito\");\r\n this._parameters.callback();\r\n }\r\n else\r\n {\r\n let loginParameters = new LoginParameters();\r\n loginParameters.fromRegister = true;\r\n loginParameters.username = response.username;\r\n Rotator.page(PageEnum.Login, loginParameters);\r\n }\r\n\r\n Support.manageTrackingCookiesEvent(EventTypeEnum.Registered);\r\n }\r\n else\r\n Register.manageRegisterResult(response.registerResult, response.ExceptionMessage);\r\n },\r\n loader: Rotator.container()\r\n });\r\n }\r\n\r\n static manageRegisterResult(registerResult: RegisterResult, exceptionMessage: string | null, impersonificate = false)\r\n {\r\n switch (registerResult)\r\n {\r\n case RegisterResult.UsernameAlreadyExist:\r\n {\r\n if (!impersonificate)\r\n VrManager.notify(\"Esiste già un utente con questo username\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n else\r\n VrManager.notify(\"L'utente associato a questo codice fiscale ha un numero di telefono corrispondente allo username di un altro utente\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\r\n Rotator.page(PageEnum.ForgotPassword);\r\n }\r\n break;\r\n case RegisterResult.UserExistSamePhoneNumber:\r\n VrManager.notify(\"Esiste già un utente con questo username\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n break;\r\n case RegisterResult.UserExistDifferentPhoneNumber:\r\n VrManager.notify(\"Esiste già un utente registrato, con differenti dati. Contattare il centro\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n break;\r\n case RegisterResult.UserExistNoPhoneNumber:\r\n VrManager.notify(\"La persona trovata non ha il telefono cellulare impostato per potergli mandare la password di verifica. Contattare il centro\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n break;\r\n case RegisterResult.PatientNotFound:\r\n VrManager.notify(\"Utente non trovato\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n break;\r\n case RegisterResult.OtherError:\r\n VrManager.notify((exceptionMessage != null) ? exceptionMessage : \"Errore generico\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n break;\r\n }\r\n }\r\n\r\n static checkMandatoryFields(fields: MandatoryFieldInfo[], txtFiscalCode: vr.TextBox, dtpBirthdate: vr.DatePicker,\r\n swtItalianForeignBirthCity: vr.Switch, cmbBirthCity: vr.ComboBox, cmbForeignBirthCityCountry: vr.ComboBox,\r\n txtForeignBirthCity: vr.TextBox, btgGender: vr.ButtonGroup, swtItalianForeignResidenceAddress: vr.Switch,\r\n txtItalyResidenceAddress: vr.TextBox, cmbItalyResidenceCity: vr.ComboBox, txtItalyResidenceProvince: vr.TextBox,\r\n cmbItalyResidenceZip: vr.ComboBox, txtOutItalyResidenceAddress: vr.TextBox, cmbOutItalyResidenceCountry: vr.ComboBox,\r\n txtLandline: vr.TextBox)\r\n {\r\n let error = false;\r\n\r\n let fieldFiscalCode = fields.filter(k => k.fieldType == OnlineBookingMandatoryFieldTypeEnum.FiscalCode)[0];\r\n if (txtFiscalCode.isEmpty() && fieldFiscalCode != null && fieldFiscalCode.isMandatory)\r\n {\r\n VrManager.notify(\"Codice fiscale obbligatorio\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n error = true;\r\n }\r\n\r\n let fieldLandline = fields.filter(k => k.fieldType == OnlineBookingMandatoryFieldTypeEnum.Landline)[0];\r\n if (txtLandline.isEmpty() && fieldLandline != null && fieldLandline.isMandatory)\r\n {\r\n VrManager.notify(\"Telefono fisso obbligatorio\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n error = true;\r\n }\r\n\r\n let fieldBirthdate = fields.filter(k => k.fieldType == OnlineBookingMandatoryFieldTypeEnum.BirthDate)[0];\r\n if (dtpBirthdate.value() == null && fieldBirthdate != null && fieldBirthdate.isMandatory)\r\n {\r\n VrManager.notify(\"Data di nascita obbligatoria\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n error = true;\r\n }\r\n\r\n let fieldBirthCity = fields.filter(k => k.fieldType == OnlineBookingMandatoryFieldTypeEnum.BirthLocation)[0];\r\n if (fieldBirthCity != null && fieldBirthCity.isMandatory)\r\n {\r\n let errorBirthCity = false;\r\n if (!swtItalianForeignBirthCity.checked()) // Italy\r\n {\r\n if (cmbBirthCity.value() == null)\r\n errorBirthCity = true;\r\n }\r\n else // Foreign\r\n {\r\n if (cmbForeignBirthCityCountry.value() == null)\r\n errorBirthCity = true;\r\n\r\n if (txtForeignBirthCity.isEmpty())\r\n errorBirthCity = true;\r\n }\r\n\r\n if (errorBirthCity)\r\n {\r\n VrManager.notify(\"Riempire la città di nascita\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n error = true;\r\n }\r\n }\r\n\r\n let fieldGender = fields.filter(k => k.fieldType == OnlineBookingMandatoryFieldTypeEnum.Gender)[0];\r\n if (btgGender.getSelectedValues().length == 0 && fieldGender != null && fieldGender.isMandatory)\r\n {\r\n VrManager.notify(\"Genere obbligatorio\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n error = true;\r\n }\r\n\r\n let fieldAddress = fields.filter(k => k.fieldType == OnlineBookingMandatoryFieldTypeEnum.ResidenceAddress)[0];\r\n if (fieldAddress != null && fieldAddress.isMandatory)\r\n {\r\n let errorResidence = false;\r\n if (!swtItalianForeignResidenceAddress.checked()) // Italian address\r\n {\r\n if (txtItalyResidenceAddress.isEmpty())\r\n errorResidence = true;\r\n\r\n if (cmbItalyResidenceCity.value() == null)\r\n errorResidence = true;\r\n\r\n if (txtItalyResidenceProvince.isEmpty())\r\n errorResidence = true;\r\n\r\n if (cmbItalyResidenceZip.value() == null)\r\n errorResidence = true;\r\n }\r\n else // Foreign address\r\n {\r\n if (txtOutItalyResidenceAddress.isEmpty())\r\n errorResidence = true;\r\n\r\n if (cmbOutItalyResidenceCountry.value() == null)\r\n errorResidence = true;\r\n }\r\n\r\n if (errorResidence)\r\n {\r\n VrManager.notify(\"Riempire l'indirizzo di residenza\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n error = true;\r\n }\r\n }\r\n return error;\r\n }\r\n\r\n static preregister(settings: PreregisterSettings, callback?: (e: PreregisterResponse) => void, async = true): void\r\n {\r\n //#region Check\r\n let error = false\r\n\r\n if (settings.phoneNumber == null || settings.phoneNumber == \"\")\r\n {\r\n VrManager.notify(\"Cellulare non inserito\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n error = true;\r\n }\r\n\r\n if (error)\r\n return;\r\n //#endregion\r\n\r\n let request = new PreregisterRequest();\r\n request.name = settings.name;\r\n request.surname = settings.surname;\r\n request.phoneNumber = settings.phoneNumber;\r\n request.emailAddress = settings.emailAddress;\r\n request.privacyForCommercialUse = settings.privacyForCommercialUse;\r\n request.privacyForMedicalBooking = settings.privacyForMedicalBooking;\r\n request.call(\r\n {\r\n success: (response: PreregisterResponse) => \r\n {\r\n if (callback != null)\r\n callback(response);\r\n },\r\n loader: Rotator.container(),\r\n mode: (async) ? vr.WebApiModeEnum.Async : vr.WebApiModeEnum.Sync\r\n });\r\n }\r\n\r\n static getMandatoryFields(callback?: (e: GetMandatoryFieldsResponse) => void)\r\n {\r\n let request = new GetMandatoryFieldsRequest();\r\n request.call(\r\n {\r\n success: (response: GetMandatoryFieldsResponse) => \r\n {\r\n if (callback != null)\r\n callback(response);\r\n },\r\n loader: false\r\n });\r\n }\r\n}\r\n\r\nexport class RegisterParameters\r\n{\r\n public customerName: string;\r\n public customerSurname: string;\r\n public preregisterId: number;\r\n public customerPhone: string;\r\n public customerMail: string;\r\n public customerFiscalCode: string;\r\n fromSpid: boolean;\r\n callback: Function;\r\n spidMobilePhone: string;\r\n spidMail: string;\r\n customerGender: string;\r\n customerBirthdate: Date;\r\n privacyCommercial: boolean;\r\n}\r\n\r\n//#region Register\r\nexport class RegisterRequest extends WebApiRequestBase \r\n{\r\n public method: string = \"/api/LoginWebApi/Register\";\r\n\r\n public id: number;\r\n public mail: string;\r\n public phone: string;\r\n public surname: string;\r\n public name: string;\r\n public gender: string;\r\n public privacy: boolean;\r\n public privacyCommercial: boolean;\r\n public fiscalCode: string;\r\n public landline: string;\r\n public fiscalCodeAlreadyPatient: string;\r\n public createUserAccount: boolean;\r\n public birthDate?: Date | null;\r\n public birthAddressInfo: BirthAddressInfo;\r\n public italianAddress: ItalianAddress;\r\n public foreignAddress: ForeignAddress;\r\n public throwException: boolean;\r\n public preregisterId: number;\r\n public webApiBirthDate: WebApiDateTime;\r\n public italianAddressDomicile: ItalianAddress;\r\n public foreignAddressDomicile: ForeignAddress;\r\n public identityCard: IdentityDocumentInfo;\r\n public passport: IdentityDocumentInfo;\r\n public categoryId: number;\r\n fromSpid: boolean;\r\n\r\n public isSailor: boolean;\r\n public sailorType: SailorTypeEnum;\r\n public sailorSasnMode: SailorSasnModeEnum;\r\n public sailorSasnSerialNumber: string;\r\n public sailorSasnCompanyName: string;\r\n public sailorUsmafCompanyName: string;\r\n public sailorUsmafPortAuthorityContactName: string;\r\n public sailorUsmafPortAuthorityContactPhoneNumber: string;\r\n public sailorUsmafPortAuthorityContactEmail: string;\r\n public sailorUsmafShipOwnerContactName: string;\r\n public sailorUsmafShipOwnerContactPhoneNumber: string;\r\n public sailorUsmafShipOwnerContactEmail: string;\r\n}\r\n\r\nexport class IdentityDocumentInfo\r\n{\r\n public number: string;\r\n public emissionDate?: WebApiDateTime | null;\r\n}\r\n\r\nexport class RegisterResponse extends WebApiResponseBase \r\n{\r\n public customerId: number;\r\n public username: string;\r\n public registerResult: RegisterResult;\r\n}\r\n\r\n\r\nexport enum RegisterResult\r\n{\r\n PatientFound = 1,\r\n PatientCreated = 2,\r\n UsernameAlreadyExist = 3,\r\n UserExistSamePhoneNumber = 4,\r\n UserExistDifferentPhoneNumber = 5,\r\n UserExistNoPhoneNumber = 6,\r\n OtherError = 7,\r\n PatientNotFound\r\n}\r\n//#endregion\r\n\r\n//#region Preregister\r\nclass PreregisterRequest extends WebApiRequestBase\r\n{\r\n public method: string = \"/api/LoginWebApi/Preregister\";\r\n\r\n public name: string;\r\n public surname: string | null;\r\n public phoneNumber: string;\r\n public emailAddress: string;\r\n public privacyForMedicalBooking: boolean;\r\n public privacyForCommercialUse: boolean;\r\n}\r\n\r\nexport class PreregisterResponse extends WebApiResponseBase \r\n{\r\n public preregisterId: number;\r\n}\r\n\r\nexport class PreregisterSettings\r\n{\r\n public name: string;\r\n public surname: string | null;\r\n public phoneNumber: string;\r\n public emailAddress: string;\r\n public privacyForMedicalBooking: boolean;\r\n public privacyForCommercialUse: boolean;\r\n}\r\n//#endregion\r\n\r\n//#region GetMandatoryFields\r\nexport class GetMandatoryFieldsRequest extends WebApiRequestBase \r\n{\r\n public method: string = \"/api/LoginWebApi/GetMandatoryFields\";\r\n}\r\n\r\nexport class GetMandatoryFieldsResponse extends WebApiResponseBase \r\n{\r\n public fields: MandatoryFieldInfo[];\r\n}\r\n\r\nexport class MandatoryFieldInfo\r\n{\r\n public fieldType: OnlineBookingMandatoryFieldTypeEnum;\r\n public isMandatory: boolean;\r\n public isVisible: boolean;\r\n public fieldName: string;\r\n}\r\n\r\nexport enum OnlineBookingMandatoryFieldTypeEnum\r\n{\r\n BirthLocation = 1,\r\n BirthDate = 2,\r\n Gender = 3,\r\n FiscalCode = 4,\r\n EMail = 5,\r\n ResidenceAddress = 6,\r\n Landline = 7\r\n}\r\n//#endregion\r\n\r\nclass GetCityInfoByIstatCodeRequest extends WebApiRequestBase\r\n{\r\n public AuthKey: string = \"%r9^3rRZVtyZ+Fzp\";\r\n public method: string = \"/api/UtilityWebApi/GetCityInfoByIstatCode\";\r\n\r\n public cityOrCountryIstatCode: string;\r\n}\r\n\r\nclass GetCityInfoByIstatCodeResponse extends WebApiResponseBase\r\n{\r\n public city: City;\r\n}\r\n\r\nclass GetAllCountriesRequest extends WebApiRequestBase\r\n{\r\n public method: string = \"/api/UtilityWebApi/GetAllCountries\";\r\n}\r\n\r\nclass GetAllCountriesResponse extends WebApiResponseBase\r\n{\r\n public countries: vr.ComboBoxItem[];\r\n}\r\n\r\nclass GetAllCategoriesRequest extends WebApiRequestBase\r\n{\r\n public method: string = \"/api/UtilityWebApi/GetAllCategories\";\r\n\r\n public plantIdList: number[];\r\n}\r\n\r\nclass GetAllCategoriesResponse extends WebApiResponseBase\r\n{\r\n public categories: vr.ComboBoxItem[];\r\n}","import { Rotator, PageEnum, Configuration, puma, AppLoginModeEnum } from \"./rotator\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"./shared/webApi\";\r\nimport { BookingParameters } from \"./booking/booking\";\r\nimport { Menu } from \"./shared/menu\";\r\nimport { Support } from \"./support\";\r\nimport { AppointmentDetailParameter } from \"./privateArea/appointmentDetail\";\r\nimport { VrManager } from \"./shared/vrManager\";\r\nimport { Login, SpidCookieData, SpidLoginData } from \"./login/login\";\r\n\r\nclass VettorePatient extends HTMLElement\r\n{\r\n private _webComponentConfigs: WebComponentConfig[];\r\n private _btnOpenPopup: vr.Button;\r\n\r\n constructor()\r\n {\r\n super();\r\n this.attachShadow({ mode: \"open\" }); // open=I can interact with outside JavaScript, closed=opposite\r\n }\r\n\r\n // Called if observedAttributes have a value\r\n attributeChangedCallback(name: string, oldValue: string, newValue: string)\r\n {\r\n if (oldValue !== newValue)\r\n {\r\n switch (name)\r\n {\r\n case \"configuration\":\r\n {\r\n try\r\n {\r\n newValue = newValue.replace(/'/g, \"\\\"\");\r\n this._webComponentConfigs = JSON.parse(newValue);\r\n }\r\n catch (e)\r\n {\r\n VrManager.notify(\"Json del tag errato, controllare attentamente\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n throw Error(\"Json del tag errato, controllare attentamente\");\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // WebComponent's attributes\r\n static get observedAttributes()\r\n {\r\n return [\"configuration\"];\r\n }\r\n\r\n // Called when the webComponent tag is inserted into the dom\r\n connectedCallback()\r\n {\r\n this.createComponent();\r\n }\r\n\r\n createComponent()\r\n {\r\n //#region SessionId\r\n let sessionId = vrshared.UtilityManager().getUrlParameter(\"sessionId\");\r\n if (sessionId == null || sessionId == \"\")\r\n sessionId = vrshared.CookieManager().getCookie(\"sessionId\");\r\n\r\n if (sessionId != null && sessionId != \"\")\r\n {\r\n vrshared.CookieManager().deleteCookie(\"sessionId\");\r\n vrshared.CookieManager().setCookieYears(\"sessionId\", sessionId, 1, { sameSite: vrshared.CookieSameSiteEnum.Lax, secured: true });\r\n }\r\n //#endregion\r\n\r\n Rotator.shadowRoot(this.shadowRoot!);\r\n customElements.whenDefined(\"vr-patient\").then(() =>\r\n {\r\n Rotator.webComponentParameters(this._webComponentConfigs);\r\n let prePath = Rotator.patientUrl();\r\n\r\n let version = String((new Date().getTime() * 10000) + 621355968000000000);\r\n Rotator.jqueryVariable().when(\r\n Rotator.jqueryVariable().getScript(prePath + \"/scripts/leaflet-image.js?v=\" + version),\r\n Rotator.jqueryVariable().getScript(prePath + \"/scripts/shared.all.min.js?v=\" + version),\r\n Rotator.jqueryVariable().getScript(prePath + \"/scripts/vrcontrols.all.min.js?v=\" + version),\r\n Rotator.jqueryVariable().getScript(prePath + \"/scripts/extensions.all.min.js?v=\" + version),\r\n Rotator.jqueryVariable().getScript(prePath + \"/map/leaflet.js?v=\" + version),\r\n Rotator.jqueryVariable().getScript(prePath + \"/scripts/pdf.js?v=\" + version),\r\n Rotator.jqueryVariable().getScript(prePath + \"/scripts/print.min.js?v=\" + version),\r\n Rotator.jqueryVariable().getScript(prePath + \"/scripts/pdf.worker.js?v=\" + version)\r\n ).done(() =>\r\n {\r\n //Rotator.webComponentParameters()[0].jqueryVariable = \"jQueryVrBooking\";\r\n\r\n let style = document.createElement(\"style\");\r\n let css: Text = document.createTextNode(`\r\n @import '` + prePath + `/styles/vrcontrols.all.min.css?v=` + version + `'; \r\n @import '` + prePath + `/styles/vrpatient.all.min.css?v=` + version + `';\r\n @import '` + prePath + `/FontsAwesomePro/css/all.min.css?v=` + version + `';\r\n @import '` + prePath + `/map/leaflet.css?v=` + version + `';\r\n\r\n @keyframes loaderManager_loader1 { 0% { transform: scale(0); } 100% { transform: scale(1); } }\r\n @keyframes loaderManager_loader3 { 0% { transform: scale(1); } 100% { transform: scale(0); } }\r\n @keyframes loaderManager_loader2 { 0% { transform: translate(0, 0); } 100% { transform: translate(24px, 0); } }\r\n `);\r\n style.appendChild(css);\r\n\r\n if (Rotator.webComponentParameters()[0].css != null)\r\n style.appendChild(document.createTextNode(Rotator.webComponentParameters()[0].css));\r\n\r\n this.shadowRoot!.appendChild(style);\r\n\r\n puma(\"head\").append(`\r\n \r\n \r\n \r\n \r\n \r\n \r\n `);\r\n\r\n if (!location.protocol.startsWith(\"https\"))\r\n {\r\n vr.createLabel(\r\n {\r\n text: \"Per il corretto funzionamento della prenotazione online è necessario utilizzare un protocollo sicuro https\",\r\n colorSettings: { textColor: \"red\" }\r\n }, this.shadowRoot! as any);\r\n\r\n throw Error(\"Per il corretto funzionamento della prenotazione online è necessario utilizzare un protocollo sicuro https\");\r\n }\r\n\r\n let request = new GetConfigurationRequest();\r\n request.configurations = Rotator.webComponentParameters();\r\n request.checkConnection = false;\r\n request.call(\r\n {\r\n success: (response: GetConfigurationResponse) =>\r\n {\r\n if (response.configuration.keyMessageCheck != null && response.configuration.keyMessageCheck != \"\")\r\n {\r\n vr.createLabel(\r\n {\r\n text: response.configuration.keyMessageCheck,\r\n colorSettings: { textColor: \"red\" }\r\n }, this.shadowRoot! as any);\r\n\r\n throw Error(response.configuration.keyMessageCheck);\r\n }\r\n\r\n window.onload = () => { window.setTimeout(() => { window.scrollTo(0, 1); }, 0); }\r\n Rotator.configuration(response.configuration);\r\n\r\n // Paypal\r\n let paypalClientId = (Rotator.configuration().appPaypalSandboxMode) ? Rotator.configuration().appPaypalClientIdSandbox : Rotator.configuration().appPaypalClientId;\r\n if (paypalClientId != null && paypalClientId != \"\")\r\n {\r\n puma(\"head\").append(``);\r\n }\r\n\r\n // Token\r\n let token = vrshared.CookieManager().getCookie(\"token\");\r\n if (token == null || token.length == 0)\r\n {\r\n let tokenFromUrl = vrshared.UtilityManager().getUrlParameter(\"token\");\r\n if (tokenFromUrl != null && tokenFromUrl.length > 0)\r\n token = tokenFromUrl;\r\n }\r\n Rotator.token(token);\r\n\r\n vr.shadowRoot(this.shadowRoot!);\r\n vr.jqueryVariable(Rotator.jqueryVariable());\r\n vrshared.shadowRoot(this.shadowRoot!);\r\n vrshared.jqueryVariable(Rotator.jqueryVariable());\r\n\r\n let appColor = (response.configuration.appColor != null && response.configuration.appColor.length > 0) ? response.configuration.appColor : \"#51B3E1\";\r\n Rotator.color(appColor);\r\n Rotator.textColor((response.configuration.appTextColorWhite) ? \"#FFF\" : \"#000\");\r\n Rotator.appHeaderColor((response.configuration.appMobileHeaderColor == \"\" || response.configuration.appMobileHeaderColor == null) ? appColor : response.configuration.appMobileHeaderColor);\r\n\r\n let appMobileHeaderTextColor = response.configuration.appMobileHeaderTextColor;\r\n if (response.configuration.appMobileHeaderTextColor == \"\" || response.configuration.appMobileHeaderTextColor == null)\r\n appMobileHeaderTextColor = \"#FFF\";\r\n\r\n Rotator.appHeaderTextColor(appMobileHeaderTextColor);\r\n\r\n //#region Other CSS\r\n Support.addCss(`\r\n .loaderManager_loader div.loaderManager_step {\r\n background: ` + Rotator.color() + `;\r\n position: absolute; \r\n top: 33px; \r\n width: 13px; \r\n height: 13px; \r\n border-radius: 50%; \r\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\r\n z-index: 999999999;\r\n }\r\n\r\n .vrWindowHeader{\r\n background-color: ` + Rotator.color() + `;\r\n color: ` + Rotator.textColor() + `;\r\n }\r\n\r\n .vrWindowFooter .vrButtonPrimaryMode {\r\n background-color: ` + Rotator.color() + `;\r\n color: ` + Rotator.textColor() + `;\r\n }\r\n\r\n div.vettorePatientContainer label.vrUploadFileDescription{\r\n line-height: unset !important;\r\n }\r\n\r\n div.vettorePatientContainer label.vrUploadFileDescription .vrUploadLblUnderFileName{\r\n font-size: 11px !important;\r\n }\r\n `);\r\n\r\n if (String.isNotNullOrEmpty(Rotator.configuration().appFileCssBase64TextContent))\r\n Support.addCss(Rotator.configuration().appFileCssBase64TextContent);\r\n //#endregion\r\n\r\n this.createButton();\r\n this.createStructure();\r\n\r\n Support.getTrackingCookies();\r\n Support.getUTM();\r\n },\r\n mode: vrshared.WebApiModeEnum.Async,\r\n loader: false\r\n });\r\n });\r\n });\r\n }\r\n\r\n private createButton()\r\n {\r\n let buttonSettings = Rotator.webComponentParameters()[0].buttonSettings;\r\n let text = (buttonSettings != null && buttonSettings.text != null) ? buttonSettings.text : \"Prenota\";\r\n let css = (buttonSettings != null && buttonSettings.css != null) ? buttonSettings.css : \"color: \" + Rotator.textColor() + \"; background-color: \" + Rotator.color() + \";\";\r\n let cssContainer = (buttonSettings != null && buttonSettings.cssContainer != null) ? buttonSettings.cssContainer : \"\";\r\n\r\n let icon: vr.IconClass | undefined = (buttonSettings != null && buttonSettings.icon != null) ? buttonSettings.icon : \"\";\r\n if (String(icon) == \"\")\r\n icon = undefined;\r\n\r\n let iconCss = (buttonSettings != null && buttonSettings.iconCss != null) ? buttonSettings.iconCss : \"\";\r\n\r\n this._btnOpenPopup = vr.createButton(\r\n {\r\n text: text,\r\n css: css,\r\n cssContainer: cssContainer,\r\n icon: icon,\r\n iconSettings: { css: iconCss },\r\n class: \"vrPatient_btnOpenPopup\",\r\n visible: (Rotator.webComponentParameters()[0].open === true) ? false : true,\r\n onClick: (e) =>\r\n {\r\n if (Rotator.isModal())\r\n puma(\".vrPatientBackground\").show();\r\n\r\n puma(\".vrPatientDivContainer\").show();\r\n if (Rotator.webComponentParameters()[0].fullscreen === true)\r\n {\r\n if (Rotator.isMobile() && Rotator.webComponentParameters()[0].open !== true)\r\n vrshared.UtilityManager().enterFullScreen(puma(\".vrPatientDivContainer\")[0]);\r\n }\r\n }\r\n }, this.shadowRoot! as any);\r\n\r\n Rotator.mainButton(this._btnOpenPopup);\r\n puma(this._btnOpenPopup.container()).addClass(\"vrPatient_btnOpenPopupContainer\");\r\n }\r\n\r\n private createStructure(): void\r\n {\r\n let divBackground = vr.div(this.shadowRoot! as any, { class: \"vrPatientBackground\" });\r\n\r\n //#region DivContainer\r\n let divContainer = vr.div(this.shadowRoot! as any, { class: \"vrPatientDivContainer\" });\r\n divContainer.style.cssText += \"box-shadow: 0 0 10px \" + Rotator.color() + \";\";\r\n\r\n if (Rotator.isMobile())\r\n divContainer.style.cssText += \"width: 100%; height: 100%; left: 0px; top: 0px;\";\r\n else \r\n {\r\n let windowHeight = window.innerHeight;\r\n let divContainerHeight = windowHeight - 150;\r\n if (!Rotator.isModal() && Rotator.webComponentParameters()[0].source != WebComponentSourceModeEnum.CrmLink)\r\n divContainerHeight = 520;\r\n\r\n divContainer.style.cssText += \"height: \" + divContainerHeight + \"px;\";\r\n\r\n let heightParameter = Rotator.webComponentParameters()[0].height;\r\n if (heightParameter != null && heightParameter > 0)\r\n divContainer.style.cssText += \"height: \" + heightParameter + \"px;\";\r\n\r\n let widthParameter = Rotator.webComponentParameters()[0].width;\r\n if (widthParameter != null && widthParameter > 0)\r\n divContainer.style.cssText += \"width: \" + widthParameter + \"px;\";\r\n\r\n divContainer.style.cssText += \"left: Calc(50% - \" + (puma(divContainer).width() / 2) + \"px)\";\r\n divContainer.style.cssText += \"top: Calc(50% - \" + (puma(divContainer).height() / 2) + \"px)\";\r\n\r\n if (Rotator.webComponentParameters()[0].cssDivContainer != null && Rotator.webComponentParameters()[0].cssDivContainer != \"\")\r\n divContainer.style.cssText += Rotator.webComponentParameters()[0].cssDivContainer;\r\n }\r\n\r\n if (!Rotator.isModal())\r\n puma(divBackground).hide();\r\n\r\n //#region Open at start\r\n if (Rotator.webComponentParameters()[0].open === true)\r\n {\r\n divContainer.style.cssText += \"top: 0px; left: 0px; display: block !important;\";\r\n\r\n if (!Rotator.isMobile())\r\n divContainer.style.cssText += \"position: relative;\";\r\n\r\n if (Rotator.isModal())\r\n divBackground.style.cssText += \"display: block;\";\r\n\r\n if (Rotator.webComponentParameters()[0].fullscreen === true)\r\n {\r\n if (Rotator.isMobile() && Rotator.webComponentParameters()[0].open !== true)\r\n vrshared.UtilityManager().enterFullScreen(divContainer);\r\n }\r\n }\r\n //#endregion\r\n\r\n if (!Rotator.isMobile() && Rotator.webComponentParameters()[0].position != null)\r\n {\r\n divContainer.style.cssText += \"top: unset; right: unset; bottom: unset; left: unset;\";\r\n\r\n if (Rotator.webComponentParameters()[0].position.top != null)\r\n divContainer.style.cssText += \"top: \" + Rotator.webComponentParameters()[0].position.top + \"px;\";\r\n\r\n if (Rotator.webComponentParameters()[0].position.right != null)\r\n divContainer.style.cssText += \"right: \" + Rotator.webComponentParameters()[0].position.right + \"px;\";\r\n\r\n if (Rotator.webComponentParameters()[0].position.bottom != null)\r\n divContainer.style.cssText += \"bottom: \" + Rotator.webComponentParameters()[0].position.bottom + \"px;\";\r\n\r\n if (Rotator.webComponentParameters()[0].position.left != null)\r\n divContainer.style.cssText += \"left: \" + Rotator.webComponentParameters()[0].position.left + \"px;\";\r\n }\r\n\r\n if (!Rotator.isMobile())\r\n {\r\n puma(divContainer).on(\"mouseenter\", (e: JQuery.MouseEnterEvent) =>\r\n {\r\n if (Rotator.webComponentParameters()[0].brutalStopScroll === true)\r\n {\r\n puma(\"html\").css(\"height\", \"Calc(100% - 33px)\");\r\n puma(\"body\").css({ \"height\": \"100%\", \"overflow\": \"hidden\" });\r\n }\r\n });\r\n\r\n puma(divContainer).on(\"mouseleave\", (e: JQuery.MouseLeaveEvent) =>\r\n {\r\n if (Rotator.webComponentParameters()[0].brutalStopScroll === true)\r\n {\r\n puma(\"html\").css(\"height\", \"inherit\");\r\n puma(\"body\").css({ \"height\": \"inherit\", \"overflow\": \"inherit\" });\r\n }\r\n });\r\n }\r\n //#endregion\r\n\r\n let header = this.createHeader();\r\n puma(divContainer).append(header);\r\n\r\n if (!Rotator.isMobile() && Rotator.webComponentParameters()[0].draggable === true)\r\n puma(header).vrDrag(divContainer);\r\n\r\n let container = this.createContainer();\r\n puma(divContainer).append(container);\r\n\r\n Menu.initialize();\r\n\r\n let bookingParameters = new BookingParameters();\r\n Rotator.bookingParameters(bookingParameters);\r\n\r\n let appointmentId = Number(vrshared.CookieManager().getCookie(\"appointmentId\"));\r\n if (appointmentId == null || appointmentId == 0)\r\n {\r\n let appointmentIdFromUrl = vrshared.UtilityManager().getUrlParameter(\"appointmentId\");\r\n if (appointmentIdFromUrl != null && appointmentIdFromUrl.length > 0)\r\n appointmentId = Number(appointmentIdFromUrl);\r\n }\r\n\r\n if (appointmentId != null && appointmentId != 0)\r\n {\r\n let parameters = new AppointmentDetailParameter();\r\n parameters.appointmentId = appointmentId;\r\n\r\n Rotator.goToMainPage();\r\n window.setTimeout(() => Rotator.page(PageEnum.AppointmentDetail, parameters), 200);\r\n vrshared.CookieManager().deleteCookie(\"appointmentId\");\r\n }\r\n else\r\n {\r\n let fiscalCode = Rotator.webComponentParameters()[0].fiscalCode;\r\n\r\n if (Rotator.sailor())\r\n Rotator.page(PageEnum.SailorHome);\r\n else if (Rotator.fromSpid() && fiscalCode != null && fiscalCode != \"\" && Rotator.deviceType() != null)\r\n {\r\n let data = vrshared.CookieManager().getCookie(\"spidCookieData\") as any;\r\n Rotator.inBookingFlow(data.inBookingFlow);\r\n Rotator.bookingParameters(data.bookingParameters);\r\n Rotator.confirmationParameters(data.confirmationParameters);\r\n\r\n vrshared.CookieManager().deleteCookie(\"spidCookieData\");\r\n Rotator.webComponentParameters()[0].fromSpid = false;\r\n\r\n let name = Rotator.webComponentParameters()[0].name;\r\n let surname = Rotator.webComponentParameters()[0].surname;\r\n let mobilePhone = Rotator.webComponentParameters()[0].mobilePhone;\r\n let mail = Rotator.webComponentParameters()[0].email;\r\n let gender = Rotator.webComponentParameters()[0].gender;\r\n let birthdate = Rotator.webComponentParameters()[0].birthdate;\r\n\r\n let spidLoginData = new SpidLoginData();\r\n spidLoginData.fiscalCode = fiscalCode;\r\n spidLoginData.name = name;\r\n spidLoginData.surname = surname;\r\n spidLoginData.mobilePhone = mobilePhone;\r\n spidLoginData.mail = mail;\r\n spidLoginData.gender = gender;\r\n spidLoginData.birthdate = birthdate;\r\n\r\n Login.checkSpidLogin(spidLoginData, () =>\r\n {\r\n if (Rotator.inBookingFlow())\r\n Rotator.page(PageEnum.Confirmation2);\r\n else\r\n Rotator.page(PageEnum.AppointmentList);\r\n });\r\n }\r\n else if ((Rotator.webComponentParameters()[0].vrSessionId == null || Rotator.webComponentParameters()[0].vrSessionId == \"\")\r\n && (Rotator.configuration().appLoginRequired == AppLoginModeEnum.Always\r\n || !Rotator.configuration().appBookingAppointments || Rotator.mode() == WebComponentModeEnum.OnlyPrivateArea))\r\n Rotator.page(PageEnum.Login);\r\n else\r\n Rotator.goToMainPage();\r\n }\r\n }\r\n\r\n private createHeader(): HTMLElement\r\n {\r\n let header = puma(\"
    \")[0] as HTMLElement;\r\n\r\n let textColor = Rotator.isMobile() ? \"#FFF\" : Rotator.color();\r\n header.style.cssText += \"color: \" + textColor + \";\";\r\n\r\n let backgroundColor = Rotator.isMobile() ? Rotator.color() : \"#FFF\";\r\n header.style.cssText += \"background-color: \" + backgroundColor + \";\";\r\n\r\n let btnBurger = vr.createButton(\r\n {\r\n icon: vr.IconClassicLight.Burger,\r\n css: \"font-size: 2em; border: none; padding-left: 0px; padding-right: 0px; height: 32px; display: flex; background-color: \" + backgroundColor + \";\",\r\n colorSettings: { textColor: textColor },\r\n onClick: (e) => Menu.visible(!Menu.visible())\r\n }, header, null, \"vettorePatientBurgerButton\");\r\n\r\n if (Rotator.doctorMode())\r\n btnBurger.hide();\r\n\r\n vr.createButton(\r\n {\r\n icon: vr.IconClassicLight.ChevronLeft,\r\n css: \"font-size: 1.8em; border: none; padding-left: 0px; padding-right: 0px; height: 28px; display: flex; background-color: \" + backgroundColor + \";\",\r\n colorSettings: { textColor: textColor },\r\n visible: false,\r\n onClick: (e) => Rotator.back()\r\n }, header, null, \"vettorePatientBackButton\");\r\n\r\n //#region Title & Logo\r\n let divTitleLogo = vr.div(header, { class: \"vettorePatientDivTitleLogo\" });\r\n\r\n if (Rotator.isApp() && Rotator.configuration().appCustomHomeAppMobile)\r\n {\r\n let base64Logo = Support.getAppLogo();\r\n if (base64Logo != null && base64Logo != \"\")\r\n {\r\n vr.createImage({\r\n class: \"vettorePatientLogoHeader\",\r\n base64: true,\r\n value: base64Logo,\r\n width: \"100%\",\r\n position: vr.ImagePositionTypeEnum.Center,\r\n cssContainer: \"max-height: 80px; margin-bottom: 10px;\",\r\n height: 80\r\n }, divTitleLogo)\r\n }\r\n }\r\n\r\n vr.createLabel(\r\n {\r\n text: \"PRENOTA\",\r\n fontSize: \"1.5em\",\r\n align: vr.TextAlignEnum.Center,\r\n width: \"100%\"\r\n }, divTitleLogo, null, \"vettorePatientTitle\");\r\n //#endregion\r\n\r\n let closeButton = vr.createButton(\r\n {\r\n icon: vr.IconClassicLight.Close,\r\n css: \"font-size: 2em; border: none; padding-left: 0px; padding-right: 0px; height: auto; background-color: \" + backgroundColor + \";\",\r\n colorSettings: { textColor: textColor },\r\n onClick: (e) =>\r\n {\r\n puma(\".vrPatientBackground\").hide();\r\n puma(\".vrPatientDivContainer\").hide();\r\n\r\n Rotator.confirmationParameters(null);\r\n Rotator.bookingParameters(null);\r\n Rotator.goToMainPage();\r\n\r\n if (Rotator.webComponentParameters()[0].fullscreen === true && Rotator.isMobile())\r\n vrshared.UtilityManager().exitFullScreen();\r\n }\r\n }, header, null, \"vettorePatientClose\");\r\n\r\n if (Rotator.webComponentParameters()[0].open === true)\r\n closeButton.container().style.cssText += \"visibility: hidden;\";\r\n\r\n return header;\r\n }\r\n\r\n private createContainer(): HTMLElement\r\n {\r\n let container = puma(\"
    \")[0] as HTMLElement;\r\n puma(container).on(\"mousewheel DOMMouseScroll\", (e: any) =>\r\n {\r\n let scrollTo = null;\r\n if (e.type === 'mousewheel')\r\n scrollTo = (e.originalEvent.wheelDelta * -1);\r\n else if (e.type === 'DOMMouseScroll')\r\n scrollTo = 40 * e.originalEvent.detail;\r\n\r\n if (scrollTo)\r\n {\r\n e.preventDefault();\r\n puma(e.currentTarget).scrollTop(scrollTo + puma(e.currentTarget).scrollTop());\r\n }\r\n });\r\n return container;\r\n }\r\n}\r\n\r\n//Define WebComponent's tag\r\ncustomElements.define(\"vr-patient\", VettorePatient);\r\n\r\n//#region Classes\r\nexport class WebComponentConfig\r\n{\r\n public plantId: number;\r\n public url: string;\r\n public authKey: string;\r\n public clientId: string;\r\n public clientSecret: string;\r\n public modal: boolean;\r\n public draggable: boolean;\r\n public brutalStopScroll: boolean;\r\n public open: boolean;\r\n public height: number;\r\n public width: number;\r\n public fullscreen: boolean;\r\n public jqueryVariable: any;\r\n public css: string;\r\n public cssDivContainer: string;\r\n public mode: WebComponentModeEnum;\r\n public fiscalCode: string;\r\n\r\n public position: WebComponentPosition;\r\n public buttonSettings: WebComponentButtonSettings;\r\n\r\n public specificActivityTypeGroupId: number;\r\n public specificActivityTypeGroupIdList: number[];\r\n public specificActivityTypeId: number;\r\n public specificActivityTypeIdList: number[];\r\n public specificWorkplaceId: number;\r\n public specificDoctorId: number;\r\n public specificDoctorIdList: number[];\r\n\r\n // Not exposed\r\n public source: WebComponentSourceModeEnum;\r\n public sailor: boolean;\r\n public fromSpid: boolean;\r\n public patientId: number;\r\n public createFollowUp: boolean;\r\n public vrSessionId: string;\r\n public deviceType: DeviceTypeEnum;\r\n name: string;\r\n surname: string;\r\n mobilePhone: string;\r\n email: string;\r\n gender: string;\r\n birthdate: string;\r\n}\r\n\r\nexport enum DeviceTypeEnum\r\n{\r\n Ios = 1,\r\n Android = 2\r\n}\r\n\r\nexport enum WebComponentModeEnum\r\n{\r\n AllModules,\r\n OnlyPrivateArea,\r\n OnlyBooking\r\n}\r\n\r\nclass WebComponentPosition\r\n{\r\n top: number;\r\n right: number;\r\n bottom: number;\r\n left: number;\r\n}\r\n\r\nexport enum WebComponentSourceModeEnum\r\n{\r\n Crm,\r\n Vettore,\r\n CrmLink,\r\n Test\r\n}\r\n\r\nclass WebComponentButtonSettings\r\n{\r\n text?: string;\r\n css?: string;\r\n cssContainer?: string;\r\n icon?: vr.IconClassicLight;\r\n iconCss?: string;\r\n}\r\n\r\nclass GetConfigurationRequest extends WebApiRequestBase\r\n{\r\n public method: string = \"/api/LoginWebApi/GetConfiguration\";\r\n public configurations: WebComponentConfig[];\r\n}\r\n\r\nclass GetConfigurationResponse extends WebApiResponseBase\r\n{\r\n public configuration: Configuration;\r\n}\r\n//#endregion","import { ActivityTypeResponse, FileTypeEnum, GenderEnum } from \"../../src/shared/common\";\r\nimport { PageEnum, puma, Rotator } from \"../../src/rotator\";\r\nimport { ActivityStatusEnum, AppointmentConfirmationStatusEnum, AppointmentItem, AppointmentList } from \"./appointmentList\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\nimport { PriceTypeEnum, Support } from \"../../src/support\";\r\nimport { PaymentData, PaymentDataParameters } from \"./paymentData\";\r\nimport { VrManager } from \"../../src/shared/vrManager\";\r\nimport { Menu } from \"../../src/shared/menu\";\r\nimport { FileLoaded } from \"../../src/booking/confirmation2\";\r\n\r\ndeclare var leafletImage: any;\r\n\r\nexport class AppointmentDetail\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\tprivate static _appointment: AppointmentItem;\r\n\tprivate static _parameters: AppointmentDetailParameter;\r\n\tprivate static _base64Map: string;\r\n\r\n\tstatic initialize(parameters: AppointmentDetailParameter)\r\n\t{\r\n\t\tthis._parameters = parameters;\r\n\t\tthis._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\t\tRotator.title(\"DETTAGLIO\");\r\n\r\n\t\tif (this._parameters == null)\r\n\t\t{\r\n\t\t\twindow.setTimeout(() => Rotator.page(PageEnum.AppointmentList));\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this._parameters != null)\r\n\t\t{\r\n\t\t\tif (this._parameters.appointment != null)\r\n\t\t\t\tthis.createStructure(this._parameters.appointment);\r\n\t\t\telse\r\n\t\t\t\tAppointmentList.getAppointments((e) => this.createStructure(e.appointments.first()), this._parameters.appointmentId);\r\n\r\n\t\t\tif (this._parameters.showMenuBurger === true)\r\n\t\t\t{\r\n\t\t\t\twindow.setTimeout(() =>\r\n\t\t\t\t{\r\n\t\t\t\t\tRotator.backButton().hide();\r\n\t\t\t\t\tRotator.burgerButton().show();\r\n\t\t\t\t\tMenu.highlightItem(PageEnum.AppointmentList);\r\n\t\t\t\t}, 500);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate static createStructure(appointment: AppointmentItem)\r\n\t{\r\n\t\tthis.drawAppointmentDetail(appointment, this._container);\r\n\t\tthis.createFilesSection();\r\n\t\tthis.createButtons();\r\n\t}\r\n\r\n\tstatic drawAppointmentDetail(appointment: AppointmentItem, container: HTMLElement): HTMLElement\r\n\t{\r\n\t\tthis._appointment = appointment;\r\n\t\tlet divAppointment = vr.div(container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\t//#region Header\r\n\t\tlet divHeader = vr.div(divAppointment, { css: \"padding: 10px; margin-bottom: 10px; border-radius: 10px; box-shadow: 0 1px 3px rgba(0,0,0,.3);\" });\r\n\r\n\t\tlet statusBackgroundColor = \"\";\r\n\t\tlet statusColor = \"\";\r\n\t\tswitch (appointment.statusEnum)\r\n\t\t{\r\n\t\t\tcase ActivityStatusEnum.Aborted:\r\n\t\t\t\t{\r\n\t\t\t\t\tstatusColor = \"#868686\";\r\n\t\t\t\t\tstatusBackgroundColor = \"#F0F0F0\";\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase ActivityStatusEnum.Quote:\r\n\t\t\t\t{\r\n\t\t\t\t\tstatusColor = \"coral\";\r\n\t\t\t\t\tstatusBackgroundColor = \"#ffff94\";\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase ActivityStatusEnum.Contract:\r\n\t\t\tcase ActivityStatusEnum.Terminated:\r\n\t\t\t\t{\r\n\t\t\t\t\tstatusColor = \"green\";\r\n\t\t\t\t\tstatusBackgroundColor = \"#c6f7c6\";\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tdivHeader.style.cssText += \"background-color: \" + statusBackgroundColor + \";\";\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \" \" + ((appointment.statusEnum == ActivityStatusEnum.Aborted) ? \"Disdetto\" : ((appointment.status != null) ? appointment.status : \"\")),\r\n\t\t\tcolorSettings: { textColor: statusColor },\r\n\t\t\tbold: true,\r\n\t\t\twidth: \"100%\"\r\n\t\t}, divHeader);\r\n\r\n\t\tlet from = new Date(appointment.from);\r\n\t\tlet to = new Date(appointment.to);\r\n\t\tlet time = from.toTimeString();\r\n\t\tif (Rotator.configuration().appShowAppointmentDuration)\r\n\t\t\ttime += \" - \" + to.toTimeString();\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: from.toItalyLongString() + \" \" + time + \"\",\r\n\t\t\twidth: \"100%\",\r\n\t\t}, divHeader);\r\n\t\t//#endregion\r\n\r\n\t\tlet divSummary = vr.div(divAppointment);\r\n\r\n\t\tif (appointment.activityTypeItem == null || !appointment.activityTypeItem.onlineBookingDoNotChooseDoctor)\r\n\t\t{\r\n\t\t\tlet divResourceInfo = vr.div(divSummary, { css: \"display: flex;\" });\r\n\r\n\t\t\t//#region Image\r\n\t\t\tlet resource = appointment.doctor;\r\n\t\t\tif (resource.hasAvatar || ((resource as any).imageBase64 != null && (resource as any).imageBase64 != \"\"))\r\n\t\t\t{\r\n\t\t\t\tlet avatar = resource.imageBase64;\r\n\t\t\t\tvr.createImage(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvalue: avatar,\r\n\t\t\t\t\t\tbase64: true,\r\n\t\t\t\t\t\twidth: 70,\r\n\t\t\t\t\t\theight: 70,\r\n\t\t\t\t\t\tcssContainer: \"justify-content: center; margin-right: 10px;\",\r\n\t\t\t\t\t\tcss: \"border-radius: 35px;\"\r\n\t\t\t\t\t}, divResourceInfo);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tvr.icon(vr.IconClassicLight.UserDoctor, divResourceInfo, { css: \"justify-content: center; margin-right: 10px; font-size: 5em; color: \" + Rotator.color() + \";\" });\r\n\t\t\t//#endregion\r\n\r\n\t\t\t//#region Info\r\n\t\t\tlet divInfo = vr.div(divResourceInfo, { css: \"display: inline-block; width: Calc(100% - 75px); min-height: 70px; text-align: left;\" });\r\n\r\n\t\t\tlet title = (resource.title != null && resource.title != \"\") ? resource.title : ((resource.genderEnum == GenderEnum.Female) ? \"Dott.ssa\" : \"Dott.\");\r\n\t\t\tvr.createLabel(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: \"\" + title + \" \" + resource.name,\r\n\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\tcss: \"font-weight: 600;\",\r\n\t\t\t\t\tnoBr: true\r\n\t\t\t\t}, divInfo);\r\n\r\n\t\t\tif (resource.qualification != null && resource.qualification.length > 0)\r\n\t\t\t{\r\n\t\t\t\tvr.createLabel(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttext: resource.qualification,\r\n\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\tcss: \"font-size: 1em;\"\r\n\t\t\t\t\t}, divInfo);\r\n\t\t\t}\r\n\r\n\t\t\tif (resource.rating != null && resource.rating.values.length > 0)\r\n\t\t\t{\r\n\t\t\t\tvr.createRating(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcssContainer: \"margin-top: 7px;\",\r\n\t\t\t\t\t\tmax: resource.rating.total,\r\n\t\t\t\t\t\tvalue: resource.rating.values.sum() / resource.rating.values.length,\r\n\t\t\t\t\t\ttotal: resource.rating.values.length,\r\n\t\t\t\t\t\tenable: false\r\n\t\t\t\t\t}, divInfo);\r\n\t\t\t}\r\n\t\t\t//#endregion\r\n\t\t}\r\n\r\n\t\t//#region ActivityType\r\n\t\tlet divActivityType = vr.div(divSummary, { css: \"margin-top: 10px;\" });\r\n\t\tvr.icon(vr.IconClassicLight.FileLines, divActivityType, { css: \"margin-right: 5px; color: \" + Rotator.color() });\r\n\r\n\t\tlet displayPrice = Support.displayPrice(appointment.price, PriceTypeEnum.Appointment, true);\r\n\t\tvr.createLabel(\r\n\t\t\t{\r\n\t\t\t\ttext: appointment.activityTypeName + displayPrice,\r\n\t\t\t\twidth: \"Calc(100% - 20px)\"\r\n\t\t\t}, divActivityType);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Booked for\r\n\t\tif (appointment.ownerId != appointment.patientId)\r\n\t\t{\r\n\t\t\tlet divBookedFor = vr.div(divSummary, { css: \"margin-top: 5px;\" });\r\n\t\t\tlet userIcon = (appointment.patientGenderEnum == GenderEnum.Female) ? vr.IconClassicLight.UserHairLong : vr.IconClassicLight.UserHair;\r\n\t\t\tvr.icon(userIcon, divBookedFor, { css: \"margin-right: 3px; color: \" + Rotator.color() });\r\n\r\n\t\t\tvr.createLabel({\r\n\t\t\t\ttext: appointment.patientName,\r\n\t\t\t\twidth: \"Calc(100% - 20px)\",\r\n\t\t\t\tnoBr: 2\r\n\t\t\t}, divBookedFor);\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Workplace\r\n\t\tlet divWorkplace = vr.div(divSummary, { css: \"margin-top: 5px;\" });\r\n\t\tvr.icon(vr.IconClassicLight.MapPin, divWorkplace, { css: \"margin-right: 8px; color: \" + Rotator.color() });\r\n\t\tlet address = Support.getAddressName(appointment.workplace);\r\n\t\tvr.createLabel(\r\n\t\t\t{\r\n\t\t\t\ttext: address + \"
    \" + appointment.workplace.name + \"\",\r\n\t\t\t\twidth: \"Calc(100% - 20px)\"\r\n\t\t\t}, divWorkplace);\r\n\r\n\t\tlet map = vr.createMap(\r\n\t\t\t{\r\n\t\t\t\tlatitude: appointment.workplace.latitude,\r\n\t\t\t\tlongitude: appointment.workplace.longitude,\r\n\t\t\t\tcssContainer: \"margin-top: 15px;\",\r\n\t\t\t\theight: 120,\r\n\t\t\t\tenable: false,\r\n\t\t\t\tmode: vr.MapModeEnum.Streets,\r\n\t\t\t\tonClick: (e) => \r\n\t\t\t\t{\r\n\t\t\t\t\tvrshared.UtilityManager().openUrl(\"https://www.google.com/maps/search/?api=1&query=\" + appointment.workplace.latitude + \",\" + appointment.workplace.longitude, true);\r\n\t\t\t\t}\r\n\t\t\t}, divAppointment);\r\n\r\n\t\tleafletImage(map.map(), (err: any, canvas: any) =>\r\n\t\t{\r\n\t\t\tthis._base64Map = canvas.toDataURL(\"image/jpeg\").replace(\"data:image/jpeg;base64,\", \"\");\r\n\t\t});\r\n\t\t//#endregion\r\n\r\n\t\treturn divAppointment;\r\n\t}\r\n\r\n\tprivate static createButtons()\r\n\t{\r\n\t\tif (this._appointment.statusEnum != ActivityStatusEnum.Terminated && new Date(this._appointment.from).getTime() >= new Date().getTime())\r\n\t\t{\r\n\t\t\tlet request = new GetConfirmationToggleButtonVisibilityRequest();\r\n\t\t\trequest.appointmentId = this._appointment.appointmentId;\r\n\t\t\trequest.call(\r\n\t\t\t\t{\r\n\t\t\t\t\tsuccess: (response: GetConfirmationToggleButtonVisibilityResponse) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (response.showConfirm)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvr.createButton(\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttext: \"Conferma appuntamento\",\r\n\t\t\t\t\t\t\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\t\t\t\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\tconfirmationMessage: \"Vuoi confermare questo appuntamento?\",\r\n\t\t\t\t\t\t\t\t\tclass: \"vrButtonCancelAppointment vrButtonPatient\",\r\n\t\t\t\t\t\t\t\t\tonClick: (e) =>\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tthis.customerConfirmationToggleAppointment(AppointmentConfirmationStatusEnum.ConfirmedByCustomer, () =>\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tVrManager.notify(\"Appuntamento confermato con successo!\");\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.back();\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}, this._container);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (response.showAbort && Rotator.configuration().appCancelAppointment)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvr.createButton(\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttext: \"Disdici appuntamento\",\r\n\t\t\t\t\t\t\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\t\t\t\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\tclass: \"vrButtonCancelAppointment vrButtonPatient\",\r\n\t\t\t\t\t\t\t\t\tonClick: (e) =>\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tSupport.confirm(\"Confermi di voler disdire questo appuntamento?\", () =>\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tthis.customerConfirmationToggleAppointment(AppointmentConfirmationStatusEnum.RejectedByCustomer, () =>\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tVrManager.notify(\"Appuntamento disdetto con successo!\");\r\n\t\t\t\t\t\t\t\t\t\t\t\tRotator.back();\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}, this._container);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmode: vrshared.WebApiModeEnum.Sync\r\n\t\t\t\t});\r\n\r\n\t\t\tif (this._appointment.statusEnum != ActivityStatusEnum.Aborted)\r\n\t\t\t{\r\n\t\t\t\tif (this._appointment.billingStatus != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this._appointment.billingStatus.billableOnline && (this._appointment.billingStatus.invoiceId == null || this._appointment.billingStatus.invoiceId == 0))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvr.createButton(\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttext: \"Paga\",\r\n\t\t\t\t\t\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\t\t\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\t\t\t\t\tcssContainer: \"margin-top: 10px;\",\r\n\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\tclass: \"vrButtonPayAppointment vrButtonPatient\",\r\n\t\t\t\t\t\t\t\tonClick: (e) =>\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tlet parameters = new PaymentDataParameters();\r\n\t\t\t\t\t\t\t\t\tparameters.appointmentId = this._appointment.appointmentId;\r\n\t\t\t\t\t\t\t\t\tparameters.price = this._appointment.billingStatus.toBill;\r\n\t\t\t\t\t\t\t\t\tparameters.itemName = this._appointment.activityTypeName;\r\n\t\t\t\t\t\t\t\t\tparameters.callbackAfterPayment = (e) =>\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tPaymentData.createInvoice(e.appointmentId, (response) =>\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tif (response.invoiceId > 0)\r\n\t\t\t\t\t\t\t\t\t\t\t\tVrManager.notify(\"Fattura creata con successo!\");\r\n\t\t\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t\t\tVrManager.notify(\"Pagamento effettuato con successo!\");\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.page(PageEnum.DocumentList);\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tRotator.page(PageEnum.PaymentData, parameters);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}, this._container);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (this._appointment.billingStatus.invoiceId != null && this._appointment.billingStatus.invoiceId != 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvr.createButton({\r\n\t\t\t\t\t\t\ttext: \"Scarica documento\",\r\n\t\t\t\t\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\t\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\t\t\t\t\tcssContainer: \"width: 100%;\",\r\n\t\t\t\t\t\t\tonClick: (e) => Support.downloadDocument(this._appointment.billingStatus.invoiceId!, \"fattura.pdf\")\r\n\t\t\t\t\t\t}, this._container);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let report of this._appointment.reports)\r\n\t\t{\r\n\t\t\tif (report.date == null)\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\tvr.createButton(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: \"Vedi referto (\" + new Date(report.date).toItalyShortString() + \")\",\r\n\t\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\t\tcssContainer: \"margin-top: 10px\",\r\n\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\tclass: \"vrButtonShowReport vrButtonPatient\",\r\n\t\t\t\t\tcolorSettings:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttextColor: Rotator.textColor(),\r\n\t\t\t\t\t\tbackground: Rotator.color()\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonClick: (e) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tSupport.downloadFile(report.storedFileId, \"referto_\" + new Date(report.date).toItalyShortString() + \".pdf\", FileTypeEnum.Pdf);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, this._container);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate static createFilesSection()\r\n\t{\r\n\t\tif (!Rotator.configuration().appCanSubjectUploadFilesIntoAppointment)\r\n\t\t\treturn;\r\n\r\n\t\tlet divFilesSection = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\tlet upload = vr.createUpload({\r\n\t\t\tuploadButton: \"Carica file...\",\r\n\t\t\tfileList: true,\r\n\t\t\tfileListMaxHeight: 200,\r\n\t\t\tprogressBar: true,\r\n\t\t\tmultiple: true,\r\n\t\t\tautoUpload: false,\r\n\t\t\tdropArea: !Rotator.isMobile(),\r\n\t\t\tcssContainer: \"margin-bottom: 5px; margin-top: 10px;\",\r\n\t\t}, divFilesSection);\r\n\r\n\t\tvr.createButton(\r\n\t\t\t{\r\n\t\t\t\ttext: \"Carica file\",\r\n\t\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\t\tclass: \"vrButtonBookingAppointment vrButtonPatient\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tonClick: (e) => \r\n\t\t\t\t{\r\n\t\t\t\t\tlet files = upload.getFiles();\r\n\t\t\t\t\tif (files.length == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tVrManager.notify(\"Caricare almeno un file\", undefined, { type: vr.NotifierTypeEnum.Warning });\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvr.filesToBase64(files).then((base64List) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlet i = 0;\r\n\t\t\t\t\t\tlet filesLoaded = [];\r\n\t\t\t\t\t\tfor (let file of files)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlet fileLoaded = new FileLoaded();\r\n\t\t\t\t\t\t\tfileLoaded.base64 = base64List[i];\r\n\t\t\t\t\t\t\tfileLoaded.fileName = file.name;\r\n\t\t\t\t\t\t\tfileLoaded.mimeType = file.type;\r\n\t\t\t\t\t\t\tfilesLoaded.push(fileLoaded);\r\n\t\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlet request = new AddFileToAppointmentRequest();\r\n\t\t\t\t\t\trequest.appointmentId = this._appointment.appointmentId;\r\n\t\t\t\t\t\trequest.filesLoaded = filesLoaded;\r\n\t\t\t\t\t\trequest.call(\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tsuccess: (response: AddFileToAppointmentResponse) =>\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tVrManager.notify(\"File caricati correttamente\", undefined, { type: vr.NotifierTypeEnum.Success });\r\n\r\n\t\t\t\t\t\t\t\t\tRotator.pageHistory().pop();\r\n\t\t\t\t\t\t\t\t\tRotator.page(PageEnum.AppointmentDetail, this._parameters);\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\t\t\t\t\tloader: Rotator.container()\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}, divFilesSection);\r\n\t}\r\n\r\n\tstatic customerConfirmationToggleAppointment(status: AppointmentConfirmationStatusEnum, successCallback?: Function)\r\n\t{\r\n\t\tlet request = new CustomerConfirmationToggleAppointmentRequest();\r\n\t\trequest.appointmentId = this._appointment.appointmentId;\r\n\t\trequest.customerConfirmationStatusEnum = status;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: CustomerConfirmationToggleAppointmentResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (successCallback != null)\r\n\t\t\t\t\t\tsuccessCallback();\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic printReport(appointmentId: number, base64Map: string)\r\n\t{\r\n\t\tAppointmentList.getAppointments((e) => \r\n\t\t{\r\n\t\t\tlet base64Logo = Support.getAppLogo();\r\n\t\t\tlet request = new PrintAppointmentRequest();\r\n\t\t\trequest.appointment = e.appointments.first();\r\n\t\t\trequest.base64Logo = base64Logo\r\n\t\t\trequest.base64Map = base64Map;\r\n\t\t\trequest.call(\r\n\t\t\t\t{\r\n\t\t\t\t\tsuccess: (response: PrintAppointmentResponse) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvrshared.UtilityManager().downloadFile(response.base64Data, response.fileName, FileTypeEnum.Pdf);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\t\tloader: Rotator.container()\r\n\t\t\t\t});\r\n\t\t}, appointmentId);\r\n\t}\r\n}\r\n\r\n//#region Classes\r\nexport class AppointmentDetailParameter\r\n{\r\n\tpublic appointment: AppointmentItem;\r\n\tpublic appointmentId: number;\r\n\tpublic showMenuBurger: boolean;\r\n}\r\n\r\nclass DeleteAppointmentRequest extends WebApiRequestBase \r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/DeleteAppointment\";\r\n\tpublic appointmentId: number;\r\n}\r\n\r\nclass DeleteAppointmentResponse extends WebApiResponseBase \r\n{\r\n\r\n}\r\n\r\nclass DownloadBookingConfirmationReportRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/DownloadBookingReport\";\r\n\tpublic appointmentId: number;\r\n}\r\n\r\nclass DownloadBookingConfirmationReportResponse extends WebApiResponseBase\r\n{\r\n\tpublic fileName: string;\r\n\tpublic pdfDataBase64: string;\r\n}\r\n\r\nclass CustomerConfirmationToggleAppointmentRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/CustomerConfirmationToggleAppointment\";\r\n\r\n\tpublic appointmentId: number;\r\n\tpublic customerConfirmationStatusEnum: AppointmentConfirmationStatusEnum;\r\n}\r\n\r\nclass CustomerConfirmationToggleAppointmentResponse extends WebApiResponseBase\r\n{\r\n\r\n}\r\n\r\nclass PrintAppointmentRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/PrintAppointment\";\r\n\r\n\tpublic appointment: AppointmentItem;\r\n\tpublic base64Logo: string;\r\n\tpublic base64Map: string;\r\n}\r\n\r\nclass PrintAppointmentResponse extends WebApiResponseBase\r\n{\r\n\tpublic base64Data: string;\r\n\tpublic fileName: string;\r\n}\r\n\r\nclass GetConfirmationToggleButtonVisibilityRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/GetConfirmationToggleButtonVisibility\";\r\n\r\n\tpublic appointmentId: number;\r\n}\r\n\r\nclass GetConfirmationToggleButtonVisibilityResponse extends WebApiResponseBase\r\n{\r\n\tpublic showConfirm: boolean;\r\n\tpublic showAbort: boolean;\r\n\tpublic showUnknown: boolean;\r\n}\r\n\r\nclass AddFileToAppointmentRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/AddFileToAppointment\";\r\n\r\n\tpublic appointmentId: number;\r\n\tfilesLoaded: FileLoaded[];\r\n}\r\n\r\nclass AddFileToAppointmentResponse extends WebApiResponseBase\r\n{\r\n\r\n}\r\n//#endregion","import { ActivityTypeItem, FileItem, GenderEnum, ReportItem, ResourceResponse, WorkplaceResponse } from \"../../src/shared/common\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\nimport { PageEnum, puma, Rotator } from \"../../src/rotator\";\r\nimport { Support } from \"../../src/support\";\r\nimport { AppointmentDetail, AppointmentDetailParameter } from \"./appointmentDetail\";\r\n\r\nexport class AppointmentList\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\tprivate static _appointments: AppointmentItem[];\r\n\tprivate static _swtFilter: vr.Switch;\r\n\tprivate static _divAppointments: HTMLElement;\r\n\r\n\tstatic initialize()\r\n\t{\r\n\t\tthis._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\t\tRotator.title(\"APPUNTAMENTI\");\r\n\r\n\t\tSupport.checkLogin(() => this.getAppointments((e) => \r\n\t\t{\r\n\t\t\tthis._appointments = e.appointments;\r\n\t\t\tif (!Rotator.configuration().appShowAppointmentAborted)\r\n\t\t\t\tthis._appointments = this._appointments.filter(k => k.statusEnum != ActivityStatusEnum.Aborted);\r\n\r\n\t\t\tpuma(\".forward\").empty();\r\n\r\n\t\t\tthis.createFilter();\r\n\t\t\tthis._divAppointments = vr.div(this._container);\r\n\t\t\tthis.drawAppointments();\r\n\t\t}), null, () => Rotator.page(PageEnum.AppointmentList));\r\n\t}\r\n\r\n\tprivate static createFilter()\r\n\t{\r\n\t\tlet divFilter = vr.div(this._container, { css: \"padding: 5px; margin-bottom: 10px; text-align: center; background-color: \" + Rotator.color() + \"30;\" });\r\n\t\tthis._swtFilter = vr.createSwitch({\r\n\t\t\tchecked: Rotator.filterAppointmentOnPast(),\r\n\t\t\tlabelOff: \"Prossimi\",\r\n\t\t\tlabelOn: \"Passati/disdetti\",\r\n\t\t\tonChange: (e) => this.drawAppointments()\r\n\t\t}, divFilter);\r\n\t}\r\n\r\n\tprivate static drawAppointments()\r\n\t{\r\n\t\tRotator.filterAppointmentOnPast(this._swtFilter.checked());\r\n\r\n\t\tlet appointments: AppointmentItem[] = [];\r\n\t\tif (this._swtFilter.checked())\r\n\t\t\tappointments = this._appointments.filter(k => (new Date(k.from).getTime() < new Date().getTime())\r\n\t\t\t\t|| (k.statusEnum == ActivityStatusEnum.Aborted || k.statusEnum == ActivityStatusEnum.Terminated))\r\n\t\t\t\t.sortDesc(k => k.from);\r\n\t\telse\r\n\t\t\tappointments = this._appointments.filter(k => new Date(k.from).getTime() >= new Date().getTime()\r\n\t\t\t\t&& k.statusEnum != ActivityStatusEnum.Terminated && k.statusEnum != ActivityStatusEnum.Aborted)\r\n\t\t\t\t.sortAsc(k => k.from);;\r\n\r\n\t\tpuma(this._divAppointments).empty();\r\n\t\tif (appointments.length == 0)\r\n\t\t{\r\n\t\t\tlet divNoRecords = vr.div(this._divAppointments, { class: \"vrPatientDivSlot\" });\r\n\t\t\tvr.createLabel({\r\n\t\t\t\ttext: (this._swtFilter.checked()) ? \"Non ci sono appuntamenti passati\" : \"Non ci sono prossimi appuntamenti\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\talign: vr.TextAlignEnum.Center\r\n\t\t\t}, divNoRecords);\r\n\t\t}\r\n\r\n\t\tfor (let appointment of appointments)\r\n\t\t{\r\n\t\t\tlet divAppointment = AppointmentDetail.drawAppointmentDetail(appointment, this._divAppointments);\r\n\r\n\t\t\tvr.createButton(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: \"Mostra dettagli\",\r\n\t\t\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\t\tcssContainer: \"margin-top: 10px\",\r\n\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\tonClick: (e) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlet parameter = new AppointmentDetailParameter();\r\n\t\t\t\t\t\tparameter.appointment = appointment;\r\n\t\t\t\t\t\tRotator.page(PageEnum.AppointmentDetail, parameter);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, divAppointment);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic getAppointments(callback?: (e: GetAppointmentsResponse) => void, appointmentId?: number)\r\n\t{\r\n\t\tlet request = new GetAppointmentsRequest();\r\n\t\trequest.plantIdList = [Rotator.configuration().plant.id];\r\n\t\trequest.appointmentId = appointmentId;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: GetAppointmentsResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(response);\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n}\r\n\r\n//#region Classes\r\nclass GetAppointmentsRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/GetAppointments\";\r\n\tpublic plantIdList: number[];\r\n\tpublic appointmentId?: number;\r\n}\r\n\r\nclass GetAppointmentsResponse extends WebApiResponseBase\r\n{\r\n\tpublic appointments: AppointmentItem[];\r\n}\r\n\r\nexport class AppointmentItem\r\n{\r\n\tpublic appointmentId: number;\r\n\tpublic patientId: number;\r\n\tpublic patientName: string;\r\n\tpublic patientGenderEnum: GenderEnum;\r\n\tpublic activityTypeId: number;\r\n\tpublic activityTypeItem: ActivityTypeItem;\r\n\tpublic doctorId: number;\r\n\tpublic ownerId: number;\r\n\tpublic doctorName: string;\r\n\tpublic doctor: ResourceResponse;\r\n\tpublic workplaceId: number;\r\n\tpublic workplaceName: string;\r\n\tpublic workplace: WorkplaceResponse;\r\n\tpublic activityTypeName: string;\r\n\tpublic confirmed: boolean;\r\n\tpublic from: Date;\r\n\tpublic to: Date;\r\n\tpublic minutesDuration: number;\r\n\tpublic discountRate: number;\r\n\tpublic price: number;\r\n\tpublic status: string;\r\n\tpublic statusEnum: ActivityStatusEnum;\r\n\tpublic note: string;\r\n\tpublic activityNote: string;\r\n\tpublic reports: ReportItem[];\r\n\tpublic billingStatus: BillingStatus;\r\n\tpublic customerConfirmationStatusEnum: AppointmentConfirmationStatusEnum;\r\n\tfiles: FileItem[];\r\n}\r\n\r\nexport enum AppointmentConfirmationStatusEnum\r\n{\r\n\tConfirmedByCustomer = 10,\r\n\tRejectedByCustomer = 20,\r\n\tUnknown = 30\r\n}\r\n\r\nclass BillingStatus\r\n{\r\n\tpublic invoiceId?: number | null;\r\n\tpublic cashAdvanceIdList: number[];\r\n\tpublic toBill: number;\r\n\tpublic billableOnline: boolean;\r\n}\r\n\r\nexport enum ActivityStatusEnum\r\n{\r\n\tUnknown = 0,\r\n\tAborted = 1,\r\n\tQuote = 10,\r\n\tContract = 20,\r\n\tTerminated = 50\r\n}\r\n//#endregion","import { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\nimport { PageEnum, puma, Rotator } from \"../../src/rotator\";\r\nimport { Support } from \"../../src/support\";\r\nimport { DocumentItem, FileTypeEnum } from \"../../src/shared/common\";\r\nimport { PaymentData, PaymentDataParameters } from \"./paymentData\";\r\nimport { VrManager } from \"../../src/shared/vrManager\";\r\n\r\nexport class DocumentList\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\tprivate static _documents: DocumentItem[];\r\n\tprivate static _divDocuments: HTMLElement;\r\n\r\n\tstatic initialize()\r\n\t{\r\n\t\tthis._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\t\tRotator.title(\"FATTURE\");\r\n\r\n\t\tSupport.checkLogin(() => this.getDocuments((e) => \r\n\t\t{\r\n\t\t\tthis._documents = e.documents;\r\n\t\t\tthis._divDocuments = vr.div(this._container);\r\n\t\t\tthis.drawDocuments();\r\n\t\t}), null, () => Rotator.page(PageEnum.DocumentList));\r\n\t}\r\n\r\n\tprivate static drawDocuments()\r\n\t{\r\n\t\tpuma(this._divDocuments).empty();\r\n\t\tif (this._documents.length == 0)\r\n\t\t{\r\n\t\t\tlet divNoRecords = vr.div(this._divDocuments, { class: \"vrPatientDivSlot\" });\r\n\t\t\tvr.createLabel({\r\n\t\t\t\ttext: \"Non sono presenti fatture\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\talign: vr.TextAlignEnum.Center\r\n\t\t\t}, divNoRecords);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let document of this._documents)\r\n\t\t\tthis.drawDocumentDetail(document, this._divDocuments);\r\n\t}\r\n\r\n\tstatic drawDocumentDetail(document: DocumentItem, container: HTMLElement): HTMLElement\r\n\t{\r\n\t\tlet divDocument = vr.div(container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\t//#region Icon/Info\r\n\t\tlet divIconInfo = vr.div(divDocument, { css: \"display: flex;\" });\r\n\r\n\t\t//#region Status\r\n\t\tlet statusColor = \"\";\r\n\t\tlet status = \"#000\";\r\n\t\tif (document.paymentDate != null)\r\n\t\t{\r\n\t\t\t//statusColor = \"#00B500\";\r\n\t\t\tstatus = \"Pagata il \" + new Date(document.paymentDate).toItalyShortString();\r\n\t\t}\r\n\t\telse \r\n\t\t{\r\n\t\t\tif (new Date(document.expirationDate) >= new Date())\r\n\t\t\t{\r\n\t\t\t\t//statusColor = \"#a9a9a9\";\r\n\t\t\t\tstatus = \"Da pagare entro il \" + new Date(document.expirationDate).toItalyShortString();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tstatusColor = \"#F40F02\";\r\n\t\t\t\tstatus = \"Scaduta il \" + new Date(document.expirationDate).toItalyShortString();\r\n\t\t\t}\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\tvr.icon(vr.IconClassicLight.FilePdf, divIconInfo, { css: \"font-size: 4em; margin-top: 6px; margin-right: 10px; color: \" + Rotator.color() });\r\n\r\n\t\tlet divInfo = vr.div(divIconInfo);\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"Fattura nr. \" + document.number,\r\n\t\t\tbold: true,\r\n\t\t\twidth: \"100%\"\r\n\t\t}, divInfo);\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"Emessa il \" + new Date(document.date).toItalyShortString(),\r\n\t\t\twidth: \"100%\"\r\n\t\t}, divInfo);\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: status,\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcolorSettings: { textColor: statusColor }\r\n\t\t}, divInfo);\r\n\r\n\t\tif (Rotator.configuration().appShowPlantInFiles)\r\n\t\t{\r\n\t\t\tvr.createLabel(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: document.plantCompanyName,\r\n\t\t\t\t\tnoBr: true,\r\n\t\t\t\t\twidth: \"100%\"\r\n\t\t\t\t}, divInfo);\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Buttons\r\n\t\tlet divButtons = vr.div(divDocument, { css: \"margin-top: 10px; display: flex; justify-content: space-between;\" });\r\n\t\tlet downloadButton = vr.createButton({\r\n\t\t\ttext: \"Scarica\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\tcssContainer: \"width: 100%;\",\r\n\t\t\tonClick: (e) => Support.downloadDocument(document.documentId, document.number + \"_\" + new Date(document.date).toItalyShortString() + \".pdf\")\r\n\t\t}, divButtons);\r\n\r\n\t\tlet showButton = vr.createButton({\r\n\t\t\ttext: \"Visualizza\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\tcssContainer: \"width: 100%; margin-left: 5px;\",\r\n\t\t\tonClick: (e) =>\r\n\t\t\t{\r\n\t\t\t\tSupport.getDocumentData(document.documentId, (base64) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tpdfViewer.content(base64);\r\n\t\t\t\t\tpdfViewer.open();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}, divButtons);\r\n\r\n\t\tlet pdfViewer = vr.createPdfViewer({\r\n\t\t\tpopup: { maximize: true },\r\n\t\t\tbase64: true\r\n\t\t});\r\n\r\n\t\tif (Rotator.isMobile())\r\n\t\t{\r\n\t\t\tdownloadButton.show();\r\n\t\t\tshowButton.hide();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tdownloadButton.show();\r\n\t\t\tshowButton.show();\r\n\t\t}\r\n\r\n\t\tlet paypalClientId = (Rotator.configuration().appPaypalSandboxMode) ? Rotator.configuration().appPaypalClientIdSandbox : Rotator.configuration().appPaypalClientId;\r\n\t\tlet paypalClientSecret = (Rotator.configuration().appPaypalSandboxMode) ? Rotator.configuration().appPaypalClientSecretSandbox : Rotator.configuration().appPaypalClientSecret;\r\n\r\n\t\tlet hasPaypal = true;\r\n\t\tif (paypalClientId == null || paypalClientId == \"\" || paypalClientSecret == null || paypalClientSecret == \"\")\r\n\t\t\thasPaypal = false;\r\n\r\n\t\tlet payButton = vr.createButton({\r\n\t\t\ttext: \"Paga\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\tcssContainer: \"width: 100%; margin-left: 5px;\",\r\n\t\t\tclass: \"vrButtonPayDocument vrButtonPatient\",\r\n\t\t\tvisible: hasPaypal && (document.paymentDate == null && (document.expirationDateRows == null || document.expirationDateRows.length <= 1)),\r\n\t\t\tonClick: (e) =>\r\n\t\t\t{\r\n\t\t\t\tlet parameters = new PaymentDataParameters();\r\n\t\t\t\tparameters.fromDocumentPage = true;\r\n\t\t\t\tparameters.price = document.grossPrice;\r\n\t\t\t\tparameters.itemName = document.number;\r\n\t\t\t\tparameters.callbackAfterPayment = (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tPaymentData.setDocumentPayment(document.documentId, (response) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tVrManager.notify(\"Pagamento effettuato con successo!\");\r\n\t\t\t\t\t\tRotator.page(PageEnum.DocumentList);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tRotator.page(PageEnum.PaymentData, parameters);\r\n\t\t\t}\r\n\t\t}, divButtons);\r\n\t\t//#endregion\r\n\r\n\t\treturn divDocument;\r\n\t}\r\n\r\n\tstatic getDocuments(callback?: (e: GetDocumentsResponse) => void)\r\n\t{\r\n\t\tlet request = new GetDocumentsRequest();\r\n\t\trequest.plantIdList = [Rotator.configuration().plant.id];\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: GetDocumentsResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(response);\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n}\r\n\r\n//#region Classes\r\nclass GetDocumentsRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/GetDocuments\";\r\n\tpublic plantIdList: number[];\r\n}\r\n\r\nclass GetDocumentsResponse extends WebApiResponseBase\r\n{\r\n\tpublic documents: DocumentItem[];\r\n}\r\n//#endregion","import { WebApiRequestBase, WebApiResponseBase } from \"../shared/webApi\";\r\nimport { PageEnum, puma, Rotator } from \"../rotator\";\r\nimport { Support } from \"../support\";\r\nimport { FileItem, FileTypeEnum, ReportItem } from \"../shared/common\";\r\n\r\nexport class FileList\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\tprivate static _files: FileItem[];\r\n\tprivate static _divFiles: HTMLElement;\r\n\r\n\tstatic initialize()\r\n\t{\r\n\t\tthis._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\t\tRotator.title(\"FILE\");\r\n\r\n\t\tSupport.checkLogin(() => this.getFiles((e) => \r\n\t\t{\r\n\t\t\tif (Rotator.configuration().appUploadFiles)\r\n\t\t\t{\r\n\t\t\t\tvr.createUpload({\r\n\t\t\t\t\tuploadButton: \"Carica file...\",\r\n\t\t\t\t\tfileList: false,\r\n\t\t\t\t\tprogressBar: true,\r\n\t\t\t\t\tmultiple: true,\r\n\t\t\t\t\tdropArea: !Rotator.isMobile(),\r\n\t\t\t\t\tcssContainer: \"margin-bottom: 5px;\",\r\n\t\t\t\t\tvalidation: (Rotator.configuration().appUploadFilesExtensions != null && Rotator.configuration().appUploadFilesExtensions != \"\") ? {\r\n\t\t\t\t\t\textensions: Rotator.configuration().appUploadFilesExtensions.split(\",\"),\r\n\t\t\t\t\t\tcheckMimeType: true\r\n\t\t\t\t\t} : undefined,\r\n\t\t\t\t\twebApiSettings:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\turl: Rotator.patientUrl() + \"/api/PrivateAreaWebApi/UploadFile\",\r\n\t\t\t\t\t\tparameters: (e) =>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn [\r\n\t\t\t\t\t\t\t\t{ key: \"sessionId\", value: Rotator.setCookieSession() },\r\n\t\t\t\t\t\t\t\t{ key: \"mimeType\", value: e.file.type },\r\n\t\t\t\t\t\t\t\t{ key: \"fileName\", value: e.file.name }\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonSuccess: (e) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.getFiles((e) => \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis._files = e.files;\r\n\t\t\t\t\t\t\tthis.drawFiles();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}, this._container);\r\n\t\t\t}\r\n\r\n\t\t\tthis._files = e.files;\r\n\t\t\tthis._divFiles = vr.div(this._container);\r\n\t\t\tthis.drawFiles();\r\n\t\t}), null, () => Rotator.page(PageEnum.FileList));\r\n\t}\r\n\r\n\tprivate static drawFiles()\r\n\t{\r\n\t\tpuma(this._divFiles).empty();\r\n\t\tif (this._files.length == 0)\r\n\t\t{\r\n\t\t\tlet divNoRecords = vr.div(this._divFiles, { class: \"vrPatientDivSlot\", css: \"margin-top: 5px;\" });\r\n\t\t\tvr.createLabel({\r\n\t\t\t\ttext: \"Non sono presenti file\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\talign: vr.TextAlignEnum.Center\r\n\t\t\t}, divNoRecords);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let file of this._files)\r\n\t\t\tthis.drawFileDetail(file, this._divFiles);\r\n\t}\r\n\r\n\tstatic drawFileDetail(file: FileItem, container: HTMLElement): HTMLElement\r\n\t{\r\n\t\tlet divFile = vr.div(container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\t//#region Icon/Info\r\n\t\tlet divIconInfo = vr.div(divFile, { css: \"display: flex;\" });\r\n\r\n\t\tlet iconInfo = this.getFileInfo(file.mimeType);\r\n\t\tvr.icon(iconInfo.icon, divIconInfo, { css: \"font-size: 4em; margin-top: 6px; margin-right: 10px; color: \" + iconInfo.color + \";\" });\r\n\r\n\t\tlet divInfo = vr.div(divIconInfo, { css: \"text-align: left; width: 100%;\" });\r\n\t\tvr.createLabel({\r\n\t\t\ttext: file.fileName,\r\n\t\t\tbold: true,\r\n\t\t\tcss: \"text-overflow: ellipsis; overflow: hidden; width: 100%;\",\r\n\t\t\tcssContainer: \"width: Calc(100% - 55px);\"\r\n\t\t}, divInfo);\r\n\r\n\t\tif (file.uploadDate != null)\r\n\t\t{\r\n\t\t\tlet uploadedByIcon = (file.uploadedByPatient) ? vr.IconClassicLight.Upload : vr.IconClassicLight.Download;\r\n\t\t\tvr.createLabel(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: \" - \" + new Date(file.uploadDate).toItalyShortString() + \" - \" + new Date(file.uploadDate).toTimeString(),\r\n\t\t\t\t\tnoBr: true,\r\n\t\t\t\t\twidth: \"100%\"\r\n\t\t\t\t}, divInfo);\r\n\t\t}\r\n\r\n\t\tif (Rotator.configuration().appShowPlantInFiles)\r\n\t\t{\r\n\t\t\tvr.createLabel(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: file.plantCompanyName,\r\n\t\t\t\t\tnoBr: true,\r\n\t\t\t\t\twidth: \"100%\"\r\n\t\t\t\t}, divInfo);\r\n\t\t}\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: vrshared.UtilityManager().formatStorageSize(file.size),\r\n\t\t\twidth: \"100%\"\r\n\t\t}, divInfo);\r\n\r\n\t\tif (file.representerOfName != null && file.representerOfName.length > 0)\r\n\t\t{\r\n\t\t\tvr.createLabel(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: \"File di \" + file.representerOfName,\r\n\t\t\t\t\tnoBr: true,\r\n\t\t\t\t\twidth: \"100%\"\r\n\t\t\t\t}, divInfo);\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Buttons\r\n\t\tlet divButtons = vr.div(divFile, { css: \"margin-top: 10px; display: flex; justify-content: space-between;\" });\r\n\t\tlet downloadButton = vr.createButton({\r\n\t\t\ttext: \"Scarica\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\tcssContainer: \"width: 100%;\",\r\n\t\t\tonClick: (e) => Support.downloadFile(file.id, file.fileName, file.mimeType as FileTypeEnum)\r\n\t\t}, divButtons);\r\n\r\n\t\tlet showButton = vr.createButton({\r\n\t\t\ttext: \"Visualizza\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\tcssContainer: \"width: 100%; margin-left: 5px;\",\r\n\t\t\tonClick: (e) =>\r\n\t\t\t{\r\n\t\t\t\tSupport.getFileData(file.id, (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (file.mimeType == FileTypeEnum.Pdf)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpdfViewer.content(e.base64);\r\n\t\t\t\t\t\tpdfViewer.open();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tvrshared.UtilityManager().previewFile(e.base64, file.mimeType as FileTypeEnum);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}, divButtons);\r\n\r\n\t\tlet pdfViewer = vr.createPdfViewer({\r\n\t\t\tpopup: { maximize: true },\r\n\t\t\tbase64: true\r\n\t\t});\r\n\r\n\t\tif (Rotator.isMobile())\r\n\t\t{\r\n\t\t\tdownloadButton.show();\r\n\t\t\tshowButton.hide();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tdownloadButton.show();\r\n\t\t\tshowButton.show();\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\treturn divFile;\r\n\t}\r\n\r\n\tstatic getFiles(callback?: (e: GetFilesResponse) => void)\r\n\t{\r\n\t\tlet request = new GetFilesRequest();\r\n\t\trequest.plantIdList = [Rotator.configuration().plant.id];\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: GetFilesResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(response);\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic getFileInfo(mimeType: string)\r\n\t{\r\n\t\t//#region Icon\r\n\t\tlet icon = vr.IconClassicLight.FilePdf;\r\n\t\tlet color = \"coral\";\r\n\t\tswitch (mimeType)\r\n\t\t{\r\n\t\t\tcase \"application/pdf\":\r\n\t\t\t\t{\r\n\t\t\t\t\ticon = vr.IconClassicLight.FilePdf;\r\n\t\t\t\t\tcolor = \"coral\";\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"image/png\":\r\n\t\t\tcase \"image/jpeg\":\r\n\t\t\t\t{\r\n\t\t\t\t\ticon = vr.IconClassicLight.FileImage;\r\n\t\t\t\t\tcolor = \"#adbd29\";\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"application/msword\":\r\n\t\t\tcase \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":\r\n\t\t\t\t{\r\n\t\t\t\t\ticon = vr.IconClassicLight.FileWord;\r\n\t\t\t\t\tcolor = \"#01A6F0\";\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"application/vnd.ms-excel\":\r\n\t\t\tcase \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":\r\n\t\t\t\t{\r\n\t\t\t\t\ticon = vr.IconClassicLight.FileExcel;\r\n\t\t\t\t\tcolor = \"#1D6F42\";\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"text/plain\":\r\n\t\t\t\t{\r\n\t\t\t\t\ticon = vr.IconClassicLight.FileLines;\r\n\t\t\t\t\tcolor = \"#bdbdbd\";\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"application/zip\":\r\n\t\t\tcase \"application/x-zip-compressed\":\r\n\t\t\tcase \"application/x-compressed\":\r\n\t\t\tcase \"multipart/x-zip\":\r\n\t\t\t\t{\r\n\t\t\t\t\ticon = vr.IconClassicLight.FileZipper;\r\n\t\t\t\t\tcolor = \"yellow\";\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"video/mp4\":\r\n\t\t\tcase \"video/3gpp\":\r\n\t\t\tcase \"video/x-flv\":\r\n\t\t\tcase \"video/quicktime\":\r\n\t\t\tcase \"video/x-msvideo\":\r\n\t\t\tcase \"video/x-ms-wmv\":\r\n\t\t\t\t{\r\n\t\t\t\t\ticon = vr.IconClassicLight.FileVideo;\r\n\t\t\t\t\tcolor = \"purple\";\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\treturn { icon: icon, color: color };\r\n\t}\r\n}\r\n\r\n//#region Classes\r\nclass GetFilesRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/GetFiles\";\r\n\tpublic plantIdList: number[];\r\n}\r\n\r\nclass GetFilesResponse extends WebApiResponseBase\r\n{\r\n\tpublic files: FileItem[];\r\n}\r\n//#endregion","import { Support } from \"../../src/support\";\r\nimport { AppLoginModeEnum, puma, Rotator } from \"../../src/rotator\";\r\nimport { MandatoryFieldInfo, OnlineBookingMandatoryFieldTypeEnum, Register } from \"../../src/login/register\";\r\nimport { Confirmation2 } from \"../../src/booking/confirmation2\";\r\nimport { GetSubjectResponse, Profile } from \"./profile\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\nimport { BirthAddressInfo } from \"../../src/shared/common\";\r\nimport { VrManager } from \"../../src/shared/vrManager\";\r\n\r\nexport class PaymentData\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\tprivate static _fields: MandatoryFieldInfo[];\r\n\tprivate static _subjectId: number;\r\n\tprivate static _subjectDisplayName: string;\r\n\tprivate static _appointmentId?: number | null;\r\n\tprivate static _needsToAddStampRow: boolean;\r\n\r\n\tprivate static _lblBookingFor: vr.Label;\r\n\tprivate static _btnChangeBookingFor: vr.Button;\r\n\r\n\tprivate static _txtName: vr.TextBox;\r\n\tprivate static _txtSurname: vr.TextBox;\r\n\tprivate static _txtEmail: vr.TextBox;\r\n\tprivate static _txtPhoneNumber: vr.TextBox;\r\n\tprivate static _dtpBirthdate: vr.DatePicker;\r\n\tprivate static _txtFiscalCode: vr.TextBox;\r\n\tprivate static _txtLandline: vr.TextBox;\r\n\tprivate static _btgGender: vr.ButtonGroup;\r\n\r\n\tprivate static _cmbBirthCity: vr.ComboBox;\r\n\tprivate static _swtItalianForeignBirthCity: vr.Switch;\r\n\tprivate static _cmbForeignBirthCityCountry: vr.ComboBox;\r\n\tprivate static _txtForeignBirthCity: vr.TextBox;\r\n\r\n\tprivate static _swtItalianForeignResidenceAddress: vr.Switch;\r\n\tprivate static _txtItalyResidenceAddress: vr.TextBox;\r\n\tprivate static _cmbItalyResidenceCity: vr.ComboBox;\r\n\tprivate static _txtItalyResidenceProvince: vr.TextBox;\r\n\tprivate static _cmbItalyResidenceZip: vr.ComboBox;\r\n\tprivate static _txtOutItalyResidenceAddress: vr.TextBox;\r\n\tprivate static _cmbOutItalyResidenceCountry: vr.ComboBox;\r\n\r\n\tprivate static _btnConfirmData: vr.Button;\r\n\tprivate static _divAppointmentCreated: HTMLElement;\r\n\tprivate static _btnPaypalButton: vr.PaypalButton;\r\n\tprivate static _parameters: PaymentDataParameters;\r\n\tstatic _getSubjectResponse: GetSubjectResponse;\r\n\r\n\tstatic initialize(parameters: PaymentDataParameters)\r\n\t{\r\n\t\tthis._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\t\tRotator.title(\"DATI PAGAMENTO\");\r\n\r\n\t\tthis._parameters = parameters;\r\n\t\tthis._appointmentId = (parameters != null) ? parameters.appointmentId : null;\r\n\r\n\t\tSupport.checkLogin(() => \r\n\t\t{\r\n\t\t\tRegister.getMandatoryFields((e) =>\r\n\t\t\t{\r\n\t\t\t\tthis._fields = e.fields;\r\n\r\n\t\t\t\tvr.createLabel({\r\n\t\t\t\t\ttext: \"Verifica i dati e prosegui con il pagamento\",\r\n\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\talign: vr.TextAlignEnum.Center,\r\n\t\t\t\t\tcssContainer: \"margin-bottom: 10px;\"\r\n\t\t\t\t}, this._container);\r\n\r\n\t\t\t\t//#region Booking for\r\n\t\t\t\tlet subjectId: number = 0;\r\n\t\t\t\tif (Rotator.bookingParameters().bookingForInfo != null && Rotator.bookingParameters().bookingForInfo!.id != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tsubjectId = Rotator.bookingParameters().bookingForInfo!.id;\r\n\t\t\t\t\tlet subjectName = Rotator.bookingParameters().bookingForInfo!.displayName;\r\n\r\n\t\t\t\t\tlet divBookingFor = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"position: relative; padding-top: 5px; margin-bottom: 10px;\" });\r\n\t\t\t\t\tthis._lblBookingFor = vr.createLabel({\r\n\t\t\t\t\t\ttext: \"Fattura intestata a
    \" + subjectName + \"\",\r\n\t\t\t\t\t\tnoBr: 2,\r\n\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\talign: vr.TextAlignEnum.Center\r\n\t\t\t\t\t}, divBookingFor)\r\n\r\n\t\t\t\t\tthis._btnChangeBookingFor = vr.createButton(\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttext: \"Cambia destinatario: Me stesso\",\r\n\t\t\t\t\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\t\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\t\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\tclass: \"vrButtonBookingChangeSubjectAppointment vrButtonPatient\",\r\n\t\t\t\t\t\t\ttag: \"bookedFor\",\r\n\t\t\t\t\t\t\tonClick: (e) => \r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.clearControls();\r\n\t\t\t\t\t\t\t\tif (e.sender.tag() == \"bookedFor\")\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\te.sender.tag(\"mine\");\r\n\t\t\t\t\t\t\t\t\tthis._lblBookingFor.value(\"Fattura intestata a Me stesso\");\r\n\t\t\t\t\t\t\t\t\tthis._btnChangeBookingFor.text(\"Cambia destinatario: \" + subjectName);\r\n\r\n\t\t\t\t\t\t\t\t\tthis._subjectId = 0;\r\n\t\t\t\t\t\t\t\t\tthis.getSubject();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\te.sender.tag(\"bookedFor\");\r\n\t\t\t\t\t\t\t\t\tthis._lblBookingFor.value(\"Fattura intestata a
    \" + subjectName + \"\");\r\n\t\t\t\t\t\t\t\t\tthis._btnChangeBookingFor.text(\"Cambia destinatario: Me stesso\");\r\n\r\n\t\t\t\t\t\t\t\t\tthis._subjectId = subjectId;\r\n\t\t\t\t\t\t\t\t\tthis.getSubject();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, divBookingFor);\r\n\t\t\t\t}\r\n\t\t\t\t//#endregion\r\n\r\n\t\t\t\tthis.createControls();\r\n\r\n\t\t\t\tthis._subjectId = subjectId;\r\n\t\t\t\tthis.getSubject();\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate static createControls()\r\n\t{\r\n\t\t//#region Info\r\n\t\tlet divInfo = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\tthis._txtName = vr.createTextBox({\r\n\t\t\tlabel: \"Nome\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divInfo);\r\n\r\n\t\tthis._txtSurname = vr.createTextBox({\r\n\t\t\tlabel: \"Cognome\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divInfo);\r\n\r\n\t\tthis._txtEmail = vr.createTextBox({\r\n\t\t\tlabel: \"Email\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divInfo);\r\n\t\tRegister.manageFields(this._fields, OnlineBookingMandatoryFieldTypeEnum.EMail, this._txtEmail);\r\n\r\n\t\tthis._txtPhoneNumber = vr.createTextBox({\r\n\t\t\tlabel: \"Cellulare\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divInfo);\r\n\r\n\t\tthis._txtLandline = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Telefono fisso\",\r\n\t\t\t\tplaceholder: \"Telefono fisso\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divInfo);\r\n\t\tRegister.manageFields(this._fields, OnlineBookingMandatoryFieldTypeEnum.Landline, this._txtLandline);\r\n\r\n\t\tthis._btgGender = vr.createButtonGroup(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Sesso\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n\t\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\t\t//selectedColor: Rotator.color(),\r\n\t\t\t\titems:\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t{ text: \"Maschio\", value: \"M\" },\r\n\t\t\t\t\t\t{ text: \"Femmina\", value: \"F\", selected: true }\r\n\t\t\t\t\t],\r\n\t\t\t\tselectionMode: vr.SelectionModeEnum.Single\r\n\t\t\t}, divInfo);\r\n\t\t//#endregion\r\n\r\n\t\t//#region BirthCity\r\n\t\tlet divBirthInfo = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\tthis._dtpBirthdate = Support.createDatePicker(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Data di nascita\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divBirthInfo);\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"Città di nascita\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t}, divBirthInfo);\r\n\r\n\t\tthis._swtItalianForeignBirthCity = vr.createSwitch({\r\n\t\t\tlabelOff: \"Italia\",\r\n\t\t\tlabelOn: \"Fuori Italia\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-bottom: 5px;\",\r\n\t\t\tonChange: (e) => \r\n\t\t\t{\r\n\t\t\t\tif (e.checked)\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyBirthCity).hide();\r\n\t\t\t\t\tpuma(divForeignBirthCity).show();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyBirthCity).show();\r\n\t\t\t\t\tpuma(divForeignBirthCity).hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, divBirthInfo);\r\n\r\n\t\tlet divItalyBirthCity = vr.div(divBirthInfo);\r\n\t\tthis._cmbBirthCity = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Città\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\",\r\n\t\t\t\twebService: {\r\n\t\t\t\t\tmethod: Rotator.patientUrl() + \"/api/UtilityWebApi/GetAllCities\",\r\n\t\t\t\t\titemsPropertyName: \"cities\",\r\n\t\t\t\t\ttypedTextPropertyName: \"searchText\",\r\n\t\t\t\t\tparameters: () =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tonlyActive: false\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, divItalyBirthCity);\r\n\r\n\t\tlet divForeignBirthCity = vr.div(divBirthInfo, { css: \"display: none;\" });\r\n\t\tthis._cmbForeignBirthCityCountry = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Nazione\",\r\n\t\t\t\twidth: \"100%\"\r\n\t\t\t}, divForeignBirthCity);\r\n\r\n\t\tthis._txtForeignBirthCity = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Città\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\"\r\n\t\t\t}, divForeignBirthCity);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Fiscal code\r\n\t\tlet divFiscalCode = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\t\tthis._txtFiscalCode = vr.createTextBox({\r\n\t\t\tlabel: \"Codice fiscale\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n\t\t\tinputMode: vr.TextTransformModeEnum.Uppercase,\r\n\t\t\tonBlur: (e) =>\r\n\t\t\t{\r\n\t\t\t\tProfile.checkFiscalCode(this._txtFiscalCode.value(), this._cmbForeignBirthCityCountry.value(), (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!e.isValid)\r\n\t\t\t\t\t\tthis._txtFiscalCode.error();\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthis._txtFiscalCode.hideError();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}, divFiscalCode);\r\n\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Calcola codice\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 10px;\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tonClick: (e) =>\r\n\t\t\t{\r\n\t\t\t\tlet birthAddressInfo = null;\r\n\t\t\t\tif (!this._swtItalianForeignBirthCity.checked())\r\n\t\t\t\t{\r\n\t\t\t\t\t//#region Italian\r\n\t\t\t\t\tif (this._cmbBirthCity.value() != null && this._cmbBirthCity.value() != \"\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbirthAddressInfo = new BirthAddressInfo();\r\n\t\t\t\t\t\tbirthAddressInfo.istatCode = this._cmbBirthCity.value()!;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//#endregion\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t//#region Foreign\r\n\t\t\t\t\tlet countrySelected = this._cmbForeignBirthCityCountry.getSelectedItem();\r\n\t\t\t\t\tif (countrySelected != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbirthAddressInfo = new BirthAddressInfo();\r\n\t\t\t\t\t\tbirthAddressInfo.countryCode = this._cmbForeignBirthCityCountry.value()!;\r\n\t\t\t\t\t\tbirthAddressInfo.address = this._txtForeignBirthCity.value();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//#endregion\r\n\t\t\t\t}\r\n\r\n\t\t\t\tProfile.computeFiscalCode(this._txtName.value(), this._txtSurname.value(), this._btgGender.getSelectedValues()[0], this._dtpBirthdate.value()!, birthAddressInfo,\r\n\t\t\t\t\t(e) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (e.invalidFieldsMessage != null && e.invalidFieldsMessage != \"\")\r\n\t\t\t\t\t\t\tVrManager.notify(e.invalidFieldsMessage, \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis._txtFiscalCode.value(e.fiscalCode);\r\n\t\t\t\t\t\t\tthis._txtFiscalCode.hideError();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}, divFiscalCode);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Address\r\n\t\tlet divResidence = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"margin-top: 10px;\" });\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"Indirizzo di residenza\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t}, divResidence);\r\n\r\n\t\tthis._swtItalianForeignResidenceAddress = vr.createSwitch({\r\n\t\t\tlabelOff: \"Italia\",\r\n\t\t\tlabelOn: \"Fuori Italia\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-bottom: 5px;\",\r\n\t\t\tonChange: (e) => \r\n\t\t\t{\r\n\t\t\t\tif (e.checked)\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyResidence).hide();\r\n\t\t\t\t\tpuma(divOutItalyResidence).show();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyResidence).show();\r\n\t\t\t\t\tpuma(divOutItalyResidence).hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, divResidence);\r\n\r\n\t\tlet divItalyResidence = vr.div(divResidence);\r\n\t\tthis._txtItalyResidenceAddress = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Via\",\r\n\t\t\t\twidth: \"100%\"\r\n\t\t\t}, divItalyResidence);\r\n\r\n\t\tthis._cmbItalyResidenceCity = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Comune\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\",\r\n\t\t\t\twebService: {\r\n\t\t\t\t\tmethod: Rotator.patientUrl() + \"/api/UtilityWebApi/GetAllCities\",\r\n\t\t\t\t\titemsPropertyName: \"cities\",\r\n\t\t\t\t\ttypedTextPropertyName: \"searchText\",\r\n\t\t\t\t\tparameters: () =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tonlyActive: true\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tonAfterChange: (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tRegister.calcProvinceAndZipByCity(e.value, (e) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis._txtItalyResidenceProvince.clear();\r\n\t\t\t\t\t\tthis._cmbItalyResidenceZip.clearItems();\r\n\r\n\t\t\t\t\t\tthis._txtItalyResidenceProvince.value(e.city.provinceAbbreviation);\r\n\t\t\t\t\t\tthis._cmbItalyResidenceZip.items(e.city.zipCodes.map(k => { return { text: k.zipCode, value: k.zipCode } }));\r\n\t\t\t\t\t\tthis._cmbItalyResidenceZip.value(e.city.zipCodes.first().zipCode);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}, divItalyResidence);\r\n\r\n\t\tthis._txtItalyResidenceProvince = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Provincia\",\r\n\t\t\t\tenable: false,\r\n\t\t\t\talign: vr.TextAlignEnum.Center,\r\n\t\t\t\twidth: \"Calc(50% - 10px)\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\"\r\n\t\t\t}, divItalyResidence);\r\n\r\n\t\tthis._cmbItalyResidenceZip = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"CAP\",\r\n\t\t\t\tplaceholder: \"\",\r\n\t\t\t\twidth: \"50%\"\r\n\t\t\t}, divItalyResidence);\r\n\r\n\t\tlet divOutItalyResidence = vr.div(divResidence, { css: \"display: none;\" });\r\n\t\tthis._txtOutItalyResidenceAddress = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Indirizzo\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\"\r\n\t\t\t}, divOutItalyResidence);\r\n\r\n\t\tthis._cmbOutItalyResidenceCountry = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Nazione\",\r\n\t\t\t\twidth: \"100%\"\r\n\t\t\t}, divOutItalyResidence);\r\n\t\t//#endregion\r\n\r\n\t\tthis._btnConfirmData = vr.createButton({\r\n\t\t\ttext: \"Verifica e conferma i dati\",\r\n\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tcssContainer: \"margin-bottom: 30px;\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tclass: \"vrButtonConfirmData vrButtonPatient\",\r\n\t\t\tonClick: (e) => this.checkAndManageData(e)\r\n\t\t}, this._container)\r\n\t}\r\n\r\n\tprivate static checkAndManageData(e: any)\r\n\t{\r\n\t\t//#region Check\r\n\t\tlet fieldFiscalCodeForIndex = this._fields.filter(k => k.fieldType == OnlineBookingMandatoryFieldTypeEnum.FiscalCode)[0];\r\n\t\tlet fieldFiscalCode = this._fields[this._fields.indexOf(fieldFiscalCodeForIndex)];\r\n\t\tfieldFiscalCode.isMandatory = true;\r\n\r\n\t\tlet fieldResidenceAddressForIndex = this._fields.filter(k => k.fieldType == OnlineBookingMandatoryFieldTypeEnum.ResidenceAddress)[0];\r\n\t\tlet fieldResidenceAddress = this._fields[this._fields.indexOf(fieldResidenceAddressForIndex)];\r\n\t\tfieldResidenceAddress.isMandatory = true;\r\n\r\n\t\tlet error = Register.checkMandatoryFields(this._fields, this._txtFiscalCode, this._dtpBirthdate, this._swtItalianForeignBirthCity,\r\n\t\t\tthis._cmbBirthCity, this._cmbForeignBirthCityCountry, this._txtForeignBirthCity, this._btgGender, this._swtItalianForeignResidenceAddress,\r\n\t\t\tthis._txtItalyResidenceAddress, this._cmbItalyResidenceCity, this._txtItalyResidenceProvince, this._cmbItalyResidenceZip,\r\n\t\t\tthis._txtOutItalyResidenceAddress, this._cmbOutItalyResidenceCountry, this._txtLandline);\r\n\r\n\t\tlet fieldEmail = this._fields.filter(k => k.fieldType == OnlineBookingMandatoryFieldTypeEnum.EMail)[0];\r\n\t\tif (fieldEmail != null && this._txtEmail.isEmpty() && fieldEmail.isMandatory)\r\n\t\t{\r\n\t\t\tif (!(Rotator.bookingParameters().activityType.doNotRequireLogin || Rotator.configuration().appLoginRequired == AppLoginModeEnum.Never))\r\n\t\t\t{\r\n\t\t\t\tVrManager.notify(\"Email obbligatoria\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\t\terror = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._txtName.isEmpty())\r\n\t\t{\r\n\t\t\tVrManager.notify(\"Nome obbligatorio\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\terror = true;\r\n\t\t}\r\n\r\n\t\tif (this._txtSurname.isEmpty())\r\n\t\t{\r\n\t\t\tVrManager.notify(\"Cognome obbligatorio\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\terror = true;\r\n\t\t}\r\n\r\n\t\tif (error)\r\n\t\t{\r\n\t\t\te.preventDefault();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\tvrshared.LoaderManager().show(Rotator.container());\r\n\t\twindow.setTimeout(() =>\r\n\t\t{\r\n\t\t\tProfile.updateSubject(\r\n\t\t\t\t{\r\n\t\t\t\t\ttxtName: this._txtName,\r\n\t\t\t\t\ttxtSurname: this._txtSurname,\r\n\t\t\t\t\ttxtEmail: this._txtEmail,\r\n\t\t\t\t\tbtgGender: this._btgGender,\r\n\t\t\t\t\tcmbBirthCity: this._cmbBirthCity,\r\n\t\t\t\t\tcmbForeignBirthCityCountry: this._cmbForeignBirthCityCountry,\r\n\t\t\t\t\tcmbItalyResidenceCity: this._cmbItalyResidenceCity,\r\n\t\t\t\t\ttxtItalyResidenceProvince: this._txtItalyResidenceProvince,\r\n\t\t\t\t\tcmbItalyResidenceZip: this._cmbItalyResidenceZip,\r\n\t\t\t\t\tcmbOutItalyResidenceCountry: this._cmbOutItalyResidenceCountry,\r\n\t\t\t\t\tdtpBirthdate: this._dtpBirthdate,\r\n\t\t\t\t\tswtItalianForeignBirthCity: this._swtItalianForeignBirthCity,\r\n\t\t\t\t\tswtItalianForeignResidenceAddress: this._swtItalianForeignResidenceAddress,\r\n\t\t\t\t\ttxtFiscalCode: this._txtFiscalCode,\r\n\t\t\t\t\ttxtForeignBirthCity: this._txtForeignBirthCity,\r\n\t\t\t\t\ttxtItalyResidenceAddress: this._txtItalyResidenceAddress,\r\n\t\t\t\t\ttxtLandline: this._txtLandline,\r\n\t\t\t\t\ttxtOutItalyResidenceAddress: this._txtOutItalyResidenceAddress,\r\n\t\t\t\t\ttxtPhoneNumber: this._txtPhoneNumber\r\n\t\t\t\t}, this._subjectId, false, false, this._fields,\r\n\t\t\t\t(response) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tProfile.getSubject(null,\r\n\t\t\t\t\t\t(response) =>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis._getSubjectResponse = response;\r\n\t\t\t\t\t\t\tvrshared.LoaderManager().hide();\r\n\r\n\t\t\t\t\t\t\tif (this._appointmentId == null && !this._parameters.fromDocumentPage)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tConfirmation2.createAppointment((e2) =>\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tvrshared.LoaderManager().hide();\r\n\t\t\t\t\t\t\t\t\tthis._appointmentId = e2.appointmentId;\r\n\t\t\t\t\t\t\t\t\tthis._needsToAddStampRow = e2.needsToAddStampRow;\r\n\r\n\t\t\t\t\t\t\t\t\tpuma(this._container).empty();\r\n\r\n\t\t\t\t\t\t\t\t\tthis._divAppointmentCreated = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\t\t\t\t\t\t\t\t\tvr.createLabel({\r\n\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\t\t\t\t\t\t\talign: vr.TextAlignEnum.Center,\r\n\t\t\t\t\t\t\t\t\t\ttext: (String.isNotNullOrEmpty(Rotator.configuration().appMessagePrePayment)) ? Rotator.configuration().appMessagePrePayment\r\n\t\t\t\t\t\t\t\t\t\t\t: \"L'appuntamento è stato creato, e ora è possibile procedere con il pagamento online premendo sul pulsante 'PayPal' (anche per pagare con carta di credito).

    Potrebbe essere necessario aspettare fino ad un minuto, quindi attendere la notifica di avvenuto pagamento e non lasciare o aggiornare la pagina.\"\r\n\t\t\t\t\t\t\t\t\t}, this._divAppointmentCreated);\r\n\r\n\t\t\t\t\t\t\t\t\tthis.createPaypalButton();\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t(error) =>\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t// let fromHours = String(Rotator.confirmationParameters()!.timeslot.hourFromDisplay.hours).padStart(2, \"0\");\r\n\t\t\t\t\t\t\t\t\t\t// let fromMinutes = String(Rotator.confirmationParameters()!.timeslot.hourFromDisplay.minutes).padStart(2, \"0\");\r\n\t\t\t\t\t\t\t\t\t\t// let date = new Date(Rotator.confirmationParameters()!.timeslot.day).toItalyLongString();\r\n\r\n\t\t\t\t\t\t\t\t\t\t// Support.sendErrorEmail(`Si è verificato un errore durante la prenotazione del seguente appuntamento:
    \r\n\t\t\t\t\t\t\t\t\t\t// \tUrlCliente: ${Rotator.webComponentParameters()[0].url}
    \t\r\n\t\t\t\t\t\t\t\t\t\t// \tProfessionista: ${Rotator.confirmationParameters()!.resource!.name}
    \r\n\t\t\t\t\t\t\t\t\t\t// \tUtente: ${this._subjectDisplayName}
    \r\n\t\t\t\t\t\t\t\t\t\t// \tPrestazione: ${Rotator.bookingParameters().activityType.onlineBookingName}
    \r\n\t\t\t\t\t\t\t\t\t\t// \tSede: ${Rotator.confirmationParameters()!.workplace.name}
    \r\n\t\t\t\t\t\t\t\t\t\t// \tData: ${date + \" alle ore \" + fromHours + \":\" + fromMinutes}\r\n\t\t\t\t\t\t\t\t\t\t// \t${(String.isNotNullOrEmpty(Rotator.configuration().appName) ? \"
    Nome app: \" + Rotator.configuration().appName : \"\")}\r\n\r\n\t\t\t\t\t\t\t\t\t\t// \t

    \r\n\t\t\t\t\t\t\t\t\t\t// \tMessage: ${error.message}
    \r\n\t\t\t\t\t\t\t\t\t\t// \tStackTrace: ${error.stackTrace}
    \r\n\t\t\t\t\t\t\t\t\t\t// `);\r\n\r\n\t\t\t\t\t\t\t\t\t\tvrshared.LoaderManager().hide();\r\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\t\t\t}, false);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tpuma(this._container).empty();\r\n\r\n\t\t\t\t\t\t\t\tvr.createLabel({\r\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\t\t\t\t\t\talign: vr.TextAlignEnum.Center,\r\n\t\t\t\t\t\t\t\t\ttext: \"I dati sono stati confermati, e quindi è ora possibile procedere con il pagamento online premendo sul pulsante 'PayPal' (anche per pagare con carta di credito).

    Potrebbe essere necessario aspettare fino ad un minuto, quindi attendere la notifica di avvenuto pagamento e non lasciare o aggiornare la pagina.\"\r\n\t\t\t\t\t\t\t\t}, this._container);\r\n\r\n\t\t\t\t\t\t\t\tthis.createPaypalButton();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, undefined, undefined, this._subjectId);\r\n\t\t\t\t},\r\n\t\t\t\t(error) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tvrshared.LoaderManager().hide();\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t});\r\n\t\t}, 500);\r\n\t}\r\n\r\n\tprivate static createPaypalButton()\r\n\t{\r\n\t\tlet paypalClientId = (Rotator.configuration().appPaypalSandboxMode) ? Rotator.configuration().appPaypalClientIdSandbox : Rotator.configuration().appPaypalClientId;\r\n\t\tlet paypalClientSecret = (Rotator.configuration().appPaypalSandboxMode) ? Rotator.configuration().appPaypalClientSecretSandbox : Rotator.configuration().appPaypalClientSecret;\r\n\r\n\t\tif (paypalClientId == null || paypalClientId == \"\" || paypalClientSecret == null || paypalClientSecret == \"\")\r\n\t\t{\r\n\t\t\tVrManager.notify(\"Paypal ClientID e/o ClientSecret non impostati correttamente\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (Rotator.configuration().appPaypalSandboxMode)\r\n\t\t{\r\n\t\t\tlet divSandboxAlert = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\t\t\tvr.createLabel({\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\talign: vr.TextAlignEnum.Center,\r\n\t\t\t\tcolorSettings: { textColor: \"#bb2626\" },\r\n\t\t\t\ttext: \"Attenzione: Modalità Sandbox (test)\"\r\n\t\t\t}, divSandboxAlert);\r\n\t\t}\r\n\r\n\t\tthis._btnPaypalButton = vr.createPaypalButton({\r\n\t\t\twidth: \"100%\",\r\n\t\t\tstyle: { height: 40 },\r\n\t\t\tonBeforePayment: (e) =>\r\n\t\t\t{\r\n\t\t\t\tif (paypalClientId == null || paypalClientId == \"\" || paypalClientSecret == null || paypalClientSecret == \"\")\r\n\t\t\t\t{\r\n\t\t\t\t\tVrManager.notify(\"Paypal ClientID e/o ClientSecret non impostati correttamente\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tcreateOrderRequest: {\r\n\t\t\t\tmethod: Rotator.webComponentParameters()[0].url + \"/api/PaypalWebApi/CreatePayment/\",\r\n\t\t\t\tloader: Rotator.container(),\r\n\t\t\t\tparameters: () =>\r\n\t\t\t\t{\r\n\t\t\t\t\tlet sessionId = vrshared.CookieManager().getCookie(\"sessionId\");\r\n\t\t\t\t\tlet amount = this._parameters.price + ((this._needsToAddStampRow === true) ? 2 : 0);\r\n\t\t\t\t\tlet itemName = this._parameters.itemName;\r\n\t\t\t\t\tlet plantId = Rotator.webComponentParameters()[0].plantId;\r\n\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tsessionId: sessionId,\r\n\t\t\t\t\t\tamount: amount,\r\n\t\t\t\t\t\titemName: itemName,\r\n\t\t\t\t\t\tauthKey: \"1D7822D72F5397BEF65D677C89E85\",\r\n\t\t\t\t\t\tplantId: (plantId == 0) ? 1 : plantId,\r\n\t\t\t\t\t\tenvironment: (Rotator.configuration().appPaypalSandboxMode) ? vr.PaypalEnvironmentEnum.Sandbox : vr.PaypalEnvironmentEnum.Production,\r\n\t\t\t\t\t\tpayerInfo:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: this._txtName.value(),\r\n\t\t\t\t\t\t\tsurname: this._txtSurname.value(),\r\n\t\t\t\t\t\t\temail: this._txtEmail.value(),\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tbillingInfo:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcity: this._cmbItalyResidenceCity.text(),\r\n\t\t\t\t\t\t\tcountryCode: (this._getSubjectResponse.italianAddress != null) ? this._getSubjectResponse.italianAddress.countryCode : \"\",\r\n\t\t\t\t\t\t\tstreet: (this._getSubjectResponse.italianAddress != null) ? this._getSubjectResponse.italianAddress.street : \"\",\r\n\t\t\t\t\t\t\tzip: (this._getSubjectResponse.italianAddress != null) ? this._getSubjectResponse.italianAddress.zipCode : \"\",\r\n\t\t\t\t\t\t\tprovince: this._txtItalyResidenceProvince.value()\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tapproveRequest: {\r\n\t\t\t\tmethod: Rotator.webComponentParameters()[0].url + \"/api/PaypalWebApi/ExecutePayment/\",\r\n\t\t\t\tloader: Rotator.container(),\r\n\t\t\t\tparameters: () =>\r\n\t\t\t\t{\r\n\t\t\t\t\tlet sessionId = vrshared.CookieManager().getCookie(\"sessionId\");\r\n\t\t\t\t\tlet plantId = Rotator.webComponentParameters()[0].plantId;\r\n\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tsessionId: sessionId,\r\n\t\t\t\t\t\tauthKey: \"1D7822D72F5397BEF65D677C89E85\",\r\n\t\t\t\t\t\tplantId: (plantId == 0) ? 1 : plantId,\r\n\t\t\t\t\t\tenvironment: (Rotator.configuration().appPaypalSandboxMode) ? vr.PaypalEnvironmentEnum.Sandbox : vr.PaypalEnvironmentEnum.Production\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcallback: (e) => \r\n\t\t\t\t{\r\n\t\t\t\t\tif (this._parameters.callbackAfterPayment != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlet paymentDataEvent = new PaymentDataEvent();\r\n\t\t\t\t\t\tpaymentDataEvent.appointmentId = this._appointmentId!;\r\n\t\t\t\t\t\tpaymentDataEvent.patientId = this._subjectId;\r\n\t\t\t\t\t\tthis._parameters.callbackAfterPayment(paymentDataEvent);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\terrorCallback: (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tlet fromHours = String(Rotator.confirmationParameters()!.timeslot.hourFromDisplay.hours).padStart(2, \"0\");\r\n\t\t\t\t\tlet fromMinutes = String(Rotator.confirmationParameters()!.timeslot.hourFromDisplay.minutes).padStart(2, \"0\");\r\n\t\t\t\t\tlet date = new Date(Rotator.confirmationParameters()!.timeslot.day).toItalyLongString();\r\n\r\n\t\t\t\t\tSupport.sendErrorEmail(`Si è verificato un errore durante il pagamento:
    \r\n\t\t\t\t\t\tUrlCliente: ${Rotator.webComponentParameters()[0].url}
    \r\n\t\t\t\t\t\tProfessionista: ${Rotator.confirmationParameters()!.resource!.name}
    \r\n\t\t\t\t\t\tUtente: ${this._subjectDisplayName}
    \r\n\t\t\t\t\t\tPrestazione: ${Rotator.bookingParameters().activityType.onlineBookingName}
    \r\n\t\t\t\t\t\tSede: ${Rotator.confirmationParameters()!.workplace.name}
    \r\n\t\t\t\t\t\tData: ${date + \" alle ore \" + fromHours + \":\" + fromMinutes}\r\n\t\t\t\t\t\t${(String.isNotNullOrEmpty(Rotator.configuration().appName) ? \"
    Nome app: \" + Rotator.configuration().appName : \"\")}\r\n\t\t\t\t\t`, this._appointmentId!);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, this._container);\r\n\r\n\t\tvr.createImage({\r\n\t\t\tvalue: \"https://booking.vrapp.it/images/patient/creditCardLogo.png\",\r\n\t\t\tcssContainer: \"width: 100%; margin-top: -4px; z-index: 999;\",\r\n\t\t\tcss: \"margin: 0 auto; height: 22px !important; background-color: #ffc439; padding: 5px; padding-top: 0px;\"\r\n\t\t}, this._container)\r\n\r\n\t\tRotator.burgerButton().show();\r\n\t\tRotator.backButton().hide();\r\n\r\n\t\tvr.createSeparator({\r\n\t\t\torientation: vr.OrientationEnum.Horizontal,\r\n\t\t\twidth: \"100%\"\r\n\t\t}, this._container)\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"Torna alla prenotazione\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-bottom: 5px;\",\r\n\t\t\talign: vr.TextAlignEnum.Center\r\n\t\t}, this._container)\r\n\r\n\t\tvr.createButton(\r\n\t\t\t{\r\n\t\t\t\ttext: \"Prenota un altro\",\r\n\t\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 20px;\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tclass: \"vrButtonBookingBookAnother vrButtonPatient\",\r\n\t\t\t\tonClick: (e) => Rotator.goToMainPage()\r\n\t\t\t}, this._container);\r\n\t}\r\n\r\n\tstatic createInvoice(appointmentId: number, callback?: (e: CreateInvoiceResponse) => void, patientId?: number | null)\r\n\t{\r\n\t\tlet request = new CreateInvoiceRequest();\r\n\t\trequest.appointmentId = appointmentId;\r\n\t\trequest.patientId = patientId;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: CreateInvoiceResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(response);\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (Rotator.confirmationParameters() != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlet fromHours = String(Rotator.confirmationParameters()!.timeslot.hourFromDisplay.hours).padStart(2, \"0\");\r\n\t\t\t\t\t\tlet fromMinutes = String(Rotator.confirmationParameters()!.timeslot.hourFromDisplay.minutes).padStart(2, \"0\");\r\n\t\t\t\t\t\tlet date = new Date(Rotator.confirmationParameters()!.timeslot.day).toItalyLongString();\r\n\r\n\t\t\t\t\t\tSupport.sendErrorEmail(`Si è verificato un errore durante la creazione della fattura per il seguente appuntamento:
    \r\n\t\t\t\t\t\tUrlCliente: ${Rotator.webComponentParameters()[0].url}
    \r\n\t\t\t\t\t\tProfessionista: ${Rotator.confirmationParameters()!.resource!.name}
    \r\n\t\t\t\t\t\tUtente: ${this._subjectDisplayName}
    \r\n\t\t\t\t\t\tPrestazione: ${Rotator.bookingParameters().activityType.onlineBookingName}
    \r\n\t\t\t\t\t\tSede: ${Rotator.confirmationParameters()!.workplace.name}
    \r\n\t\t\t\t\t\tData: ${date + \" alle ore \" + fromHours + \":\" + fromMinutes}\r\n\t\t\t\t\t\t${(String.isNotNullOrEmpty(Rotator.configuration().appName) ? \"
    Nome app: \" + Rotator.configuration().appName : \"\")}\r\n\r\n\t\t\t\t\t\t

    \r\n\t\t\t\t\t\tMessage: ${error.message}
    \r\n\t\t\t\t\t\tStackTrace: ${error.stackTrace}
    \r\n\t\t\t\t\t`, appointmentId);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic setDocumentPayment(documentId: number, callback?: (e: SetDocumentPaymentResponse) => void)\r\n\t{\r\n\t\tlet request = new SetDocumentPaymentRequest();\r\n\t\trequest.documentId = documentId;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: SetDocumentPaymentResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(response);\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tSupport.sendErrorEmail(`Si è verificato un errore durante il pagamento della fattura\r\n\t\t\t\t\t\t

    \r\n\t\t\t\t\t\tMessage: ${error.message}
    \r\n\t\t\t\t\t\tStackTrace: ${error.stackTrace}
    `);\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate static clearControls()\r\n\t{\r\n\t\tthis._txtName.clear();\r\n\t\tthis._txtSurname.clear();\r\n\t\tthis._txtEmail.clear();\r\n\t\tthis._btgGender.selectIndex(1);\r\n\t\tthis._cmbBirthCity.clear();\r\n\t\tthis._cmbForeignBirthCityCountry.clear();\r\n\t\tthis._cmbItalyResidenceCity.clear();\r\n\t\tthis._txtItalyResidenceProvince.clear();\r\n\t\tthis._cmbItalyResidenceZip.clear();\r\n\t\tthis._cmbOutItalyResidenceCountry.clear();\r\n\t\tthis._dtpBirthdate.clear();\r\n\t\tthis._swtItalianForeignBirthCity.clear();\r\n\t\tthis._swtItalianForeignResidenceAddress.clear();\r\n\t\tthis._txtFiscalCode.clear();\r\n\t\tthis._txtForeignBirthCity.clear();\r\n\t\tthis._txtItalyResidenceAddress.clear();\r\n\t\tthis._txtLandline.clear();\r\n\t\tthis._txtOutItalyResidenceAddress.clear();\r\n\t\tthis._txtPhoneNumber.clear();\r\n\t}\r\n\r\n\tprivate static getSubject()\r\n\t{\r\n\t\tProfile.getSubject(\r\n\t\t\t{\r\n\t\t\t\ttxtName: this._txtName,\r\n\t\t\t\ttxtSurname: this._txtSurname,\r\n\t\t\t\ttxtEmail: this._txtEmail,\r\n\t\t\t\tbtgGender: this._btgGender,\r\n\t\t\t\tcmbBirthCity: this._cmbBirthCity,\r\n\t\t\t\tcmbForeignBirthCityCountry: this._cmbForeignBirthCityCountry,\r\n\t\t\t\tcmbItalyResidenceCity: this._cmbItalyResidenceCity,\r\n\t\t\t\ttxtItalyResidenceProvince: this._txtItalyResidenceProvince,\r\n\t\t\t\tcmbItalyResidenceZip: this._cmbItalyResidenceZip,\r\n\t\t\t\tcmbOutItalyResidenceCountry: this._cmbOutItalyResidenceCountry,\r\n\t\t\t\tdtpBirthdate: this._dtpBirthdate,\r\n\t\t\t\tswtItalianForeignBirthCity: this._swtItalianForeignBirthCity,\r\n\t\t\t\tswtItalianForeignResidenceAddress: this._swtItalianForeignResidenceAddress,\r\n\t\t\t\ttxtFiscalCode: this._txtFiscalCode,\r\n\t\t\t\ttxtForeignBirthCity: this._txtForeignBirthCity,\r\n\t\t\t\ttxtItalyResidenceAddress: this._txtItalyResidenceAddress,\r\n\t\t\t\ttxtLandline: this._txtLandline,\r\n\t\t\t\ttxtOutItalyResidenceAddress: this._txtOutItalyResidenceAddress,\r\n\t\t\t\ttxtPhoneNumber: this._txtPhoneNumber\r\n\t\t\t},\r\n\t\t\t(response) =>\r\n\t\t\t{\r\n\t\t\t\tthis._getSubjectResponse = response;\r\n\t\t\t\tthis._subjectId = response.id;\r\n\t\t\t\tthis._subjectDisplayName = response.name + \" \" + response.surname;\r\n\t\t\t}, undefined, undefined, this._subjectId);\r\n\t}\r\n}\r\n\r\n//#region Classes\r\nclass CreateInvoiceRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/CreateInvoice\";\r\n\r\n\tpublic appointmentId: number;\r\n\tpublic patientId?: number | null;\r\n}\r\n\r\nclass CreateInvoiceResponse extends WebApiResponseBase\r\n{\r\n\tpublic invoiceId: number;\r\n\tpublic pdfDocument: string;\r\n\tpublic pdfDocumentName: string;\r\n\tpublic cashAdvanceInfo: CashAdvanceInfo;\r\n}\r\n\r\nexport class CashAdvanceInfo\r\n{\r\n\tpublic cashAdvancePrice: number;\r\n}\r\n\r\nexport class PaymentDataParameters\r\n{\r\n\tappointmentId?: number | null;\r\n\tfromDocumentPage?: boolean;\r\n\tprice: number;\r\n\titemName: string;\r\n\tcallbackAfterPayment?: (e: PaymentDataEvent) => void;\r\n priceId: number;\r\n}\r\n\r\nclass PaymentDataEvent\r\n{\r\n\tappointmentId: number;\r\n\tpatientId: number;\r\n}\r\n\r\nclass SetDocumentPaymentRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/SetDocumentPayment\";\r\n\r\n\tpublic documentId: number;\r\n}\r\n\r\nclass SetDocumentPaymentResponse extends WebApiResponseBase\r\n{\r\n\tpublic documentId: number;\r\n}\r\n//#endregion","import { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\nimport { Rotator, puma, PageEnum } from \"../../src/rotator\";\r\nimport { Popup, Support } from \"../support\";\r\nimport { BirthAddressInfo, City, ContactInfo, ContactTypeEnum, ForeignAddress, ItalianAddress, WebApiDateTime } from \"../../src/shared/common\";\r\nimport { MandatoryFieldInfo, Register } from \"../../src/login/register\";\r\nimport { VrManager } from \"../../src/shared/vrManager\";\r\n\r\nexport class Profile\r\n{\r\n\tprivate static _subjectId: number;\r\n\tprivate static _container: HTMLElement;\r\n\r\n\tprivate static _txtUsername: vr.TextBox;\r\n\tprivate static _txtName: vr.TextBox;\r\n\tprivate static _txtSurname: vr.TextBox;\r\n\tprivate static _txtEmail: vr.TextBox;\r\n\tprivate static _txtPhoneNumber: vr.TextBox;\r\n\tprivate static _dtpBirthdate: vr.DatePicker;\r\n\tprivate static _txtFiscalCode: vr.TextBox;\r\n\tprivate static _txtLandline: vr.TextBox;\r\n\tprivate static _btgGender: vr.ButtonGroup;\r\n\tprivate static _fields: MandatoryFieldInfo[];\r\n\r\n\tprivate static _cmbBirthCity: vr.ComboBox;\r\n\tprivate static _swtItalianForeignBirthCity: vr.Switch;\r\n\tprivate static _cmbForeignBirthCityCountry: vr.ComboBox;\r\n\tprivate static _txtForeignBirthCity: vr.TextBox;\r\n\r\n\tprivate static _swtItalianForeignResidenceAddress: vr.Switch;\r\n\tprivate static _txtItalyResidenceAddress: vr.TextBox;\r\n\tprivate static _cmbItalyResidenceCity: vr.ComboBox;\r\n\tprivate static _txtItalyResidenceProvince: vr.TextBox;\r\n\tprivate static _cmbItalyResidenceZip: vr.ComboBox;\r\n\tprivate static _txtOutItalyResidenceAddress: vr.TextBox;\r\n\tprivate static _cmbOutItalyResidenceCountry: vr.ComboBox;\r\n\r\n\tstatic initialize()\r\n\t{\r\n\t\tthis._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\t\tRotator.title(\"PROFILO\");\r\n\r\n\t\tSupport.checkLogin(() => \r\n\t\t{\r\n\t\t\tthis.createControls();\r\n\t\t\tthis.getSubject(\r\n\t\t\t\t{\r\n\t\t\t\t\ttxtName: this._txtName,\r\n\t\t\t\t\ttxtSurname: this._txtSurname,\r\n\t\t\t\t\ttxtEmail: this._txtEmail,\r\n\t\t\t\t\tbtgGender: this._btgGender,\r\n\t\t\t\t\tcmbBirthCity: this._cmbBirthCity,\r\n\t\t\t\t\tcmbForeignBirthCityCountry: this._cmbForeignBirthCityCountry,\r\n\t\t\t\t\tcmbItalyResidenceCity: this._cmbItalyResidenceCity,\r\n\t\t\t\t\ttxtItalyResidenceProvince: this._txtItalyResidenceProvince,\r\n\t\t\t\t\tcmbItalyResidenceZip: this._cmbItalyResidenceZip,\r\n\t\t\t\t\tcmbOutItalyResidenceCountry: this._cmbOutItalyResidenceCountry,\r\n\t\t\t\t\tdtpBirthdate: this._dtpBirthdate,\r\n\t\t\t\t\tswtItalianForeignBirthCity: this._swtItalianForeignBirthCity,\r\n\t\t\t\t\tswtItalianForeignResidenceAddress: this._swtItalianForeignResidenceAddress,\r\n\t\t\t\t\ttxtFiscalCode: this._txtFiscalCode,\r\n\t\t\t\t\ttxtForeignBirthCity: this._txtForeignBirthCity,\r\n\t\t\t\t\ttxtItalyResidenceAddress: this._txtItalyResidenceAddress,\r\n\t\t\t\t\ttxtLandline: this._txtLandline,\r\n\t\t\t\t\ttxtOutItalyResidenceAddress: this._txtOutItalyResidenceAddress,\r\n\t\t\t\t\ttxtPhoneNumber: this._txtPhoneNumber\r\n\t\t\t\t},\r\n\t\t\t\t(response) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis._subjectId = response.id;\r\n\r\n\t\t\t\t\tthis._txtUsername.value(response.username);\r\n\t\t\t\t\tif (response.username == null || response.username == \"\")\r\n\t\t\t\t\t\tthis._txtUsername.hide();\r\n\r\n\t\t\t\t\tif (!Rotator.configuration().appCanPatientEditProfileData)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis._txtUsername.disable();\r\n\t\t\t\t\t\tthis._txtName.disable();\r\n\t\t\t\t\t\tthis._txtSurname.disable();\r\n\t\t\t\t\t\tthis._txtEmail.disable();\r\n\t\t\t\t\t\tthis._txtPhoneNumber.disable();\r\n\t\t\t\t\t\tthis._txtLandline.disable();\r\n\t\t\t\t\t\tthis._dtpBirthdate.disable();\r\n\t\t\t\t\t\tthis._txtFiscalCode.disable();\r\n\t\t\t\t\t\tthis._btgGender.disable();\r\n\t\t\t\t\t\tthis._cmbBirthCity.disable();\r\n\t\t\t\t\t\tthis._swtItalianForeignBirthCity.disable();\r\n\t\t\t\t\t\tthis._cmbForeignBirthCityCountry.disable();\r\n\t\t\t\t\t\tthis._txtForeignBirthCity.disable();\r\n\t\t\t\t\t\tthis._swtItalianForeignResidenceAddress.disable();\r\n\t\t\t\t\t\tthis._txtItalyResidenceAddress.disable();\r\n\t\t\t\t\t\tthis._cmbItalyResidenceCity.disable();\r\n\t\t\t\t\t\tthis._txtItalyResidenceProvince.disable();\r\n\t\t\t\t\t\tthis._cmbItalyResidenceZip.disable();\r\n\t\t\t\t\t\tthis._txtOutItalyResidenceAddress.disable();\r\n\t\t\t\t\t\tthis._cmbOutItalyResidenceCountry.disable();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\tRegister.getMandatoryFields((e) => this._fields = e.fields);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate static createControls()\r\n\t{\r\n\t\t//#region Info\r\n\t\tlet divInfo = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\tthis._txtUsername = vr.createTextBox({\r\n\t\t\tlabel: \"Nome utente\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tenable: false,\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divInfo);\r\n\r\n\t\tthis._txtName = vr.createTextBox({\r\n\t\t\tlabel: \"Nome\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divInfo);\r\n\r\n\t\tthis._txtSurname = vr.createTextBox({\r\n\t\t\tlabel: \"Cognome\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divInfo);\r\n\r\n\t\tthis._txtEmail = vr.createTextBox({\r\n\t\t\tlabel: \"Email\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divInfo);\r\n\r\n\t\tthis._txtPhoneNumber = vr.createTextBox({\r\n\t\t\tlabel: \"Cellulare\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divInfo);\r\n\r\n\t\tthis._txtLandline = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Telefono fisso\",\r\n\t\t\t\tplaceholder: \"Telefono fisso\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divInfo);\r\n\r\n\t\tthis._btgGender = vr.createButtonGroup(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Sesso\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n\t\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\t\t//selectedColor: Rotator.color(),\r\n\t\t\t\titems:\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t{ text: \"Maschio\", value: \"M\" },\r\n\t\t\t\t\t\t{ text: \"Femmina\", value: \"F\" }\r\n\t\t\t\t\t],\r\n\t\t\t\tselectionMode: vr.SelectionModeEnum.Single\r\n\t\t\t}, divInfo);\r\n\t\t//#endregion\r\n\r\n\t\t//#region BirthInfo\r\n\t\tlet divBirthInfo = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\t\tthis._dtpBirthdate = Support.createDatePicker({\r\n\t\t\tlabel: \"Data di nascita\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t}, divBirthInfo);\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"Città di nascita\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t}, divBirthInfo);\r\n\r\n\t\tthis._swtItalianForeignBirthCity = vr.createSwitch({\r\n\t\t\tlabelOff: \"Italia\",\r\n\t\t\tlabelOn: \"Fuori Italia\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-bottom: 5px;\",\r\n\t\t\tonChange: (e) => \r\n\t\t\t{\r\n\t\t\t\tif (e.checked)\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyBirthCity).hide();\r\n\t\t\t\t\tpuma(divForeignBirthCity).show();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyBirthCity).show();\r\n\t\t\t\t\tpuma(divForeignBirthCity).hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, divBirthInfo);\r\n\r\n\t\tlet divItalyBirthCity = vr.div(divBirthInfo);\r\n\t\tthis._cmbBirthCity = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Città di nascita\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\",\r\n\t\t\t\twebService: {\r\n\t\t\t\t\tmethod: Rotator.patientUrl() + \"/api/UtilityWebApi/GetAllCities\",\r\n\t\t\t\t\titemsPropertyName: \"cities\",\r\n\t\t\t\t\ttypedTextPropertyName: \"searchText\",\r\n\t\t\t\t\tparameters: () =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tonlyActive: false\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, divItalyBirthCity);\r\n\r\n\t\tlet divForeignBirthCity = vr.div(divBirthInfo, { css: \"display: none;\" });\r\n\t\tthis._cmbForeignBirthCityCountry = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Nazione\",\r\n\t\t\t\twidth: \"100%\"\r\n\t\t\t}, divForeignBirthCity);\r\n\r\n\t\tthis._txtForeignBirthCity = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Città\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\"\r\n\t\t\t}, divForeignBirthCity);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Fiscal code\r\n\t\tlet divFiscalCode = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\t\tthis._txtFiscalCode = vr.createTextBox({\r\n\t\t\tlabel: \"Codice fiscale\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n\t\t\tinputMode: vr.TextTransformModeEnum.Uppercase,\r\n\t\t\tonBlur: (e) =>\r\n\t\t\t{\r\n\t\t\t\tthis.checkFiscalCode(this._txtFiscalCode.value(), this._cmbForeignBirthCityCountry.value(), (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!e.isValid)\r\n\t\t\t\t\t\tthis._txtFiscalCode.error();\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthis._txtFiscalCode.hideError();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}, divFiscalCode);\r\n\r\n\t\tif (Rotator.configuration().appCanPatientEditProfileData)\r\n\t\t{\r\n\t\t\tvr.createButton({\r\n\t\t\t\ttext: \"Calcola codice\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-top: 10px;\",\r\n\t\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\tonClick: (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!Rotator.configuration().appCanPatientEditProfileData)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet birthAddressInfo = null;\r\n\t\t\t\t\tif (!this._swtItalianForeignBirthCity.checked())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//#region Italian\r\n\t\t\t\t\t\tif (this._cmbBirthCity.value() != null && this._cmbBirthCity.value() != \"\")\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbirthAddressInfo = new BirthAddressInfo();\r\n\t\t\t\t\t\t\tbirthAddressInfo.istatCode = this._cmbBirthCity.value()!;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//#endregion\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//#region Foreign\r\n\t\t\t\t\t\tlet countrySelected = this._cmbForeignBirthCityCountry.getSelectedItem();\r\n\t\t\t\t\t\tif (countrySelected != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbirthAddressInfo = new BirthAddressInfo();\r\n\t\t\t\t\t\t\tbirthAddressInfo.countryCode = this._cmbForeignBirthCityCountry.value()!;\r\n\t\t\t\t\t\t\tbirthAddressInfo.address = this._txtForeignBirthCity.value();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//#endregion\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.computeFiscalCode(this._txtName.value(), this._txtSurname.value(), this._btgGender.getSelectedValues()[0], this._dtpBirthdate.value()!, birthAddressInfo,\r\n\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (e.invalidFieldsMessage != null && e.invalidFieldsMessage != \"\")\r\n\t\t\t\t\t\t\t\tVrManager.notify(e.invalidFieldsMessage, \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis._txtFiscalCode.value(e.fiscalCode);\r\n\t\t\t\t\t\t\t\tthis._txtFiscalCode.hideError();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}, divFiscalCode);\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Address\r\n\t\tlet divResidence = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"margin-top: 10px;\" });\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"Indirizzo di residenza\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t}, divResidence);\r\n\r\n\t\tthis._swtItalianForeignResidenceAddress = vr.createSwitch({\r\n\t\t\tlabelOff: \"Italia\",\r\n\t\t\tlabelOn: \"Fuori Italia\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-bottom: 5px;\",\r\n\t\t\tonChange: (e) => \r\n\t\t\t{\r\n\t\t\t\tif (e.checked)\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyResidence).hide();\r\n\t\t\t\t\tpuma(divOutItalyResidence).show();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyResidence).show();\r\n\t\t\t\t\tpuma(divOutItalyResidence).hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, divResidence);\r\n\r\n\t\tlet divItalyResidence = vr.div(divResidence);\r\n\t\tthis._txtItalyResidenceAddress = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Via\",\r\n\t\t\t\twidth: \"100%\"\r\n\t\t\t}, divItalyResidence);\r\n\r\n\t\tthis._cmbItalyResidenceCity = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Comune\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\",\r\n\t\t\t\twebService: {\r\n\t\t\t\t\tmethod: Rotator.patientUrl() + \"/api/UtilityWebApi/GetAllCities\",\r\n\t\t\t\t\titemsPropertyName: \"cities\",\r\n\t\t\t\t\ttypedTextPropertyName: \"searchText\",\r\n\t\t\t\t\tparameters: () =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tonlyActive: true\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tonAfterChange: (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tRegister.calcProvinceAndZipByCity(e.value, (e) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis._txtItalyResidenceProvince.clear();\r\n\t\t\t\t\t\tthis._cmbItalyResidenceZip.clearItems();\r\n\r\n\t\t\t\t\t\tthis._txtItalyResidenceProvince.value(e.city.provinceAbbreviation);\r\n\t\t\t\t\t\tthis._cmbItalyResidenceZip.items(e.city.zipCodes.map(k => { return { text: k.zipCode, value: k.zipCode } }));\r\n\t\t\t\t\t\tthis._cmbItalyResidenceZip.value(e.city.zipCodes.first().zipCode);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}, divItalyResidence);\r\n\r\n\t\tthis._txtItalyResidenceProvince = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Provincia\",\r\n\t\t\t\tenable: false,\r\n\t\t\t\talign: vr.TextAlignEnum.Center,\r\n\t\t\t\twidth: \"Calc(50% - 10px)\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\"\r\n\t\t\t}, divItalyResidence);\r\n\r\n\t\tthis._cmbItalyResidenceZip = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"CAP\",\r\n\t\t\t\tplaceholder: \"\",\r\n\t\t\t\twidth: \"50%\"\r\n\t\t\t}, divItalyResidence);\r\n\r\n\t\tlet divOutItalyResidence = vr.div(divResidence, { css: \"display: none;\" });\r\n\t\tthis._txtOutItalyResidenceAddress = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Indirizzo\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\"\r\n\t\t\t}, divOutItalyResidence);\r\n\r\n\t\tthis._cmbOutItalyResidenceCountry = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Nazione\",\r\n\t\t\t\twidth: \"100%\"\r\n\t\t\t}, divOutItalyResidence);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Buttons\r\n\t\tlet divButtons = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"margin-bottom: 30px;\" });\r\n\r\n\t\tif (Rotator.configuration().appCanPatientEditProfileData)\r\n\t\t{\r\n\t\t\tvr.createButton({\r\n\t\t\t\ttext: \"Aggiorna dati\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\tclass: \"vrButtonUpdateData vrButtonPatient\",\r\n\t\t\t\tonClick: (e) => \r\n\t\t\t\t{\r\n\t\t\t\t\tif (Rotator.configuration().appCanPatientEditProfileData)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.updateSubject(\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttxtName: this._txtName,\r\n\t\t\t\t\t\t\t\ttxtSurname: this._txtSurname,\r\n\t\t\t\t\t\t\t\ttxtEmail: this._txtEmail,\r\n\t\t\t\t\t\t\t\tbtgGender: this._btgGender,\r\n\t\t\t\t\t\t\t\tcmbBirthCity: this._cmbBirthCity,\r\n\t\t\t\t\t\t\t\tcmbForeignBirthCityCountry: this._cmbForeignBirthCityCountry,\r\n\t\t\t\t\t\t\t\tcmbItalyResidenceCity: this._cmbItalyResidenceCity,\r\n\t\t\t\t\t\t\t\ttxtItalyResidenceProvince: this._txtItalyResidenceProvince,\r\n\t\t\t\t\t\t\t\tcmbItalyResidenceZip: this._cmbItalyResidenceZip,\r\n\t\t\t\t\t\t\t\tcmbOutItalyResidenceCountry: this._cmbOutItalyResidenceCountry,\r\n\t\t\t\t\t\t\t\tdtpBirthdate: this._dtpBirthdate,\r\n\t\t\t\t\t\t\t\tswtItalianForeignBirthCity: this._swtItalianForeignBirthCity,\r\n\t\t\t\t\t\t\t\tswtItalianForeignResidenceAddress: this._swtItalianForeignResidenceAddress,\r\n\t\t\t\t\t\t\t\ttxtFiscalCode: this._txtFiscalCode,\r\n\t\t\t\t\t\t\t\ttxtForeignBirthCity: this._txtForeignBirthCity,\r\n\t\t\t\t\t\t\t\ttxtItalyResidenceAddress: this._txtItalyResidenceAddress,\r\n\t\t\t\t\t\t\t\ttxtLandline: this._txtLandline,\r\n\t\t\t\t\t\t\t\ttxtOutItalyResidenceAddress: this._txtOutItalyResidenceAddress,\r\n\t\t\t\t\t\t\t\ttxtPhoneNumber: this._txtPhoneNumber\r\n\t\t\t\t\t\t\t}, this._subjectId, true, true, this._fields,\r\n\t\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tVrManager.notify(\"Salvataggio effettuato correttamente\");\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, divButtons);\r\n\r\n\t\t\tvr.createSeparator(\r\n\t\t\t\t{\r\n\t\t\t\t\tsize: 2,\r\n\t\t\t\t\torientation: vr.OrientationEnum.Horizontal\r\n\t\t\t\t}, divButtons);\r\n\t\t}\r\n\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Cambia password\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tclass: \"vrButtonChangePassword vrButtonPatient\",\r\n\t\t\tonClick: (e) => Rotator.page(PageEnum.ChangePassword)\r\n\t\t}, divButtons);\r\n\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Esci dal profilo\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcolorSettings: { textColor: \"red\" },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px red;\",\r\n\t\t\tcssContainer: \"margin-top: 10px;\",\r\n\t\t\tclass: \"vrButtonLogout vrButtonPatient\",\r\n\t\t\ticon: vr.IconClassicLight.Logout,\r\n\t\t\tonClick: (e) => \r\n\t\t\t{\r\n\t\t\t\tSupport.confirm(\"Sicuro di voler uscire?\", () => Support.logout());\r\n\t\t\t}\r\n\t\t}, divButtons);\r\n\t\t//#endregion\r\n\t}\r\n\r\n\tstatic fillControls(controls: ControlProfile, response: GetSubjectResponse)\r\n\t{\r\n\t\tcontrols.txtName.value(response.name);\r\n\t\tcontrols.txtSurname.value(response.surname);\r\n\t\tcontrols.txtFiscalCode.value(response.fiscalCode);\r\n\t\tcontrols.btgGender.select([response.gender]);\r\n\r\n\t\t//#region Birthdate\r\n\t\tif (response.webApiBirthDate != null)\r\n\t\t{\r\n\t\t\tlet webApiBirthDate = response.webApiBirthDate!;\r\n\t\t\tlet birthdate = new Date(webApiBirthDate.year, webApiBirthDate.month - 1, webApiBirthDate.day, webApiBirthDate.hours, webApiBirthDate.minutes, webApiBirthDate.seconds, webApiBirthDate.milliSeconds);\r\n\t\t\tcontrols.dtpBirthdate.value(birthdate);\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Contacts\r\n\t\tif (response.contacts != null && response.contacts.length > 0)\r\n\t\t{\r\n\t\t\tlet emailContactInfo = response.contacts.filter(k => k.conactType == ContactTypeEnum.PrivateEmail)[0];\r\n\t\t\tif (emailContactInfo != null)\r\n\t\t\t{\r\n\t\t\t\tcontrols.txtEmail.tag(emailContactInfo.contactId);\r\n\t\t\t\tcontrols.txtEmail.value(emailContactInfo.value);\r\n\t\t\t}\r\n\r\n\t\t\tlet mobilePhoneContactInfo = response.contacts.filter(k => k.conactType == ContactTypeEnum.PrivateMobile)[0];\r\n\t\t\tif (mobilePhoneContactInfo != null)\r\n\t\t\t{\r\n\t\t\t\tcontrols.txtPhoneNumber.tag(mobilePhoneContactInfo.contactId);\r\n\t\t\t\tcontrols.txtPhoneNumber.value(mobilePhoneContactInfo.value);\r\n\t\t\t}\r\n\r\n\t\t\tlet landlineContactInfo = response.contacts.filter(k => k.conactType == ContactTypeEnum.HomePhone)[0];\r\n\t\t\tif (landlineContactInfo != null)\r\n\t\t\t{\r\n\t\t\t\tcontrols.txtLandline.tag(landlineContactInfo.contactId);\r\n\t\t\t\tcontrols.txtLandline.value(landlineContactInfo.value);\r\n\t\t\t}\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\tRegister.getAllCountries((e) =>\r\n\t\t{\r\n\t\t\tcontrols.cmbOutItalyResidenceCountry.items(e.countries);\r\n\t\t\tcontrols.cmbForeignBirthCityCountry.items(e.countries);\r\n\t\t}, vrshared.WebApiModeEnum.Sync);\r\n\r\n\t\t//#region BirthCity\r\n\t\tif (response.birthAddressInfo != null)\r\n\t\t{\r\n\t\t\tif (response.birthAddressInfo.istatCode != null && response.birthAddressInfo.istatCode != \"\"\r\n\t\t\t\t|| (response.birthAddressInfo.countryCode != null && response.birthAddressInfo.countryCode == \"IT\")) // Italian\r\n\t\t\t{\r\n\t\t\t\tcontrols.swtItalianForeignBirthCity.checked(false);\r\n\t\t\t\tcontrols.cmbBirthCity.value(response.birthAddressInfo.istatCode);\r\n\t\t\t}\r\n\t\t\telse if ((response.birthAddressInfo.countryCode != null && response.birthAddressInfo.countryCode != \"\")\r\n\t\t\t\t|| (response.birthAddressInfo.address != null && response.birthAddressInfo.address != \"\")) // Foreign\r\n\t\t\t{\r\n\t\t\t\tcontrols.swtItalianForeignBirthCity.checked(true);\r\n\t\t\t\tcontrols.cmbForeignBirthCityCountry.value(response.birthAddressInfo.countryCode);\r\n\t\t\t\tcontrols.txtForeignBirthCity.value(response.birthAddressInfo.address);\r\n\t\t\t}\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Residence Address\r\n\t\tif (response.italianAddress != null)\r\n\t\t{\r\n\t\t\tcontrols.swtItalianForeignResidenceAddress.checked(false);\r\n\t\t\tcontrols.txtItalyResidenceAddress.value(response.italianAddress.street);\r\n\t\t\tcontrols.cmbItalyResidenceCity.value(response.italianAddress.istatCode);\r\n\t\t\tcontrols.cmbItalyResidenceZip.value(response.italianAddress.zipCode);\r\n\t\t}\r\n\t\telse if (response.foreignAddress != null)\r\n\t\t{\r\n\t\t\tcontrols.swtItalianForeignResidenceAddress.checked(true);\r\n\t\t\tcontrols.txtOutItalyResidenceAddress.value(response.foreignAddress.address);\r\n\t\t\tcontrols.cmbOutItalyResidenceCountry.value(response.foreignAddress.countryCode);\r\n\t\t}\r\n\t\t//#endregion\r\n\t}\r\n\r\n\tstatic getSubject(controls?: ControlProfile | null, callback?: (e: GetSubjectResponse) => void,\r\n\t\terrorCallback?: (e: vrshared.WebApiError) => void, async = true, subjectId?: number | null)\r\n\t{\r\n\t\tlet request = new GetSubjectRequest();\r\n\t\trequest.subjectId = subjectId;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: GetSubjectResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (controls != null)\r\n\t\t\t\t\t\tthis.fillControls(controls, response);\r\n\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(response);\r\n\t\t\t\t},\r\n\t\t\t\terror: (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (errorCallback != null)\r\n\t\t\t\t\t\terrorCallback(e);\r\n\t\t\t\t},\r\n\t\t\t\tmode: (async) ? vrshared.WebApiModeEnum.Async : vrshared.WebApiModeEnum.Sync,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic updateSubject(controls: ControlProfile, subjectId: number, check = true, async = true, fields: MandatoryFieldInfo[] | null = null,\r\n\t\tcallback?: (e: UpdateSubjectResponse) => void, errorCallback?: (e: vrshared.WebApiError) => void)\r\n\t{\r\n\t\t//#region Check\r\n\t\tif (check && fields != null)\r\n\t\t{\r\n\t\t\tlet error = Register.checkMandatoryFields(fields, controls.txtFiscalCode, controls.dtpBirthdate, controls.swtItalianForeignBirthCity,\r\n\t\t\t\tcontrols.cmbBirthCity, controls.cmbForeignBirthCityCountry, controls.txtForeignBirthCity, controls.btgGender,\r\n\t\t\t\tcontrols.swtItalianForeignResidenceAddress, controls.txtItalyResidenceAddress, controls.cmbItalyResidenceCity,\r\n\t\t\t\tcontrols.txtItalyResidenceProvince, controls.cmbItalyResidenceZip, controls.txtOutItalyResidenceAddress,\r\n\t\t\t\tcontrols.cmbOutItalyResidenceCountry, controls.txtLandline);\r\n\r\n\t\t\tif (error)\r\n\t\t\t\treturn;\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\tlet request = new UpdateSubjectRequest();\r\n\t\trequest.plantId = Rotator.configuration().plant.id;\r\n\t\trequest.id = subjectId;\r\n\t\trequest.name = controls.txtName.value();\r\n\t\trequest.surname = controls.txtSurname.value();\r\n\t\trequest.webApiBirthDate = Date.toWebApiDateTime(controls.dtpBirthdate.value());\r\n\t\trequest.fiscalCode = controls.txtFiscalCode.value();\r\n\t\trequest.gender = controls.btgGender.getSelectedValues()[0];\r\n\r\n\t\t//#region Contacts\r\n\t\tlet contacts: ContactInfo[] = [];\r\n\t\tif (!controls.txtEmail.isEmpty())\r\n\t\t{\r\n\t\t\tlet emailContactInfo = new ContactInfo();\r\n\t\t\temailContactInfo.contactId = controls.txtEmail.tag();\r\n\t\t\temailContactInfo.conactType = ContactTypeEnum.PrivateEmail;\r\n\t\t\temailContactInfo.value = controls.txtEmail.value();\r\n\t\t\tcontacts.push(emailContactInfo);\r\n\t\t}\r\n\r\n\t\tif (!controls.txtPhoneNumber.isEmpty())\r\n\t\t{\r\n\t\t\tlet mobilePhoneContactInfo = new ContactInfo();\r\n\t\t\tmobilePhoneContactInfo.contactId = controls.txtPhoneNumber.tag();\r\n\t\t\tmobilePhoneContactInfo.conactType = ContactTypeEnum.PrivateMobile;\r\n\t\t\tmobilePhoneContactInfo.value = controls.txtPhoneNumber.value();\r\n\t\t\tcontacts.push(mobilePhoneContactInfo);\r\n\t\t}\r\n\r\n\t\tif (!controls.txtLandline.isEmpty())\r\n\t\t{\r\n\t\t\tlet landlineContactInfo = new ContactInfo();\r\n\t\t\tlandlineContactInfo.contactId = controls.txtLandline.tag();\r\n\t\t\tlandlineContactInfo.conactType = ContactTypeEnum.HomePhone;\r\n\t\t\tlandlineContactInfo.value = controls.txtLandline.value();\r\n\t\t\tcontacts.push(landlineContactInfo);\r\n\t\t}\r\n\t\trequest.contacts = contacts;\r\n\t\t//#endregion\r\n\r\n\t\trequest.birthAddressInfo = new BirthAddressInfo();\r\n\t\tif (!controls.swtItalianForeignBirthCity.checked())\r\n\t\t{\r\n\t\t\t//#region Italian\r\n\t\t\trequest.birthAddressInfo.istatCode = controls.cmbBirthCity.value()!;\r\n\t\t\t//#endregion\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t//#region Foreign\r\n\t\t\tlet countrySelected = controls.cmbForeignBirthCityCountry.getSelectedItem();\r\n\t\t\tif (countrySelected != null)\r\n\t\t\t\trequest.birthAddressInfo.countryCode = controls.cmbForeignBirthCityCountry.value()!;\r\n\r\n\t\t\trequest.birthAddressInfo.address = controls.txtForeignBirthCity.value();\r\n\t\t\t//#endregion\r\n\t\t}\r\n\r\n\t\tif (!controls.swtItalianForeignResidenceAddress.checked())\r\n\t\t{\r\n\t\t\t//#region Italian address\r\n\t\t\tlet italianAddress = new ItalianAddress();\r\n\t\t\titalianAddress.street = controls.txtItalyResidenceAddress.value();\r\n\t\t\titalianAddress.istatCode = controls.cmbItalyResidenceCity.value()!;\r\n\t\t\titalianAddress.zipCode = controls.cmbItalyResidenceZip.text();\r\n\t\t\trequest.italianAddress = italianAddress;\r\n\t\t\t//#endregion\r\n\t\t}\r\n\t\telse \r\n\t\t{\r\n\t\t\t//#region Foreign address\r\n\t\t\tlet foreignAddress = new ForeignAddress();\r\n\t\t\tforeignAddress.address = controls.txtOutItalyResidenceAddress.value();\r\n\r\n\t\t\tlet countrySelected = controls.cmbOutItalyResidenceCountry.getSelectedItem();\r\n\t\t\tif (countrySelected != null)\r\n\t\t\t\tforeignAddress.countryCode = controls.cmbOutItalyResidenceCountry.value()!;\r\n\r\n\t\t\trequest.foreignAddress = foreignAddress;\r\n\t\t\t//#endregion\r\n\t\t}\r\n\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: UpdateSubjectResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(response);\r\n\t\t\t\t},\r\n\t\t\t\terror: (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (errorCallback != null)\r\n\t\t\t\t\t\terrorCallback(e);\r\n\t\t\t\t},\r\n\t\t\t\tmode: (async) ? vrshared.WebApiModeEnum.Async : vrshared.WebApiModeEnum.Sync,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic computeFiscalCode(name: string, surname: string, gender: string, birthdate: Date, birthAddressInfo: BirthAddressInfo | null, callback: (e: ComputeFiscalCodeResponse) => void)\r\n\t{\r\n\t\t//#region Check\r\n\t\tlet error = false;\r\n\r\n\t\tif (name == null || name == \"\")\r\n\t\t{\r\n\t\t\tVrManager.notify(\"Inserire un nome\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\terror = true;\r\n\t\t}\r\n\r\n\t\tif (surname == null || surname == \"\")\r\n\t\t{\r\n\t\t\tVrManager.notify(\"Inserire un cognome\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\terror = true;\r\n\t\t}\r\n\r\n\t\tif (gender == null || gender == \"\")\r\n\t\t{\r\n\t\t\tVrManager.notify(\"Indicare il proprio genere\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\terror = true;\r\n\t\t}\r\n\r\n\t\tif (birthdate == null)\r\n\t\t{\r\n\t\t\tVrManager.notify(\"Inserire una data di nascita\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\terror = true;\r\n\t\t}\r\n\r\n\t\tif (birthAddressInfo == null)\r\n\t\t{\r\n\t\t\tVrManager.notify(\"Inserire una città di nascita\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\terror = true;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif (birthAddressInfo.countryCode != null && birthAddressInfo.countryCode != \"\")\r\n\t\t\t{\r\n\t\t\t\tif (birthAddressInfo.address == null || birthAddressInfo.address == \"\")\r\n\t\t\t\t{\r\n\t\t\t\t\tVrManager.notify(\"Inserire l'indirizzo di nascita\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\t\t\terror = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (birthAddressInfo.istatCode == null || birthAddressInfo.istatCode == \"\")\r\n\t\t\t\t{\r\n\t\t\t\t\tVrManager.notify(\"Inserire la città di nascita\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\t\t\terror = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (error)\r\n\t\t\treturn;\r\n\t\t//#endregion\r\n\r\n\t\tlet request = new ComputeFiscalCodeRequest();\r\n\t\trequest.name = name;\r\n\t\trequest.surname = surname;\r\n\t\trequest.gender = gender;\r\n\t\trequest.birthDate = Date.toWebApiDateTime(birthdate);\r\n\t\trequest.birthAddressInfo = birthAddressInfo!;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: ComputeFiscalCodeResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(response);\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic checkFiscalCode(fiscalCode: string, countryId?: number | null, callback?: (e: CheckFiscalCodeResponse) => void)\r\n\t{\r\n\t\tif (fiscalCode == null || fiscalCode == \"\")\r\n\t\t\treturn;\r\n\r\n\t\tlet request = new CheckFiscalCodeRequest();\r\n\t\trequest.countryId = (countryId == null) ? 0 : countryId;\r\n\t\trequest.fiscalCode = fiscalCode;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: CheckFiscalCodeResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(response);\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n}\r\n\r\n//#region Classes\r\nclass GetSubjectRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/GetSubject\";\r\n\r\n\tpublic subjectId?: number | null;\r\n}\r\n\r\nexport class GetSubjectResponse extends WebApiResponseBase\r\n{\r\n\tpublic id: number;\r\n\tpublic name: string;\r\n\tpublic surname: string;\r\n\tpublic birthdate?: Date | null;\r\n\tpublic webApiBirthDate?: WebApiDateTime;\r\n\tpublic fiscalCode: string;\r\n\tpublic username: string;\r\n\tpublic gender: string;\r\n\tpublic contacts: ContactInfo[];\r\n\tpublic birthAddressInfo: BirthAddressInfo;\r\n\tpublic italianAddress: ItalianAddress;\r\n\tpublic foreignAddress: ForeignAddress;\r\n\tpublic patientAge: number;\r\n\tpublic hasPrivacy: boolean;\r\n}\r\n\r\nclass UpdateSubjectRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/UpdateSubject\";\r\n\r\n\tpublic plantId: number;\r\n\tpublic id: number;\r\n\tpublic name: string;\r\n\tpublic surname: string;\r\n\tpublic contacts: ContactInfo[];\r\n\tpublic birthDate: Date | null;\r\n\tpublic fiscalCode: string;\r\n\tpublic gender: string;\r\n\tpublic birthAddressInfo: BirthAddressInfo;\r\n\tpublic italianAddress: ItalianAddress;\r\n\tpublic foreignAddress: ForeignAddress;\r\n\tpublic webApiBirthDate: WebApiDateTime;\r\n}\r\n\r\nclass UpdateSubjectResponse extends WebApiResponseBase\r\n{\r\n\r\n}\r\n\r\nclass ControlProfile\r\n{\r\n\ttxtName: vr.TextBox;\r\n\ttxtSurname: vr.TextBox;\r\n\ttxtEmail: vr.TextBox;\r\n\ttxtPhoneNumber: vr.TextBox;\r\n\tdtpBirthdate: vr.DatePicker;\r\n\ttxtFiscalCode: vr.TextBox;\r\n\ttxtLandline: vr.TextBox;\r\n\tbtgGender: vr.ButtonGroup;\r\n\tcmbOutItalyResidenceCountry: vr.ComboBox;\r\n\tcmbForeignBirthCityCountry: vr.ComboBox;\r\n\tswtItalianForeignBirthCity: vr.Switch;\r\n\tcmbBirthCity: vr.ComboBox;\r\n\ttxtForeignBirthCity: vr.TextBox;\r\n\tswtItalianForeignResidenceAddress: vr.Switch;\r\n\ttxtItalyResidenceAddress: vr.TextBox;\r\n\tcmbItalyResidenceCity: vr.ComboBox;\r\n\ttxtItalyResidenceProvince: vr.TextBox;\r\n\tcmbItalyResidenceZip: vr.ComboBox;\r\n\ttxtOutItalyResidenceAddress: vr.TextBox;\r\n}\r\n\r\nclass ComputeFiscalCodeRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/UtilityWebApi/ComputeFiscalCode\";\r\n\r\n\tpublic name: string;\r\n\tpublic surname: string;\r\n\tpublic birthDate?: WebApiDateTime | null;\r\n\tpublic gender: string;\r\n\tpublic birthAddressInfo: BirthAddressInfo;\r\n}\r\n\r\nclass ComputeFiscalCodeResponse extends WebApiResponseBase\r\n{\r\n\tpublic invalidFieldsMessage: string;\r\n\tpublic fiscalCode: string;\r\n}\r\n\r\nclass CheckFiscalCodeRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/UtilityWebApi/CheckFiscalCode\";\r\n\r\n\tpublic countryId?: number | null;\r\n\tpublic fiscalCode: string;\r\n}\r\n\r\nclass CheckFiscalCodeResponse extends WebApiResponseBase\r\n{\r\n\tpublic isValid: boolean;\r\n}\r\n//#endregion","import { WebApiRequestBase, WebApiResponseBase } from \"../shared/webApi\";\r\nimport { PageEnum, puma, Rotator } from \"../rotator\";\r\nimport { FileTypeEnum, Popup, Support } from \"../support\";\r\nimport { ReportItem, SendingAttachmentsDisplay } from \"../../src/shared/common\";\r\nimport { ReportSendingStorageListParameters } from \"./reportSendingStorageList\";\r\n\r\nexport class ReportList\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\tprivate static _reports: ReportItem[];\r\n\tprivate static _divReports: HTMLElement;\r\n\tprivate static _wndPrivacy: vr.Window;\r\n\r\n\tstatic initialize()\r\n\t{\r\n\t\tthis._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\t\tthis._container.style.cssText += \"position: relative;\";\r\n\t\tRotator.title(\"REFERTI\");\r\n\r\n\t\tSupport.checkLogin(() => this.getReports((e) => \r\n\t\t{\r\n\t\t\tthis._reports = e.reports;\r\n\t\t\tthis._divReports = vr.div(this._container);\r\n\t\t\tthis.drawReports();\r\n\t\t}), null, () => Rotator.page(PageEnum.ReportList));\r\n\t}\r\n\r\n\tprivate static drawReports()\r\n\t{\r\n\t\tpuma(this._divReports).empty();\r\n\t\tif (this._reports.length == 0)\r\n\t\t{\r\n\t\t\tlet divNoRecords = vr.div(this._divReports, { class: \"vrPatientDivSlot\" });\r\n\t\t\tvr.createLabel({\r\n\t\t\t\ttext: \"Non sono presenti referti\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\talign: vr.TextAlignEnum.Center\r\n\t\t\t}, divNoRecords);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let report of this._reports)\r\n\t\t\tthis.drawReportDetail(report, this._divReports);\r\n\t}\r\n\r\n\tstatic drawReportDetail(report: ReportItem, container: HTMLElement): HTMLElement\r\n\t{\r\n\t\tlet divReport = vr.div(container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\t//#region Icon/Info\r\n\t\tlet divIconInfo = vr.div(divReport, { css: \"display: flex;\" });\r\n\t\tvr.icon(vr.IconClassicLight.FileLines, divIconInfo, { css: \"font-size: 4em; margin-top: 6px; margin-right: 10px; color: #84d8ff;\" });\r\n\r\n\t\tlet divInfo = vr.div(divIconInfo, { css: \"text-align: left; width: 100%;\" });\r\n\t\tvr.createLabel({\r\n\t\t\ttext: report.activityTypeName,\r\n\t\t\tbold: true,\r\n\t\t\tcss: \"text-overflow: ellipsis; overflow: hidden; width: 100%;\",\r\n\t\t\tcssContainer: \"width: Calc(100% - 55px);\"\r\n\t\t}, divInfo);\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: new Date(report.date).toItalyLongString(),\r\n\t\t\twidth: \"100%\"\r\n\t\t}, divInfo);\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: report.doctorName.titleCase(),\r\n\t\t\twidth: \"100%\"\r\n\t\t}, divInfo);\r\n\r\n\t\tif (report.representerOfName != null && report.representerOfName.length > 0)\r\n\t\t{\r\n\t\t\tvr.createLabel(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: \"Referto di \" + report.representerOfName,\r\n\t\t\t\t\tnoBr: true,\r\n\t\t\t\t\twidth: \"100%\"\r\n\t\t\t\t}, divInfo);\r\n\t\t}\r\n\r\n\t\tif (Rotator.configuration().appShowPlantInFiles)\r\n\t\t{\r\n\t\t\tvr.createLabel(\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: report.plantCompanyName,\r\n\t\t\t\t\tnoBr: true,\r\n\t\t\t\t\twidth: \"100%\"\r\n\t\t\t\t}, divInfo);\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Buttons\r\n\t\tlet divButtons = vr.div(divReport, { css: \"margin-top: 10px; display: flex; justify-content: space-between;\" });\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Visualizza\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\tcssContainer: \"width: 100%;\",\r\n\t\t\tonClick: (e) => \r\n\t\t\t{\r\n\t\t\t\tlet request = new GetPacsInfoRequest();\r\n\t\t\t\trequest.reportSendingId = report.reportSendingId;\r\n\t\t\t\trequest.call(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsuccess: (response: GetPacsInfoResponse) => \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (response.hasLicense)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (response.deliveryStatus == null || response.deliveryStatus === true)\r\n\t\t\t\t\t\t\t\t\tthis.manageDownloadReport(report, response);\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.openCredentialsPopup(() => this.manageDownloadReport(report, response));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tthis.manageDownloadReport(report, response);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tloader: Rotator.container()\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}, divButtons);\r\n\r\n\t\tlet privacyHealthInfo = (Rotator.configuration().privacyHealthInfoText != \"\") ? Rotator.configuration().privacyHealthInfoText : \"Consenso per visualizzazione fascicolo sanitario\";\r\n\t\tthis._wndPrivacy = vr.createWindow(\r\n\t\t\t{\r\n\t\t\t\ttitle: \"Consenso Fasciscolo Sanitario\",\r\n\t\t\t\tmaximized: false,\r\n\t\t\t\tcontent: \"
    \" + privacyHealthInfo + \"
    \",\r\n\t\t\t\tcss: \"overflow-y: auto;\",\r\n\t\t\t\tcssContainer: \"width: 100% !important; height: \" + (Rotator.container().clientHeight - 20) + \"px !important; position: absolute !important; left: 0px !important;\",\r\n\t\t\t\tdraggable: false,\r\n\t\t\t\tfooter: true,\r\n\t\t\t\tmodal: false,\r\n\t\t\t\thideCloseIcon: true\r\n\t\t\t}, Rotator.shadowRoot() as any);\r\n\t\tpuma(this._wndPrivacy.container()).appendToPuma(this._container);\r\n\t\t//#endregion\r\n\r\n\t\treturn divReport;\r\n\t}\r\n\r\n\tprivate static manageDownloadReport(report: ReportItem, response: GetPacsInfoResponse)\r\n\t{\r\n\t\tif (response.storageList.length > 0 || response.openViewer)\r\n\t\t{\r\n\t\t\tlet parameters = new ReportSendingStorageListParameters();\r\n\t\t\tparameters.storageFileList = response.storageList;\r\n\t\t\tparameters.report = report;\r\n\t\t\tparameters.openViewer = response.openViewer;\r\n\t\t\tparameters.daysExpirationDelay = response.daysExpirationDelay;\r\n\t\t\tRotator.page(PageEnum.ReportSendingStorageList, parameters)\r\n\t\t}\r\n\t\telse\r\n\t\t\tthis.downloadReport(report.storedFileId, report.date);\r\n\t}\r\n\r\n\tstatic downloadReport(storedFileId: number, date: Date)\r\n\t{\r\n\t\tSupport.getFileData(storedFileId, (e) =>\r\n\t\t{\r\n\t\t\tif (e.requiredHealthRecordPrivacy)\r\n\t\t\t{\r\n\t\t\t\tthis._wndPrivacy.open([{\r\n\t\t\t\t\tvalue: \"ok\", callback: () =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.setPrivacyEHealthRecord(() =>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis._wndPrivacy.close();\r\n\t\t\t\t\t\t\tvrshared.UtilityManager().downloadFile(e.base64, \"referto_\" + new Date(date).toItalyShortString() + \".pdf\", FileTypeEnum.Pdf, !Rotator.isApp());\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}], false, { top: Rotator.container().scrollTop });\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tvrshared.UtilityManager().downloadFile(e.base64, \"referto_\" + new Date(date).toItalyShortString() + \".pdf\", FileTypeEnum.Pdf, !Rotator.isApp());\r\n\t\t});\r\n\t}\r\n\r\n\tstatic setPrivacyEHealthRecord(callback?: Function)\r\n\t{\r\n\t\tlet request = new SetPrivacyEHealthRecordRequest();\r\n\t\trequest.plantId = Rotator.configuration().plant.id;\r\n\t\trequest.privacyValue = true;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: SetPrivacyEHealthRecordResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback();\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic getReports(callback?: (e: GetReportsResponse) => void)\r\n\t{\r\n\t\tlet request = new GetReportsRequest();\r\n\t\trequest.plantIdList = [Rotator.configuration().plant.id];\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: GetReportsResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(response);\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate static _txtPassword: vr.TextBox;\r\n\tprivate static _txtPin: vr.TextBox;\r\n\tprivate static _txtOtp: vr.TextBox;\r\n\tprivate static _popup: Popup;\r\n\tstatic openCredentialsPopup(callback: Function)\r\n\t{\r\n\t\tthis._popup = new Popup(Rotator.container(), { height: \"auto\", width: 320 });\r\n\t\tthis._txtPassword = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Password\",\r\n\t\t\t\tplaceholder: \"Inserisci Password\",\r\n\t\t\t\tonEnterKey: () => this.saveCredentialsPopup(callback),\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, this._popup.element());\r\n\r\n\t\tthis._txtPin = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"PIN\",\r\n\t\t\t\tplaceholder: \"Inserici PIN\",\r\n\t\t\t\tonEnterKey: () => this.saveCredentialsPopup(callback),\r\n\t\t\t\tmode: vr.TextModeEnum.Password,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, this._popup.element());\r\n\r\n\t\tthis._txtOtp = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"OTP\",\r\n\t\t\t\tvisible: false,\r\n\t\t\t\tplaceholder: \"Inserisci OTP ricevuto\",\r\n\t\t\t\tonEnterKey: () => this.saveCredentialsPopup(callback),\r\n\t\t\t\tmode: vr.TextModeEnum.Password,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, this._popup.element());\r\n\r\n\t\tlet divButtons = vr.div(this._popup.element(), { css: \"display: flex; justify-content: space-between; margin-top: 15px;\" });\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Conferma\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tcssContainer: \"margin-right: 5px;\",\r\n\t\t\tclass: \"vrButtonChangePassword vrButtonPatient\",\r\n\t\t\tonClick: (e) => \r\n\t\t\t{\r\n\t\t\t\tthis.saveCredentialsPopup(callback);\r\n\t\t\t}\r\n\t\t}, divButtons)\r\n\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Chiudi\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tcssContainer: \"margin-left: 5px;\",\r\n\t\t\tclass: \"vrButtonChangePassword vrButtonPatient\",\r\n\t\t\tonClick: (e) => \r\n\t\t\t{\r\n\t\t\t\tthis._popup.close()\r\n\t\t\t}\r\n\t\t}, divButtons);\r\n\t\tthis._popup.open();\r\n\t}\r\n\r\n\tprivate static saveCredentialsPopup(callback: Function)\r\n\t{\r\n\t\t//#region Check\r\n\t\tlet error = false;\r\n\t\tif (this._txtPin.isEmpty())\r\n\t\t{\r\n\t\t\tvr.notifyError(\"PIN obbligatorio\");\r\n\t\t\terror = true;\r\n\t\t}\r\n\r\n\t\tif (this._txtPassword.isEmpty())\r\n\t\t{\r\n\t\t\tvr.notifyError(\"Password obbligatoria\");\r\n\t\t\terror = true;\r\n\t\t}\r\n\r\n\t\tif (this._txtOtp.visible() && this._txtOtp.isEmpty())\r\n\t\t{\r\n\t\t\tvr.notifyError(\"OTP obbligatorio\");\r\n\t\t\terror = true;\r\n\t\t}\r\n\r\n\t\tif (error)\r\n\t\t\treturn;\r\n\t\t//#endregion\r\n\r\n\t\tlet request = new ReportSendingLoginRequest();\r\n\t\trequest.pin = this._txtPin.value();\r\n\t\trequest.password = this._txtPassword.value();\r\n\t\trequest.otp = this._txtOtp.value();\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: ReportSendingLoginResponse) => \r\n\t\t\t\t{\r\n\t\t\t\t\tif (response.requireOTP)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis._txtOtp.show();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcallback();\r\n\t\t\t\t\tthis._popup.close();\r\n\t\t\t\t},\r\n\t\t\t\terror: (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis._txtOtp.clear();\r\n\t\t\t\t},\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n}\r\n\r\n//#region Classes\r\nclass GetReportsRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/GetReports\";\r\n\tpublic plantIdList: number[];\r\n}\r\n\r\nclass GetReportsResponse extends WebApiResponseBase\r\n{\r\n\tpublic reports: ReportItem[];\r\n}\r\n\r\nclass SetPrivacyEHealthRecordRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/SetPrivacyEHealthRecord\";\r\n\tpublic privacyValue: boolean;\r\n\tpublic plantId: number;\r\n}\r\n\r\nclass SetPrivacyEHealthRecordResponse extends WebApiResponseBase\r\n{\r\n\r\n}\r\n\r\nclass GetPacsInfoRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/GetPacsInfo\";\r\n\tpublic reportSendingId: number;\r\n}\r\n\r\nclass GetPacsInfoResponse extends WebApiResponseBase\r\n{\r\n\tpublic storageList: SendingAttachmentsDisplay[];\r\n\tpublic urlPacs: string;\r\n\tpublic deliveryStatus?: boolean;\r\n\tpublic hasLicense: boolean;\r\n\tpublic openViewer: boolean;\r\n\tdaysExpirationDelay?: Date | null;\r\n}\r\n//#endregion\r\n\r\n//#region Popup credentials\r\nclass CredentialsPopup\r\n{\r\n\t//#region Variables\r\n\tstatic KEY = \"10P9mU3aMttOeo10elo19dev13per\";\r\n\tprivate static _wndCredentialsPopup: Popup;\r\n\r\n\tprivate static _saveWindow?: Function;\r\n\r\n\tprivate static _txtPassword: vr.TextBox;\r\n\tprivate static _txtPin: vr.TextBox;\r\n\tprivate static _txtOtp: vr.TextBox;\r\n\t//#endregion\r\n\r\n\t//#region Initialize\r\n\tprivate static initialize()\r\n\t{\r\n\t\tlet promise = new Promise((callback: Function) =>\r\n\t\t{\r\n\t\t\tif (this._wndCredentialsPopup != null) { callback(); return; }\r\n\r\n\t\t\t//#region Window\r\n\t\t\tthis._wndCredentialsPopup = new Popup(Rotator.container(),\r\n\t\t\t\t{\r\n\t\t\t\t\tcloseable: false,\r\n\t\t\t\t\theight: \"auto\",\r\n\t\t\t\t\tmodal: true,\r\n\t\t\t\t\twidth: \"Calc(100% - 40px)\"\r\n\t\t\t\t});\r\n\t\t\t//#endregion\r\n\r\n\t\t\tcallback();\r\n\t\t});\r\n\t\treturn promise;\r\n\t}\r\n\t//#endregion\r\n\r\n\t//#region Open\r\n\tstatic open()\r\n\t{\r\n\t\tlet promise = new Promise((callback: Function) =>\r\n\t\t{\r\n\t\t\tthis.initialize().then(() =>\r\n\t\t\t{\r\n\t\t\t\t//#region Window opening\r\n\t\t\t\tthis._saveWindow = callback;\r\n\t\t\t\t//#endregion\r\n\r\n\t\t\t\tthis.createControls().then(() => \r\n\t\t\t\t{\r\n\t\t\t\t\tthis.clear();\r\n\t\t\t\t\tthis._wndCredentialsPopup.open();\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t\treturn promise;\r\n\t}\r\n\t//#endregion\r\n\r\n\t//#region Create controls\r\n\tprivate static createControls()\r\n\t{\r\n\t\tlet promise = new Promise((callback: Function) =>\r\n\t\t{\r\n\t\t\tif (this._txtPassword != null)\r\n\t\t\t{\r\n\t\t\t\tcallback();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._txtPassword = vr.createTextBox(\r\n\t\t\t\t{\r\n\t\t\t\t\tlabel: \"Password\",\r\n\t\t\t\t\tplaceholder: \"Inserisci Password\",\r\n\t\t\t\t\tonEnterKey: () => this.save(),\r\n\t\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t\t}, this._wndCredentialsPopup.element());\r\n\r\n\t\t\tthis._txtPin = vr.createTextBox(\r\n\t\t\t\t{\r\n\t\t\t\t\tlabel: \"PIN\",\r\n\t\t\t\t\tplaceholder: \"Inserici PIN\",\r\n\t\t\t\t\tonEnterKey: () => this.save(),\r\n\t\t\t\t\tmode: vr.TextModeEnum.Password,\r\n\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t\t}, this._wndCredentialsPopup.element());\r\n\r\n\t\t\tthis._txtOtp = vr.createTextBox(\r\n\t\t\t\t{\r\n\t\t\t\t\tlabel: \"OTP\",\r\n\t\t\t\t\tvisible: false,\r\n\t\t\t\t\tplaceholder: \"Inserisci OTP ricevuto\",\r\n\t\t\t\t\tonEnterKey: () => this.save(),\r\n\t\t\t\t\tmode: vr.TextModeEnum.Password,\r\n\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t\t}, this._wndCredentialsPopup.element());\r\n\r\n\t\t\tlet divButtons = vr.div(this._wndCredentialsPopup.element(), { css: \"display: flex; justify-content: space-between; margin-top: 15px;\" });\r\n\t\t\tvr.createButton({\r\n\t\t\t\ttext: \"Conferma\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\tcssContainer: \"margin-right: 5px;\",\r\n\t\t\t\tclass: \"vrButtonChangePassword vrButtonPatient\",\r\n\t\t\t\tonClick: (e) => \r\n\t\t\t\t{\r\n\t\t\t\t\tthis.save();\r\n\t\t\t\t}\r\n\t\t\t}, divButtons)\r\n\r\n\t\t\tvr.createButton({\r\n\t\t\t\ttext: \"Chiudi\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\tcssContainer: \"margin-left: 5px;\",\r\n\t\t\t\tclass: \"vrButtonChangePassword vrButtonPatient\",\r\n\t\t\t\tonClick: (e) => \r\n\t\t\t\t{\r\n\t\t\t\t\tthis.close()\r\n\t\t\t\t}\r\n\t\t\t}, divButtons);\r\n\r\n\t\t\tcallback();\r\n\t\t});\r\n\t\treturn promise;\r\n\t}\r\n\t//#endregion\r\n\r\n\t//#region Clear\r\n\tprivate static clear()\r\n\t{\r\n\t\tthis._txtPassword.clear();\r\n\t\tthis._txtPin.clear();\r\n\t\tthis._txtOtp.clear();\r\n\t\tthis._txtOtp.hide();\r\n\t\tthis._txtPassword.focus();\r\n\t}\r\n\t//#endregion\r\n\r\n\t//#region Common popup methods\r\n\tstatic window()\r\n\t{\r\n\t\treturn this._wndCredentialsPopup;\r\n\t}\r\n\r\n\tstatic close()\r\n\t{\r\n\t\tthis._wndCredentialsPopup.close();\r\n\t}\r\n\r\n\tprivate static save()\r\n\t{\r\n\t\t//#region Check\r\n\t\tlet error = false;\r\n\t\tif (this._txtPin.isEmpty())\r\n\t\t{\r\n\t\t\tvr.notifyError(\"PIN obbligatorio\");\r\n\t\t\terror = true;\r\n\t\t}\r\n\r\n\t\tif (this._txtPassword.isEmpty())\r\n\t\t{\r\n\t\t\tvr.notifyError(\"Password obbligatoria\");\r\n\t\t\terror = true;\r\n\t\t}\r\n\r\n\t\tif (this._txtOtp.visible() && this._txtOtp.isEmpty())\r\n\t\t{\r\n\t\t\tvr.notifyError(\"OTP obbligatorio\");\r\n\t\t\terror = true;\r\n\t\t}\r\n\r\n\t\tif (error)\r\n\t\t\treturn;\r\n\t\t//#endregion\r\n\r\n\t\tlet request = new ReportSendingLoginRequest();\r\n\t\trequest.pin = this._txtPin.value();\r\n\t\trequest.password = this._txtPassword.value();\r\n\t\trequest.otp = this._txtOtp.value();\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: ReportSendingLoginResponse) => \r\n\t\t\t\t{\r\n\t\t\t\t\tif (response.requireOTP)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis._txtOtp.show();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (this._saveWindow != null) this._saveWindow();\r\n\t\t\t\t\tthis.close();\r\n\t\t\t\t},\r\n\t\t\t\terror: (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis._txtOtp.clear();\r\n\t\t\t\t},\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\t//#endregion\r\n}\r\n\r\n//#region Classes\r\nclass ReportSendingLoginRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/ReportSendingLogin\";\r\n\r\n\tpublic pin: string;\r\n\tpublic password: string;\r\n\tpublic otp?: string | null;\r\n}\r\n\r\nclass ReportSendingLoginResponse extends WebApiResponseBase\r\n{\r\n\tpublic requireOTP: boolean;\r\n\tpublic fileInfo: FileInfo;\r\n}\r\n\r\nclass FileInfo\r\n{\r\n\tpublic dataBase64: string;\r\n\tpublic fileName: string;\r\n\tpublic reportSendingId: number;\r\n\tpublic reportId?: number;\r\n}\r\n//#endregion\r\n\r\n//#endregion","import { WebApiRequestBase, WebApiResponseBase } from \"../shared/webApi\";\r\nimport { PageEnum, puma, Rotator } from \"../rotator\";\r\nimport { Support } from \"../support\";\r\nimport { ReportItem, SendingAttachmentsDisplay } from \"../../src/shared/common\";\r\nimport { ReportList } from \"./reportList\";\r\nimport { FileList } from \"./fileList\";\r\n\r\nexport class ReportSendingStorageList\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\tprivate static _parameters: ReportSendingStorageListParameters;\r\n\tprivate static _divStorageFiles: HTMLElement;\r\n\r\n\tstatic initialize(parameters: ReportSendingStorageListParameters)\r\n\t{\r\n\t\tthis._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\t\tthis._container.style.cssText += \"position: relative;\";\r\n\t\tRotator.title(\"ALLEGATI\");\r\n\r\n\t\tthis._parameters = parameters;\r\n\r\n\t\tSupport.checkLogin(() =>\r\n\t\t{\r\n\t\t\tthis._divStorageFiles = vr.div(this._container);\r\n\t\t\tthis.drawStorageFiles();\r\n\t\t}), () => Rotator.page(PageEnum.ReportList), () => Rotator.page(PageEnum.ReportSendingStorageList);\r\n\t}\r\n\r\n\tprivate static drawStorageFiles()\r\n\t{\r\n\t\tpuma(this._divStorageFiles).empty();\r\n\r\n\t\t//#region Report\r\n\t\tlet divReport = this.drawReport(this._parameters.report, this._divStorageFiles);\r\n\r\n\t\tvr.createSeparator({\r\n\t\t\torientation: vr.OrientationEnum.Horizontal,\r\n\t\t\tcssContainer: \"margin-top: -16px !important;\"\r\n\t\t}, this._divStorageFiles);\r\n\t\t//#endregion\r\n\r\n\t\t//#region PACS\r\n\t\tif (this._parameters.openViewer)\r\n\t\t{\r\n\t\t\tvr.createButton({\r\n\t\t\t\ttext: \"Visualizza immagini\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\t\tonClick: (e) => \r\n\t\t\t\t{\r\n\t\t\t\t\tlet request = new GetPacsOrdersRequest();\r\n\t\t\t\t\trequest.reportSendingId = this._parameters.report.reportSendingId;\r\n\t\t\t\t\trequest.call(\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tsuccess: (response: GetPacsOrdersResponse) => \r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tswitch (response.pacsType)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tcase PacsType.O3_Web:\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tlocation.href = response.webLink;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase PacsType.Webinar:\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tlocation.href = response.webLink;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase PacsType.Remoteye:\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tlocation.href = response.webLink;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\t\t\t\tloader: Rotator.container()\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}, puma(divReport).find(\".divReportButtons\")[0])\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Send to Doctolib\r\n\t\tif (Rotator.configuration().hasDoctolibAccount && !this._parameters!.excludeSendDocumentDoctolib)\r\n\t\t{\r\n\t\t\tvr.createButton({\r\n\t\t\t\ttext: \"Potrai visualizzare il referto \" + ((this._parameters!.daysExpirationDelay != null) ? \"fino al \" + new Date(this._parameters!.daysExpirationDelay).toItalyShortString() : \"per \" + Rotator.configuration().reportDeliveryDaysExpirationDelay + \" giorni\") + \". Clicca qui e conserva il documento su Doctolib\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tenable: Rotator.configuration().hasDoctolibSendDocumentParameter,\r\n\t\t\t\tcss: \"height: auto !important;\",\r\n\t\t\t\tcssContainer: \"margin-top: 5px;\",\r\n\t\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\t\tonClick: (e) => \r\n\t\t\t\t{\r\n\t\t\t\t\tlet request = new SendReportToDoctolibRequest();\r\n\t\t\t\t\trequest.reportSendingId = this._parameters.report.reportSendingId;\r\n\t\t\t\t\trequest.call(\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tsuccess: (response: SendReportToDoctolibResponse) => \r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvr.notify(\"Documento inviato con successo\");\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\t\t\t\tloader: Rotator.container()\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}, puma(divReport).find(\".divReportButtons\")[0])\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Files\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"File allegati\",\r\n\t\t\tcssContainer: \"padding-bottom: 5px; margin-bottom: 10px; margin-left: 5px; border-bottom: solid 2px \" + Rotator.color() + \";\"\r\n\t\t}, this._divStorageFiles)\r\n\r\n\t\tif (this._parameters.storageFileList.length == 0)\r\n\t\t{\r\n\t\t\tlet divNoRecords = vr.div(this._divStorageFiles, { class: \"vrPatientDivSlot\" });\r\n\t\t\tvr.createLabel({\r\n\t\t\t\ttext: \"Non sono presenti allegati\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\talign: vr.TextAlignEnum.Center\r\n\t\t\t}, divNoRecords);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tfor (let storageFile of this._parameters.storageFileList)\r\n\t\t\t\tthis.drawDetail(storageFile, this._divStorageFiles);\r\n\t\t}\r\n\t\t//#endregion\r\n\t}\r\n\r\n\tprivate static drawReport(report: ReportItem, container: HTMLElement)\r\n\t{\r\n\t\tlet divReport = vr.div(container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\t//#region Info\r\n\t\tlet divIconInfo = vr.div(divReport, { css: \"display: flex;\" });\r\n\r\n\t\tlet divInfo = vr.div(divIconInfo, { css: \"text-align: left; width: 100%;\" });\r\n\t\tvr.createLabel({\r\n\t\t\ttext: report.activityTypeName,\r\n\t\t\tbold: true,\r\n\t\t\tcss: \"text-overflow: ellipsis; overflow: hidden; width: 100%;\",\r\n\t\t\tcssContainer: \"width: Calc(100% - 55px);\"\r\n\t\t}, divInfo);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Buttons\r\n\t\tlet divButtons = vr.div(divReport, { class: \"divReportButtons\", css: \"margin-top: 10px;\" });\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Scarica referto\",\r\n\t\t\tcolorSettings: { textColor: Rotator.textColor(), background: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\tcssContainer: \"width: 100%;\",\r\n\t\t\tonClick: (e) => \r\n\t\t\t{\r\n\t\t\t\tReportList.downloadReport(report.storedFileId, report.date);\r\n\t\t\t}\r\n\t\t}, divButtons);\r\n\t\t//#endregion\r\n\r\n\t\treturn divReport;\r\n\t}\r\n\r\n\tprivate static drawDetail(file: SendingAttachmentsDisplay, container: HTMLElement): HTMLElement\r\n\t{\r\n\t\tlet divDetail = vr.div(container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\t//#region Icon/Info\r\n\t\tlet divIconInfo = vr.div(divDetail, { css: \"display: flex;\" });\r\n\t\tlet fileInfo = FileList.getFileInfo(file.mimeType)\r\n\t\tvr.icon(fileInfo.icon, divIconInfo, { css: \"font-size: 3em; margin-top: 2px; margin-right: 10px; color: \" + fileInfo.color + \";\" });\r\n\r\n\t\tlet divInfo = vr.div(divIconInfo, { css: \"text-align: left; width: 100%;\" });\r\n\t\tvr.createLabel({\r\n\t\t\ttext: file.fileName,\r\n\t\t\tbold: true,\r\n\t\t\tcss: \"text-overflow: ellipsis; overflow: hidden; width: 100%;\",\r\n\t\t\tcssContainer: \"width: Calc(100% - 55px);\"\r\n\t\t}, divInfo);\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: new Date(file.uploadDate).toItalyLongString(),\r\n\t\t\twidth: \"100%\"\r\n\t\t}, divInfo);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Buttons\r\n\t\tlet divButtons = vr.div(divDetail, { css: \"margin-top: 10px; display: flex; justify-content: space-between;\" });\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Scarica\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%;\",\r\n\t\t\tcssContainer: \"width: 100%;\",\r\n\t\t\tonClick: (e) => \r\n\t\t\t{\r\n\t\t\t\tthis.downloadReportSendingStorage(file.id, file.uploadDate);\r\n\t\t\t}\r\n\t\t}, divButtons);\r\n\t\t//#endregion\r\n\r\n\t\treturn divDetail;\r\n\t}\r\n\r\n\tprivate static downloadReportSendingStorage(id: number, date: Date)\r\n\t{\r\n\t\tlet request = new DownloadReportSendingStorageRequest();\r\n\t\trequest.reportSendingStorageId = id;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: DownloadReportSendingStorageResponse) => \r\n\t\t\t\t{\r\n\t\t\t\t\tvrshared.UtilityManager().downloadFile(response.base64, response.fileName, response.mimeType, true);\r\n\t\t\t\t},\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n}\r\n\r\n//#region Classes\r\nexport class ReportSendingStorageListParameters\r\n{\r\n\tstorageFileList: SendingAttachmentsDisplay[];\r\n\treport: ReportItem;\r\n\topenViewer: boolean;\r\n\tdaysExpirationDelay?: Date | null;\r\n\texcludeSendDocumentDoctolib: boolean;\r\n}\r\n\r\nclass DownloadReportSendingStorageRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/DownloadReportSendingStorage\";\r\n\tpublic reportSendingStorageId: number;\r\n}\r\n\r\nclass DownloadReportSendingStorageResponse extends WebApiResponseBase\r\n{\r\n\tpublic base64: string;\r\n\tpublic fileName: string;\r\n\tpublic mimeType: string;\r\n}\r\n\r\nclass GetPacsOrdersRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/GetPacsOrders\";\r\n\tpublic reportSendingId: number;\r\n}\r\n\r\nclass GetPacsOrdersResponse extends WebApiResponseBase\r\n{\r\n\tpublic orders: any[];\r\n\tpublic webLink: string;\r\n\tpublic pacsType: PacsType;\r\n\tpublic windowUrl: string;\r\n}\r\n\r\nenum PacsType\r\n{\r\n\tSectra = 1,\r\n\tO3_Web = 2,\r\n\tO3_Local = 3,\r\n\tOsirix = 4,\r\n\tEyeRad = 5,\r\n\tSectra_Web = 6,\r\n\tFuji = 7,\r\n\tFuji_57 = 8,\r\n\tZeeromed_Import = 9,\r\n\tWebinar = 10,\r\n\tRemoteye = 11,\r\n}\r\n\r\nclass SendReportToDoctolibRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/SendReportToDoctolib\";\r\n\tpublic reportSendingId: number;\r\n}\r\n\r\nclass SendReportToDoctolibResponse extends WebApiResponseBase\r\n{\r\n\r\n}\r\n//#endregion","import { WebComponentSourceModeEnum, WebComponentConfig, WebComponentModeEnum } from \"./main\";\r\nimport { Booking, BookingParameters } from \"./booking/booking\";\r\nimport { ActivityList } from \"./booking/activityList\";\r\nimport { WorkplaceList } from \"./booking/workplaceList\";\r\nimport { DoctorList } from \"./booking/doctorList\";\r\nimport { FromList } from \"./booking/fromList\";\r\nimport { ResourceTimeslots } from \"./booking/resourceTimeslots\";\r\nimport { TimeslotList, TimeslotListParameters } from \"./booking/timeslotList\";\r\nimport { Confirmation1 } from \"./booking/confirmation1\";\r\nimport { Login } from \"./login/login\";\r\nimport { Register } from \"./login/register\";\r\nimport { Confirmation2 } from \"./booking/confirmation2\";\r\nimport { ChangePassword } from \"./login/changePassword\";\r\nimport { ForgotPassword } from \"./login/forgotPassword\";\r\nimport { AppointmentList } from \"./privateArea/appointmentList\";\r\nimport { Menu } from \"./shared/menu\";\r\nimport { AppointmentDetail } from \"./privateArea/appointmentDetail\";\r\nimport { DocumentList } from \"./privateArea/documentList\";\r\nimport { ReportList } from \"./privateArea/reportList\";\r\nimport { FileList } from \"./privateArea/fileList\";\r\nimport { Profile } from \"./privateArea/profile\";\r\nimport { PaymentData } from \"./privateArea/paymentData\";\r\nimport { PaymentResult } from \"./booking/paymentResult\";\r\nimport { Support, TrackingCookieInfo } from \"./support\";\r\nimport { WorkplaceTimeslots } from \"./booking/workplaceTimeslots\";\r\nimport { SailorHome } from \"./sailor/sailorHome\";\r\nimport { SailorRegister } from \"./sailor/sailorRegister\";\r\nimport { InfoPage } from \"./info/infoPage\";\r\nimport { NoInternetConnection } from \"./shared/noInternetConnection\";\r\nimport { WaitingList } from \"./booking/waitingList\";\r\nimport { Dashboard } from \"./shared/dashboard\";\r\nimport { ReportSendingStorageList } from \"./privateArea/reportSendingStorageList\";\r\nimport { FileLoading } from \"./booking/fileLoading\";\r\nimport { BookingFor } from \"./booking/bookingFor\";\r\n\r\nexport class Rotator\r\n{\r\n\t//#region Variables\r\n\tprivate static _configuration: Configuration;\r\n\tprivate static _webComponentParameters: WebComponentConfig[];\r\n\tprivate static _pageHistory: PageEnum[] = [];\r\n\tprivate static _shadowRoot: ShadowRoot;\r\n\tprivate static _backgroundColor: string;\r\n\tprivate static _color: string;\r\n\tprivate static _appHeaderColor: string;\r\n\tprivate static _appHeaderTextColor: string;\r\n\tprivate static _token: string;\r\n\tprivate static _inBookingFlow: boolean;\r\n\tprivate static _cookieSessionTimeout: number | null;\r\n\tprivate static _bookingParameters: BookingParameters;\r\n\tprivate static _confirmationParameters: TimeslotListParameters | null;\r\n\tprivate static _trackingCookiesInfo: TrackingCookieInfo[];\r\n\tprivate static _sailorType: SailorTypeEnum;\r\n\tprivate static _campaignSourceId: number;\r\n\tprivate static _campaignMediumId: number;\r\n\tprivate static _campaignName: string;\r\n\tprivate static _mainButton: vr.Button;\r\n\tprivate static _filterAppointmentOnPast: boolean;\r\n\t//#endregion\r\n\r\n\tstatic initialize()\r\n\t{\r\n\t\tif (this.isMobile() || this.isApp())\r\n\t\t\t$(window).on(\"popstate\", () => this.back());\r\n\t}\r\n\r\n\tstatic patientUrl()\r\n\t{\r\n\t\tlet url = \"\";\r\n\t\tif (Rotator.webComponentParameters()[0].source == null)\r\n\t\t\tRotator.webComponentParameters()[0].source = WebComponentSourceModeEnum.Crm;\r\n\r\n\t\tswitch (Rotator.webComponentParameters()[0].source)\r\n\t\t{\r\n\t\t\tcase WebComponentSourceModeEnum.Crm: url = (location.href.includes(\"localhost\") || location.href.includes(\"ngrok\")) ? \"\" : \"https://booking.vrapp.it\"; break;\r\n\t\t\tcase WebComponentSourceModeEnum.Vettore: url = \"https://booking.vrapp.it\"; break;\r\n\t\t\tcase WebComponentSourceModeEnum.CrmLink: url = (location.href.includes(\"localhost\") || location.href.includes(\"ngrok\")) ? \"\" : \"https://booking.vrapp.it\"; break;\r\n\t\t\tcase WebComponentSourceModeEnum.Test: url = \"https://test1.vrapp.it\"; break;\r\n\t\t}\r\n\t\treturn url;\r\n\t}\r\n\r\n\tstatic cookieSessionTimeout(cookieSessionTimeout?: number | null)\r\n\t{\r\n\t\tif (cookieSessionTimeout != null)\r\n\t\t\tthis._cookieSessionTimeout = cookieSessionTimeout;\r\n\r\n\t\treturn this._cookieSessionTimeout;\r\n\t}\r\n\r\n\tstatic setCookieSession()\r\n\t{\r\n\t\tlet sessionId = vrshared.UtilityManager().getUrlParameter(\"sessionId\");\r\n\t\tif (sessionId == null || sessionId == \"\")\r\n\t\t\tsessionId = vrshared.CookieManager().getCookie(\"sessionId\");\r\n\r\n\t\tif (sessionId == null || sessionId.length == 0)\r\n\t\t\tsessionId = vrshared.UtilityManager().createGuid();\r\n\r\n\t\tvrshared.CookieManager().deleteCookie(\"sessionId\");\r\n\t\tif (Rotator.configuration() == null || !Rotator.isApp())\r\n\t\t\tvrshared.CookieManager().setCookieMinutes(\"sessionId\", sessionId, 30, { sameSite: vrshared.CookieSameSiteEnum.Lax, secured: true });\r\n\t\telse if (Rotator.isApp())\r\n\t\t\tvrshared.CookieManager().setCookieYears(\"sessionId\", sessionId, 1, { sameSite: vrshared.CookieSameSiteEnum.Lax, secured: true });\r\n\r\n\t\treturn sessionId;\r\n\t}\r\n\r\n\tstatic version()\r\n\t{\r\n\t\tlet version = this.configuration().vettoreVersion;\r\n\t\tif (version == null)\r\n\t\t\treturn 26;\r\n\r\n\t\treturn Number(version.slice(0, version.length - (version.length - 2)));\r\n\t}\r\n\r\n\tstatic mode()\r\n\t{\r\n\t\tif (Rotator.webComponentParameters()[0].mode == null)\r\n\t\t\tRotator.webComponentParameters()[0].mode = WebComponentModeEnum.AllModules;\r\n\r\n\t\treturn Rotator.webComponentParameters()[0].mode;\r\n\t}\r\n\r\n\tstatic token(token?: string | null)\r\n\t{\r\n\t\tif (token != null)\r\n\t\t\tthis._token = token;\r\n\r\n\t\treturn this._token;\r\n\t}\r\n\r\n\tstatic color(color?: string)\r\n\t{\r\n\t\tif (color != null)\r\n\t\t\tthis._backgroundColor = color;\r\n\r\n\t\treturn this._backgroundColor;\r\n\t}\r\n\r\n\tstatic textColor(color?: string)\r\n\t{\r\n\t\tif (color != null)\r\n\t\t\tthis._color = color;\r\n\r\n\t\treturn this._color;\r\n\t}\r\n\r\n\tstatic appHeaderColor(color?: string)\r\n\t{\r\n\t\tif (color != null)\r\n\t\t\tthis._appHeaderColor = color;\r\n\r\n\t\treturn this._appHeaderColor;\r\n\t}\r\n\r\n\tstatic appHeaderTextColor(color?: string)\r\n\t{\r\n\t\tif (color != null)\r\n\t\t\tthis._appHeaderTextColor = color;\r\n\r\n\t\treturn this._appHeaderTextColor;\r\n\t}\r\n\r\n\tstatic mainButton(button?: vr.Button)\r\n\t{\r\n\t\tif (button != null)\r\n\t\t\tthis._mainButton = button;\r\n\r\n\t\treturn this._mainButton;\r\n\t}\r\n\r\n\t//#region Marketing UTM\r\n\tstatic campaignSourceId(sourceId?: number)\r\n\t{\r\n\t\tif (sourceId != null)\r\n\t\t\tthis._campaignSourceId = sourceId;\r\n\r\n\t\treturn this._campaignSourceId;\r\n\t}\r\n\r\n\tstatic campaignMediumId(mediumId?: number)\r\n\t{\r\n\t\tif (mediumId != null)\r\n\t\t\tthis._campaignMediumId = mediumId;\r\n\r\n\t\treturn this._campaignMediumId;\r\n\t}\r\n\r\n\tstatic campaignName(name?: string)\r\n\t{\r\n\t\tif (name != null)\r\n\t\t\tthis._campaignName = name;\r\n\r\n\t\treturn this._campaignName;\r\n\t}\r\n\t//#endregion\r\n\r\n\tstatic header()\r\n\t{\r\n\t\treturn puma(\".vettorePatientHeader\")[0] as HTMLElement;\r\n\t}\r\n\r\n\tstatic title(title?: string)\r\n\t{\r\n\t\tif (title != null)\r\n\t\t\tvr.getControl(\"vettorePatientTitle\").value(title);\r\n\r\n\t\treturn vr.getControl(\"vettorePatientTitle\");\r\n\t}\r\n\r\n\tstatic burgerButton()\r\n\t{\r\n\t\treturn vr.getControl(\"vettorePatientBurgerButton\");\r\n\t}\r\n\r\n\tstatic backButton()\r\n\t{\r\n\t\treturn vr.getControl(\"vettorePatientBackButton\");\r\n\t}\r\n\r\n\tstatic container()\r\n\t{\r\n\t\treturn puma(\".vettorePatientContainer\")[0] as HTMLElement;\r\n\t}\r\n\r\n\tstatic headerTitleLogo()\r\n\t{\r\n\t\treturn puma(\".vettorePatientDivTitleLogo\")[0] as HTMLElement;\r\n\t}\r\n\r\n\t//#region Sailor\r\n\tstatic sailor()\r\n\t{\r\n\t\treturn this.webComponentParameters()[0].sailor;\r\n\t}\r\n\r\n\tstatic sailorType(sailorType?: SailorTypeEnum)\r\n\t{\r\n\t\tif (sailorType != null)\r\n\t\t\tthis._sailorType = sailorType;\r\n\r\n\t\treturn this._sailorType;\r\n\t}\r\n\t//#endregion\r\n\r\n\tstatic fromSpid()\r\n\t{\r\n\t\treturn this.webComponentParameters()[0].fromSpid;\r\n\t}\r\n\r\n\tstatic deviceType()\r\n\t{\r\n\t\tlet deviceType = this.webComponentParameters()[0].deviceType;\r\n\t\tif (deviceType != 1 && deviceType != 2)\r\n\t\t\treturn null;\r\n\r\n\t\treturn deviceType;\r\n\t}\r\n\r\n\tstatic shadowRoot(shadowRoot?: ShadowRoot)\r\n\t{\r\n\t\tif (shadowRoot != null)\r\n\t\t\tthis._shadowRoot = shadowRoot;\r\n\r\n\t\treturn this._shadowRoot;\r\n\t}\r\n\r\n\tstatic configuration(configuration?: Configuration)\r\n\t{\r\n\t\tif (configuration != null)\r\n\t\t{\r\n\t\t\tthis._configuration = configuration;\r\n\t\t\tRotator.initialize();\r\n\t\t}\r\n\t\treturn this._configuration;\r\n\t}\r\n\r\n\tstatic webComponentParameters(parameters?: WebComponentConfig[])\r\n\t{\r\n\t\tif (parameters != null)\r\n\t\t{\r\n\t\t\tlet demoUrl = vrshared.UtilityManager().getUrlParameter(\"demovrurl\");\r\n\t\t\tif (demoUrl != null && demoUrl != \"\")\r\n\t\t\t\tparameters[0].url = \"https://\" + demoUrl + \".vettoreweb.it\";\r\n\r\n\t\t\tthis._webComponentParameters = parameters;\r\n\t\t}\r\n\t\treturn this._webComponentParameters;\r\n\t}\r\n\r\n\tstatic doctorMode()\r\n\t{\r\n\t\treturn this.patientId() != null;\r\n\t}\r\n\r\n\tstatic patientId()\r\n\t{\r\n\t\tlet patientId = this.webComponentParameters()[0].patientId;\r\n\t\tif (patientId != null && patientId != 0)\r\n\t\t\treturn patientId;\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tstatic isModal()\r\n\t{\r\n\t\tif (Rotator.webComponentParameters()[0].modal == null)\r\n\t\t\tRotator.webComponentParameters()[0].modal = true;\r\n\r\n\t\treturn Rotator.webComponentParameters()[0].modal;\r\n\t}\r\n\r\n\tstatic isApp()\r\n\t{\r\n\t\treturn Rotator.configuration().appMobile;\r\n\t}\r\n\r\n\tstatic isMobile()\r\n\t{\r\n\t\treturn vrshared.DeviceManager().isMobile();\r\n\t}\r\n\r\n\tstatic isTablet()\r\n\t{\r\n\t\treturn vrshared.DeviceManager().isTablet();\r\n\t}\r\n\r\n\tstatic bookingParameters(bookingParameters?: BookingParameters | null)\r\n\t{\r\n\t\tif (bookingParameters === null)\r\n\t\t\tthis._bookingParameters = new BookingParameters();\r\n\t\telse if (bookingParameters != null)\r\n\t\t\tthis._bookingParameters = bookingParameters;\r\n\r\n\t\treturn this._bookingParameters;\r\n\t}\r\n\r\n\tstatic confirmationParameters(confirmationParameters?: TimeslotListParameters | null): TimeslotListParameters | null\r\n\t{\r\n\t\tif (confirmationParameters === null)\r\n\t\t\tthis._confirmationParameters = null;\r\n\t\telse if (confirmationParameters != null)\r\n\t\t\tthis._confirmationParameters = confirmationParameters;\r\n\r\n\t\treturn this._confirmationParameters;\r\n\t}\r\n\r\n\tstatic inBookingFlow(inBookingFlow?: boolean)\r\n\t{\r\n\t\tif (inBookingFlow != null)\r\n\t\t\tthis._inBookingFlow = inBookingFlow;\r\n\r\n\t\treturn this._inBookingFlow;\r\n\t}\r\n\r\n\tstatic filterAppointmentOnPast(state?: boolean)\r\n\t{\r\n\t\tif (state != null)\r\n\t\t\tthis._filterAppointmentOnPast = state;\r\n\r\n\t\treturn this._filterAppointmentOnPast;\r\n\t}\r\n\r\n\tstatic jqueryVariable()\r\n\t{\r\n\t\treturn (this.webComponentParameters()[0].jqueryVariable != null) ? eval(this.webComponentParameters()[0].jqueryVariable) : jQuery;\r\n\t}\r\n\r\n\tstatic trackingCookiesInfo(trackingCookiesInfo?: TrackingCookieInfo[])\r\n\t{\r\n\t\tif (trackingCookiesInfo != null)\r\n\t\t\tthis._trackingCookiesInfo = trackingCookiesInfo;\r\n\r\n\t\treturn this._trackingCookiesInfo;\r\n\t}\r\n\r\n\tstatic page(page?: PageEnum, parameters?: any)\r\n\t{\r\n\t\tif (page != null)\r\n\t\t{\r\n\t\t\tif (this._pageHistory.last() != page)\r\n\t\t\t\tthis._pageHistory.push(page);\r\n\r\n\t\t\tthis.setHeader(page);\r\n\t\t\tpuma(Rotator.container()).removeClass(\"vettorePatientContainerAppDashboard\");\r\n\r\n\t\t\tpuma(this.container()).empty();\r\n\t\t\tlet pageTitle = \"\";\r\n\t\t\tswitch (page)\r\n\t\t\t{\r\n\t\t\t\t//#region Booking\r\n\t\t\t\tcase PageEnum.Booking: Booking.initialize(); break;\r\n\t\t\t\tcase PageEnum.ActivityList: ActivityList.initialize(); break;\r\n\t\t\t\tcase PageEnum.WorkplaceList: WorkplaceList.initialize(); break;\r\n\t\t\t\tcase PageEnum.DoctorList: DoctorList.initialize(); break;\r\n\t\t\t\tcase PageEnum.FromList: FromList.initialize(); break;\r\n\t\t\t\tcase PageEnum.ResourceTimeslots: ResourceTimeslots.initialize(); break;\r\n\t\t\t\tcase PageEnum.WorkplaceTimeslots: WorkplaceTimeslots.initialize(); break;\r\n\t\t\t\tcase PageEnum.TimeslotList: TimeslotList.initialize(parameters); break;\r\n\t\t\t\tcase PageEnum.Confirmation1: Confirmation1.initialize(parameters); break;\r\n\t\t\t\tcase PageEnum.Confirmation2: Confirmation2.initialize(); break;\r\n\t\t\t\tcase PageEnum.PaymentResult: PaymentResult.initialize(parameters); break;\r\n\t\t\t\tcase PageEnum.WaitingList: WaitingList.initialize(parameters); break;\r\n\t\t\t\tcase PageEnum.FileLoading: FileLoading.initialize(); break;\r\n\t\t\t\tcase PageEnum.BookingFor: BookingFor.initialize(); break;\r\n\t\t\t\t//#endregion\r\n\r\n\t\t\t\t//#region Login\r\n\t\t\t\tcase PageEnum.Login: Login.initialize(parameters); break;\r\n\t\t\t\tcase PageEnum.Register: Register.initialize(parameters); break;\r\n\t\t\t\tcase PageEnum.ForgotPassword: ForgotPassword.initialize(); break;\r\n\t\t\t\tcase PageEnum.ChangePassword: ChangePassword.initialize(parameters); break;\r\n\t\t\t\t//#endregion\r\n\r\n\t\t\t\t//#region Private Area\r\n\t\t\t\tcase PageEnum.AppointmentList: AppointmentList.initialize(); break;\r\n\t\t\t\tcase PageEnum.AppointmentDetail: AppointmentDetail.initialize(parameters); break;\r\n\t\t\t\tcase PageEnum.DocumentList: DocumentList.initialize(); break;\r\n\t\t\t\tcase PageEnum.ReportList: ReportList.initialize(); break;\r\n\t\t\t\tcase PageEnum.ReportSendingStorageList: ReportSendingStorageList.initialize(parameters); break;\r\n\t\t\t\tcase PageEnum.FileList: FileList.initialize(); break;\r\n\t\t\t\tcase PageEnum.Profile: Profile.initialize(); break;\r\n\t\t\t\tcase PageEnum.PaymentData: PaymentData.initialize(parameters); break;\r\n\t\t\t\t//#endregion\r\n\r\n\t\t\t\t//#region Info\r\n\t\t\t\tcase PageEnum.Info: InfoPage.initialize(); break;\r\n\t\t\t\t//#endregion\r\n\r\n\t\t\t\t//#region Sailor\r\n\t\t\t\tcase PageEnum.SailorHome: SailorHome.initialize(); break;\r\n\t\t\t\tcase PageEnum.SailorRegister: SailorRegister.initialize(parameters); break;\r\n\t\t\t\t//#endregion\r\n\r\n\t\t\t\t//#region Other\r\n\t\t\t\tcase PageEnum.NoInternetConnection: NoInternetConnection.initialize(); break;\r\n\t\t\t\tcase PageEnum.Dashboard: Dashboard.initialize(); break;\r\n\t\t\t\t//#endregion\r\n\t\t\t}\r\n\r\n\t\t\tpageTitle = \"\";\r\n\r\n\t\t\tif (this.isMobile() || this.isApp())\r\n\t\t\t\twindow.history.pushState(\"\", \"\", pageTitle);\r\n\r\n\t\t\t//#region Header button\r\n\t\t\tif (page == PageEnum.Booking || page == PageEnum.AppointmentList || page == PageEnum.DocumentList || page == PageEnum.ReportList\r\n\t\t\t\t|| page == PageEnum.FileList || page == PageEnum.Profile || page == PageEnum.PaymentResult || page == PageEnum.SailorHome\r\n\t\t\t\t|| page == PageEnum.Info || page == PageEnum.Dashboard)\r\n\t\t\t\tRotator.backButton().hide();\r\n\t\t\telse\r\n\t\t\t\tRotator.backButton().show();\r\n\r\n\t\t\tif (page == PageEnum.Booking || page == PageEnum.AppointmentList || page == PageEnum.DocumentList || page == PageEnum.ReportList\r\n\t\t\t\t|| page == PageEnum.FileList || page == PageEnum.Profile || page == PageEnum.Login || page == PageEnum.SailorHome\r\n\t\t\t\t|| page == PageEnum.Info || page == PageEnum.Dashboard)\r\n\t\t\t{\r\n\t\t\t\tif (page != PageEnum.Login)\r\n\t\t\t\t\tRotator.burgerButton().show();\r\n\r\n\t\t\t\tif (page == PageEnum.SailorHome || page == PageEnum.Dashboard)\r\n\t\t\t\t\tMenu.highlightItem(PageEnum.Booking);\r\n\t\t\t\telse\r\n\t\t\t\t\tMenu.highlightItem(page);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tRotator.burgerButton().hide();\r\n\r\n\t\t\tif (Rotator.sailor() && page == PageEnum.Booking)\r\n\t\t\t{\r\n\t\t\t\tRotator.backButton().show();\r\n\t\t\t\tRotator.burgerButton().hide();\r\n\t\t\t}\r\n\r\n\t\t\tif (page == PageEnum.NoInternetConnection)\r\n\t\t\t{\r\n\t\t\t\tRotator.backButton().hide();\r\n\t\t\t\tRotator.burgerButton().hide();\r\n\t\t\t}\r\n\t\t\t//#endregion\r\n\t\t}\r\n\t\treturn this._pageHistory.last();\r\n\t}\r\n\r\n\tprivate static setHeader(page: PageEnum)\r\n\t{\r\n\t\tif (Rotator.isApp() && Rotator.configuration().appCustomHomeAppMobile && page == PageEnum.Booking)\r\n\t\t{\r\n\t\t\tlet base64Logo = Support.getAppLogo();\r\n\t\t\tif (base64Logo != null && base64Logo != \"\")\r\n\t\t\t{\r\n\t\t\t\tRotator.headerTitleLogo().style.cssText += \"padding-bottom: 20px;\";\r\n\t\t\t\tRotator.burgerButton().container().style.cssText += \"align-items: start;\";\r\n\t\t\t\tRotator.burgerButton().element().style.cssText += \"background-color: \" + Rotator.appHeaderColor() + \"; color: \" + Rotator.appHeaderTextColor() + \";\";\r\n\t\t\t\tpuma(Rotator.header()).addClass(\"vettorePatientHeaderApp\");\r\n\t\t\t\tRotator.header().style.cssText += \"background-color: \" + Rotator.appHeaderColor() + \";\";\r\n\t\t\t\tpuma(Rotator.container()).addClass(\"vettorePatientContainerApp\");\r\n\t\t\t\tRotator.title().element().style.cssText += \"color: \" + Rotator.appHeaderTextColor() + \";\";\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tRotator.headerTitleLogo().style.cssText += \"padding-bottom: 0px;\";\r\n\t\t\tRotator.burgerButton().container().style.cssText += \"align-items: center;\";\r\n\t\t\tRotator.burgerButton().element().style.cssText += \"background-color: \" + (Rotator.isMobile() ? Rotator.color() : \"#FFF\") + \"; color: \" + (Rotator.isMobile() ? ((Rotator.configuration().appTextColorWhite) ? \"#FFF\" : \"#000\") : Rotator.color() + \";\");\r\n\t\t\tpuma(Rotator.header()).removeClass(\"vettorePatientHeaderApp\");\r\n\t\t\tRotator.header().style.cssText += \"background-color: \" + (Rotator.isMobile() ? Rotator.color() : \"#FFF\") + \";\";\r\n\t\t\tpuma(Rotator.container()).removeClass(\"vettorePatientContainerApp\");\r\n\t\t\tRotator.title().element().style.cssText += \"color: \" + (Rotator.isMobile() ? ((Rotator.configuration().appTextColorWhite) ? \"#FFF\" : \"#000\") : Rotator.color() + \";\");\r\n\t\t}\r\n\t}\r\n\r\n\tstatic goToFirstPage()\r\n\t{\r\n\t\tthis.page(this._pageHistory.first());\r\n\t\tthis._pageHistory = [];\r\n\t}\r\n\r\n\tstatic firstPage()\r\n\t{\r\n\t\treturn this._pageHistory.first();\r\n\t}\r\n\r\n\tstatic lastPage()\r\n\t{\r\n\t\treturn this._pageHistory.last();\r\n\t}\r\n\r\n\tstatic pageHistory()\r\n\t{\r\n\t\treturn this._pageHistory;\r\n\t}\r\n\r\n\tstatic clearPageHistory()\r\n\t{\r\n\t\tthis._pageHistory = [];\r\n\t}\r\n\r\n\tstatic goToMainPage(parameters?: any)\r\n\t{\r\n\t\tif (Rotator.sailor())\r\n\t\t\tRotator.page(PageEnum.SailorHome, parameters);\r\n\t\telse if (Rotator.configuration().appShowDashboard && Rotator.isApp())\r\n\t\t\tRotator.page(PageEnum.Dashboard)\r\n\t\telse\r\n\t\t\tRotator.page(PageEnum.Booking, parameters);\r\n\t}\r\n\r\n\tstatic back(parameters?: any)\r\n\t{\r\n\t\tlet firstPage = Rotator.sailor() ? PageEnum.SailorHome : PageEnum.Booking;\r\n\t\tthis._pageHistory.pop();\r\n\r\n\t\tif (this._pageHistory.length > 0)\r\n\t\t\tthis.page(this._pageHistory.last(), parameters);\r\n\t\telse if (this._pageHistory.length == 0)\r\n\t\t\tthis.goToMainPage(parameters);\r\n\r\n\t\tif (this._pageHistory.last() == firstPage)\r\n\t\t\tthis.clearPageHistory();\r\n\t}\r\n}\r\n\r\nexport function puma(element: any)\r\n{\r\n\treturn (Rotator.shadowRoot() != null && Rotator.jqueryVariable()(element).length == 0) ? Rotator.jqueryVariable()(Rotator.shadowRoot()).find(element) : Rotator.jqueryVariable()(element);\r\n}\r\n\r\n//#region Classes\r\n\r\nexport enum PageEnum\r\n{\r\n\tBooking = \"Booking\",\r\n\tLogin = \"Login\",\r\n\tActivityList = \"ActivityList\",\r\n\tWorkplaceList = \"WorkplaceList\",\r\n\tDoctorList = \"DoctorList\",\r\n\tFromList = \"FromList\",\r\n\tResourceTimeslots = \"ResourceTimeslots\",\r\n\tTimeslotList = \"TimeslotList\",\r\n\tConfirmation1 = \"Confirmation1\",\r\n\tForgotPassword = \"ForgotPassword\",\r\n\tRegister = \"Register\",\r\n\tConfirmation2 = \"Confirmation2\",\r\n\tChangePassword = \"ChangePassword\",\r\n\tAppointmentList = \"AppointmentList\",\r\n\tAppointmentDetail = \"AppointmentDetail\",\r\n\tDocumentList = \"DocumentList\",\r\n\tReportList = \"ReportList\",\r\n\tReportSendingStorageList = \"ReportSendingStorageList\",\r\n\tFileList = \"FileList\",\r\n\tProfile = \"Profile\",\r\n\tPaymentData = \"PaymentData\",\r\n\tPaymentResult = \"PaymentResult\",\r\n\tWorkplaceTimeslots = \"WorkplaceTimeslots\",\r\n\tSailorHome = \"SailorHome\",\r\n\tSailorRegister = \"SailorRegister\",\r\n\tInfo = \"Info\",\r\n\tNoInternetConnection = \"NoInternetConnection\",\r\n\tWaitingList = \"WaitingList\",\r\n\tDashboard = \"Dashboard\",\r\n\tFileLoading = \"FileLoading\",\r\n\tBookingFor = \"BookingFor\"\r\n}\r\n\r\nexport class Configuration\r\n{\r\n\tpublic keyMessageCheck: string;\r\n\tpublic appColor: string;\r\n\tpublic appTextColorWhite: boolean;\r\n\tpublic appCustomHomeAppMobile: boolean;\r\n\tpublic appMobileHeaderColor: string;\r\n\tpublic appMobileHeaderTextColor: string;\r\n\tpublic appShowDashboard: boolean;\r\n\tpublic appDashboardShowLogo: boolean;\r\n\tpublic appDashboardBackgroundColor: string;\r\n\tpublic appDashboardBackgroundImage: string;\r\n\tpublic appName: string;\r\n\tpublic appNameSociety: string;\r\n\tpublic appPhoneNumber: string;\r\n\tpublic appEmail: string;\r\n\tpublic appWebsite: string;\r\n\tpublic appPaypalSandboxMode: boolean;\r\n\tpublic appPaypalClientId: string;\r\n\tpublic appPaypalClientSecret: string;\r\n\tpublic appPaypalClientIdSandbox: string;\r\n\tpublic appPaypalClientSecretSandbox: string;\r\n\tpublic appShowPlantInFiles: boolean;\r\n\tpublic appCancelAppointment: boolean;\r\n\tpublic appDaysBeforeCancelAppointment: number;\r\n\tpublic appHoursBeforeTakeAppointment: number;\r\n\tpublic appShowAppointmentDuration: boolean;\r\n\tpublic appShowAppointmentAborted: boolean;\r\n\tpublic appShowFiles: boolean;\r\n\tpublic appUploadFiles: boolean;\r\n\tpublic appShowReports: boolean;\r\n\tpublic appUploadReports: boolean;\r\n\tpublic appShowDocuments: boolean;\r\n\tpublic appShowWorkplaces: boolean;\r\n\tpublic appRequiredWorkplaceChoice: boolean;\r\n\tpublic appNoOnlineBookingMessage: string;\r\n\tpublic appNoAvailabilitiesMessage: string;\r\n\tpublic appNoAvailabilitiesPhoneNumber: string;\r\n\tpublic appNoAvailabilitiesMail: string;\r\n\tpublic appCreateNewPatient: boolean;\r\n\tpublic appWebRtcRecordSessionAudio: boolean;\r\n\tpublic appWebRtcMessageRecordSessionAudio: string;\r\n\tpublic appLoginRequired: AppLoginModeEnum;\r\n\tpublic appBookingAppointments: boolean;\r\n\tpublic appOnlyActivitiesOnline: boolean;\r\n\tpublic appPreregisterSubject: boolean;\r\n\tpublic appCanPatientEditProfileData: boolean;\r\n\tpublic privacyCommercial: boolean;\r\n\tpublic privacyText: string;\r\n\tpublic privacyHealthInfoText: string;\r\n\tpublic plant: PlantInfo;\r\n\tpublic appShowAppointmentPrice: boolean;\r\n\tpublic appAppointmentPriceZeroManagement: OnlineBookingPriceZeroEnum;\r\n\tpublic appShowActivityTypePrice: boolean;\r\n\tpublic appActivityTypePriceZeroManagement: OnlineBookingPriceZeroEnum;\r\n\tpublic appConfirmationMessageAddedToWaitingList: string;\r\n\tpublic appUTMCampaignName: string;\r\n\tpublic appUTMCampaignMedium: string;\r\n\tpublic appUTMCampaignSource: string;\r\n\tpublic appPrivacyLabelText: string;\r\n\tpublic appPrivacyCommercialLabelText: string;\r\n\tpublic appHidePrivacyCommercial: boolean;\r\n\tpublic appMobile: boolean;\r\n\tpublic appUseGeolocationInsteadOfWorkplaceOrder: boolean;\r\n\tpublic appPlaceholderPatientNotes: string;\r\n\tpublic appNoBookingMinor: boolean;\r\n\tpublic vettoreVersion: string;\r\n\tpublic appHideRegistrationIntoLogin: boolean;\r\n\tpublic appHideRegistrationIntoConfirmationPage: boolean;\r\n\tpublic appAllowBookingFor: boolean;\r\n\tpublic appFileCssBase64: string;\r\n\tpublic appFileCssBase64TextContent: string;\r\n\tpublic appMessagePrePayment: string;\r\n\tpublic appMessagePaymentRequired: string;\r\n\tpublic appHasEmailNotificationsPlannedForLoginCredentials: boolean;\r\n\tpublic appUseDoubleFactorAuthentication: boolean;\r\n\tappHideInfoSection: boolean;\r\n\tappHideFiscalCodeImpersonification: boolean;\r\n\tappSpidEnabled: boolean;\r\n\thasDoctolibSendDocumentParameter: boolean;\r\n\thasDoctolibAccount: boolean;\r\n\treportDeliveryDaysExpirationDelay: number;\r\n\tappCanSubjectUploadFilesIntoAppointment: boolean;\r\n\tappUploadFilesExtensions: string;\r\n}\r\n\r\nexport enum OnlineBookingPriceZeroEnum\r\n{\r\n\tFree,\r\n\tDecimal,\r\n\tHide\r\n}\r\n\r\nexport enum AppLoginModeEnum\r\n{\r\n\tNever,\r\n\tAlways,\r\n\tOnlyBeforeBooking\r\n}\r\n\r\nclass PlantInfo\r\n{\r\n\tpublic id: number;\r\n\tpublic name: string;\r\n\tpublic street: string;\r\n\tpublic city: string;\r\n\tpublic zip: string;\r\n\tpublic province: string;\r\n\tpublic geoCoordinate: GeoCoordinate;\r\n\tpublic phoneNumbers: string[];\r\n\tpublic workplaces: WorkplacesInfo[];\r\n\tpublic emails: string[];\r\n}\r\n\r\nexport class WorkplacesInfo\r\n{\r\n\tpublic id: number;\r\n\tpublic name: string;\r\n\tpublic street: string;\r\n\tpublic city: string;\r\n\tpublic zip: string;\r\n\tpublic province: string;\r\n\tpublic geoCoordinate: GeoCoordinate;\r\n\tpublic phoneNumbers: string[];\r\n\tpublic emails: string[];\r\n}\r\n\r\nclass GeoCoordinate\r\n{\r\n\tpublic latitude: number;\r\n\tpublic longitude: number;\r\n}\r\n\r\nexport enum SailorTypeEnum\r\n{\r\n\tSasn = 10,\r\n\tUsmaf = 20\r\n}\r\n//#endregion","import { Support } from \"../../src/support\";\r\nimport { PageEnum, Rotator, SailorTypeEnum } from \"../../src/rotator\";\r\nimport { LoginParameters } from \"../../src/login/login\";\r\n\r\nexport class SailorHome\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\r\n\tstatic initialize()\r\n\t{\r\n\t\tthis._container = Rotator.container();\r\n\t\t(Rotator.bookingParameters().activityType as any) = null;\r\n\r\n\t\tRotator.title(\"PRENOTA\");\r\n\t\tthis.createControls();\r\n\t}\r\n\r\n\tprivate static createControls()\r\n\t{\r\n\t\tlet divInfo = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\tvr.createImage({\r\n\t\t\tvalue: \"https://booking.vrapp.it/images/patient/sailor.png\",\r\n\t\t\tcssContainer: \"display: flex; margin-bottom: 5px;\",\r\n\t\t\tcss: \"margin: 0 auto;\"\r\n\t\t}, divInfo)\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: `Benvenuto sulla piattaforma \"Il Navigante\"\r\n\r\n
    \r\nTramite questa piattaforma il personale autorizzato avente diritto (naviganti\r\ned aeronaviganti) potrà prenotare tutte le prestazioni sanitarie disponibili:\r\nvisite preventive di imbarco, visite biennali, visite per il lavoratore\r\nmarittimo, visite di abilità (denuncia apertura malattia/infortunio e controllo medico in scadenza),\r\nvisite generiche etc. che verranno effettuate presso la sede SASN\r\ncompetente.\r\n
    \r\n\r\n
    \r\nPer il primo accesso sarà necessario registrarsi inserendo nell’apposita\r\npagina tutti i dati anagrafici richiesti.\r\n
    \r\n\r\n
    \r\nUna volta portata a termine la prenotazione l’interessato dovrà presentarsi\r\nalla sede SASN competente nei modi e nei tempi che saranno indicati nella\r\nmail/sms di conferma.\r\n
    \r\n\r\n
    \r\nNel caso di prestazione soggetta al pagamento di ticket sarà indicato\r\nl’importo e la modalità di pagamento\r\n
    `,\r\n\t\t\twidth: \"100%\",\r\n\t\t\talign: vr.TextAlignEnum.Justify,\r\n\t\t\tcssContainer: \"margin-top: 5px;\"\r\n\t\t}, divInfo);\r\n\r\n\t\tlet divButtons = vr.div(divInfo, { css: \"display: flex; justify-content: space-between; margin-top: 20px;\" });\r\n\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"SASN\",\r\n\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\tcss: \"width: 100%; box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tcssContainer: \"flex: 1;\",\r\n\t\t\tonClick: (e) => this.goNext(SailorTypeEnum.Sasn)\r\n\t\t}, divButtons);\r\n\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"USMAF\",\r\n\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\tcss: \"width: 100%; box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tcssContainer: \"flex: 1; margin-left: 5px;\",\r\n\t\t\tonClick: (e) => this.goNext(SailorTypeEnum.Usmaf)\r\n\t\t}, divButtons);\r\n\t}\r\n\r\n\tprivate static goNext(sailorType: SailorTypeEnum)\r\n\t{\r\n\t\tif (sailorType == SailorTypeEnum.Sasn)\r\n\t\t\tRotator.webComponentParameters()[0].specificActivityTypeGroupId = 1;\r\n\t\telse if (sailorType == SailorTypeEnum.Usmaf)\r\n\t\t\tRotator.webComponentParameters()[0].specificActivityTypeGroupId = 4;\r\n\r\n\t\tRotator.sailorType(sailorType);\r\n\t\tSupport.checkLogin(() => Rotator.page(PageEnum.Booking), () => \r\n\t\t{\r\n\t\t\tlet parameters = new LoginParameters();\r\n\t\t\tparameters.successCallback = () => Rotator.page(PageEnum.Booking);\r\n\t\t\tRotator.page(PageEnum.Login, parameters);\r\n\t\t});\r\n\t}\r\n}","import { Support } from \"../../src/support\";\r\nimport { PageEnum, puma, Rotator, SailorTypeEnum } from \"../../src/rotator\";\r\nimport { Profile } from \"../../src/privateArea/profile\";\r\nimport { BirthAddressInfo, ForeignAddress, ItalianAddress } from \"../../src/shared/common\";\r\nimport { IdentityDocumentInfo, Register, RegisterRequest, RegisterResponse, RegisterResult } from \"../../src/login/register\";\r\nimport { LoginParameters } from \"../../src/login/login\";\r\nimport { VrManager } from \"../../src/shared/vrManager\";\r\n\r\nexport class SailorRegister\r\n{\r\n\t//#region Variables\r\n\tprivate static _container: HTMLElement;\r\n\tprivate static _parameters: SailorRegisterParameters;\r\n\r\n\tprivate static _txtName: vr.TextBox;\r\n\tprivate static _txtSurname: vr.TextBox;\r\n\tprivate static _txtFiscalCode: vr.TextBox;\r\n\tprivate static _txtPhoneNumber: vr.TextBox;\r\n\tprivate static _txtEmail: vr.TextBox;\r\n\tprivate static _txtLandline: vr.TextBox;\r\n\tprivate static _dtpBirthdate: vr.DatePicker;\r\n\tprivate static _cmbBirthCity: vr.ComboBox;\r\n\tprivate static _swtItalianForeignBirthCity: vr.Switch;\r\n\tprivate static _cmbForeignBirthCityCountry: vr.ComboBox;\r\n\tprivate static _txtForeignBirthCity: vr.TextBox;\r\n\tprivate static _btgGender: vr.ButtonGroup;\r\n\r\n\tprivate static _txtIdentityCard: vr.TextBox;\r\n\tprivate static _dtpIdentityCardEmissionDate: vr.DatePicker;\r\n\tprivate static _txtPassport: vr.TextBox;\r\n\tprivate static _dtpPassportEmissionDate: vr.DatePicker;\r\n\r\n\tprivate static _swtItalianForeignResidenceAddress: vr.Switch;\r\n\tprivate static _txtItalyResidenceAddress: vr.TextBox;\r\n\tprivate static _cmbItalyResidenceCity: vr.ComboBox;\r\n\tprivate static _txtItalyResidenceProvince: vr.TextBox;\r\n\tprivate static _cmbItalyResidenceZip: vr.ComboBox;\r\n\tprivate static _txtOutItalyResidenceAddress: vr.TextBox;\r\n\tprivate static _cmbOutItalyResidenceCountry: vr.ComboBox;\r\n\r\n\tprivate static _chkDomicile: vr.CheckBox;\r\n\tprivate static _swtItalianForeignDomicileAddress: vr.Switch;\r\n\tprivate static _txtItalyDomicileAddress: vr.TextBox;\r\n\tprivate static _cmbItalyDomicileCity: vr.ComboBox;\r\n\tprivate static _txtItalyDomicileProvince: vr.TextBox;\r\n\tprivate static _cmbItalyDomicileZip: vr.ComboBox;\r\n\tprivate static _txtOutItalyDomicileAddress: vr.TextBox;\r\n\tprivate static _cmbOutItalyDomicileCountry: vr.ComboBox;\r\n\r\n\tprivate static _swtSailorMode: vr.Switch;\r\n\tprivate static _txtSerialNumber: vr.TextBox;\r\n\tprivate static _txtCompanyName: vr.TextBox;\r\n\tprivate static _cmbCategories: vr.ComboBox;\r\n\r\n\tprivate static _txtPortAuthorityContactName: vr.TextBox;\r\n\tprivate static _txtPortAuthorityContactPhoneNumber: vr.TextBox;\r\n\tprivate static _txtPortAuthorityContactEmail: vr.TextBox;\r\n\tprivate static _txtShipOwnerContactName: vr.TextBox;\r\n\tprivate static _txtShipOwnerContactPhoneNumber: vr.TextBox;\r\n\tprivate static _txtShipOwnerContactEmail: vr.TextBox;\r\n\r\n\tprivate static _btnRegister: vr.Button;\r\n\t//#endregion\r\n\r\n\tstatic initialize(parameters: SailorRegisterParameters)\r\n\t{\r\n\t\tthis._parameters = parameters;\r\n\t\tthis._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\t\tRotator.title(\"REGISTRATI\");\r\n\r\n\t\tSupport.checkLogin(() => Rotator.goToMainPage(), () => \r\n\t\t{\r\n\t\t\tthis.createControls();\r\n\t\t});\r\n\t}\r\n\r\n\tstatic createControls()\r\n\t{\r\n\t\t//#region Info\r\n\t\tlet divInfo = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\t\tthis._txtName = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Nome\",\r\n\t\t\t\tplaceholder: \"Nome\",\r\n\t\t\t\tonEnterKey: () => this._btnRegister.click(),\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divInfo);\r\n\t\tthis._txtName.focus();\r\n\r\n\t\tthis._txtSurname = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Cognome\",\r\n\t\t\t\tplaceholder: \"Cognome\",\r\n\t\t\t\tonEnterKey: () => this._btnRegister.click(),\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divInfo);\r\n\r\n\t\tthis._txtPhoneNumber = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Cellulare\",\r\n\t\t\t\tplaceholder: \"Cellulare\",\r\n\t\t\t\tonEnterKey: () => this._btnRegister.click(),\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divInfo);\r\n\r\n\t\tthis._txtEmail = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Email\",\r\n\t\t\t\tplaceholder: \"Email\",\r\n\t\t\t\tonEnterKey: () => this._btnRegister.click(),\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divInfo);\r\n\r\n\t\tthis._txtLandline = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Telefono fisso\",\r\n\t\t\t\tplaceholder: \"Telefono fisso\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divInfo);\r\n\r\n\t\tthis._btgGender = vr.createButtonGroup(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Sesso\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\t//selectedColor: Rotator.color(),\r\n\t\t\t\titems:\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t{ text: \"Maschio\", value: \"M\" },\r\n\t\t\t\t\t\t{ text: \"Femmina\", value: \"F\" }\r\n\t\t\t\t\t],\r\n\t\t\t\tselectionMode: vr.SelectionModeEnum.Single\r\n\t\t\t}, divInfo);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Documents identity\r\n\t\tlet divDocumentIdentityCard = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\t\tthis._txtIdentityCard = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Carta d'identità\",\r\n\t\t\t\tplaceholder: \"Carta d'identità\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\tinputMode: vr.TextTransformModeEnum.Uppercase,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divDocumentIdentityCard);\r\n\r\n\t\tthis._dtpIdentityCardEmissionDate = Support.createDatePicker(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Data di emissione\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divDocumentIdentityCard);\r\n\r\n\t\tlet divDocumentPassport = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\t\tthis._txtPassport = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Passaporto\",\r\n\t\t\t\tplaceholder: \"Passaporto\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\tinputMode: vr.TextTransformModeEnum.Uppercase,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divDocumentPassport);\r\n\r\n\t\tthis._dtpPassportEmissionDate = Support.createDatePicker(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Data di emissione\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divDocumentPassport);\r\n\t\t//#endregion\r\n\r\n\t\t//#region BirthCity\r\n\t\tlet divBirthInfo = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"margin-top: 10px;\" });\r\n\t\tthis._dtpBirthdate = Support.createDatePicker(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Data di nascita\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t}, divBirthInfo);\r\n\r\n\t\tlet divBirthCity = vr.div(divBirthInfo);\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"Città di nascita\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t}, divBirthCity);\r\n\r\n\t\tthis._swtItalianForeignBirthCity = vr.createSwitch({\r\n\t\t\tlabelOff: \"Italia\",\r\n\t\t\tlabelOn: \"Fuori Italia\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-bottom: 5px;\",\r\n\t\t\tonChange: (e) => \r\n\t\t\t{\r\n\t\t\t\tif (e.checked)\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyBirthCity).hide();\r\n\t\t\t\t\tpuma(divForeignBirthCity).show();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyBirthCity).show();\r\n\t\t\t\t\tpuma(divForeignBirthCity).hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, divBirthCity);\r\n\r\n\t\tlet divItalyBirthCity = vr.div(divBirthCity);\r\n\t\tthis._cmbBirthCity = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Città di nascita\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\",\r\n\t\t\t\twebService: {\r\n\t\t\t\t\tauthKey: \"h]K)x@)k2j.@{=7D\",\r\n\t\t\t\t\tmethod: Rotator.patientUrl() + \"/api/UtilityWebApi/GetAllCities\",\r\n\t\t\t\t\titemsPropertyName: \"cities\",\r\n\t\t\t\t\ttypedTextPropertyName: \"searchText\",\r\n\t\t\t\t\tparameters: () =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tonlyActive: false\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, divItalyBirthCity);\r\n\r\n\t\tlet divForeignBirthCity = vr.div(divBirthCity, { css: \"display: none;\" });\r\n\t\tthis._cmbForeignBirthCityCountry = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Nazione\",\r\n\t\t\t\twidth: \"100%\"\r\n\t\t\t}, divForeignBirthCity);\r\n\r\n\t\tthis._txtForeignBirthCity = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Città\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\"\r\n\t\t\t}, divForeignBirthCity);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Fiscal code\r\n\t\tlet divFiscalCode = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\t\tthis._txtFiscalCode = vr.createTextBox({\r\n\t\t\tlabel: \"Codice fiscale\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } },\r\n\t\t\tinputMode: vr.TextTransformModeEnum.Uppercase,\r\n\t\t\tonBlur: (e) =>\r\n\t\t\t{\r\n\t\t\t\tProfile.checkFiscalCode(this._txtFiscalCode.value(), this._cmbForeignBirthCityCountry.value(), (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!e.isValid)\r\n\t\t\t\t\t\tthis._txtFiscalCode.error();\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthis._txtFiscalCode.hideError();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}, divFiscalCode);\r\n\r\n\t\tlet btnCalcFiscalCode = vr.createButton({\r\n\t\t\ttext: \"Calcola codice\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-top: 10px;\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tvisible: false,\r\n\t\t\tonClick: (e) =>\r\n\t\t\t{\r\n\t\t\t\tlet birthAddressInfo = null;\r\n\t\t\t\tif (!this._swtItalianForeignBirthCity.checked())\r\n\t\t\t\t{\r\n\t\t\t\t\t//#region Italian\r\n\t\t\t\t\tif (this._cmbBirthCity.value() != null && this._cmbBirthCity.value() != \"\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbirthAddressInfo = new BirthAddressInfo();\r\n\t\t\t\t\t\tbirthAddressInfo.istatCode = this._cmbBirthCity.value()!;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//#endregion\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t//#region Foreign\r\n\t\t\t\t\tlet countrySelected = this._cmbForeignBirthCityCountry.getSelectedItem();\r\n\t\t\t\t\tif (countrySelected != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbirthAddressInfo = new BirthAddressInfo();\r\n\t\t\t\t\t\tbirthAddressInfo.countryCode = this._cmbForeignBirthCityCountry.value()!;\r\n\t\t\t\t\t\tbirthAddressInfo.address = this._txtForeignBirthCity.value();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//#endregion\r\n\t\t\t\t}\r\n\r\n\t\t\t\tProfile.computeFiscalCode(this._txtName.value(), this._txtSurname.value(), this._btgGender.getSelectedValues()[0], this._dtpBirthdate.value()!, birthAddressInfo,\r\n\t\t\t\t\t(e) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (e.invalidFieldsMessage != null && e.invalidFieldsMessage != \"\")\r\n\t\t\t\t\t\t\tVrManager.notify(e.invalidFieldsMessage, \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis._txtFiscalCode.value(e.fiscalCode);\r\n\t\t\t\t\t\t\tthis._txtFiscalCode.hideError();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}, divFiscalCode);\r\n\r\n\t\tif (this._txtName.visible() && this._txtSurname.visible() && this._btgGender.visible() && this._dtpBirthdate.visible() && puma(divBirthCity).is(\":visible\"))\r\n\t\t\tbtnCalcFiscalCode.show();\r\n\t\t//#endregion\r\n\r\n\t\t//#region Address Residence\r\n\t\tlet divResidence = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"margin-top: 10px;\" });\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"Indirizzo di residenza\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t}, divResidence);\r\n\r\n\t\tthis._swtItalianForeignResidenceAddress = vr.createSwitch({\r\n\t\t\tlabelOff: \"Italia\",\r\n\t\t\tlabelOn: \"Fuori Italia\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-bottom: 5px;\",\r\n\t\t\tonChange: (e) => \r\n\t\t\t{\r\n\t\t\t\tif (e.checked)\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyResidence).hide();\r\n\t\t\t\t\tpuma(divOutItalyResidence).show();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyResidence).show();\r\n\t\t\t\t\tpuma(divOutItalyResidence).hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, divResidence);\r\n\r\n\t\tlet divItalyResidence = vr.div(divResidence);\r\n\t\tthis._txtItalyResidenceAddress = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Via\",\r\n\t\t\t\twidth: \"100%\"\r\n\t\t\t}, divItalyResidence);\r\n\r\n\t\tthis._cmbItalyResidenceCity = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Comune\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\",\r\n\t\t\t\twebService: {\r\n\t\t\t\t\tauthKey: \"h]K)x@)k2j.@{=7D\",\r\n\t\t\t\t\tmethod: Rotator.patientUrl() + \"/api/UtilityWebApi/GetAllCities\",\r\n\t\t\t\t\titemsPropertyName: \"cities\",\r\n\t\t\t\t\ttypedTextPropertyName: \"searchText\",\r\n\t\t\t\t\tparameters: () =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tonlyActive: true\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tonAfterChange: (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tRegister.calcProvinceAndZipByCity(e.value, (e) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis._txtItalyResidenceProvince.clear();\r\n\t\t\t\t\t\tthis._cmbItalyResidenceZip.clearItems();\r\n\r\n\t\t\t\t\t\tthis._txtItalyResidenceProvince.value(e.city.provinceAbbreviation);\r\n\t\t\t\t\t\tthis._cmbItalyResidenceZip.items(e.city.zipCodes.map(k => { return { text: k.zipCode, value: k.zipCode } }));\r\n\t\t\t\t\t\tthis._cmbItalyResidenceZip.value(e.city.zipCodes.first().zipCode);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}, divItalyResidence);\r\n\r\n\t\tthis._txtItalyResidenceProvince = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Provincia\",\r\n\t\t\t\tenable: false,\r\n\t\t\t\talign: vr.TextAlignEnum.Center,\r\n\t\t\t\twidth: \"Calc(50% - 10px)\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\"\r\n\t\t\t}, divItalyResidence);\r\n\r\n\t\tthis._cmbItalyResidenceZip = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"CAP\",\r\n\t\t\t\tplaceholder: \"\",\r\n\t\t\t\twidth: \"50%\"\r\n\t\t\t}, divItalyResidence);\r\n\r\n\t\tlet divOutItalyResidence = vr.div(divResidence, { css: \"display: none;\" });\r\n\t\tthis._txtOutItalyResidenceAddress = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Indirizzo\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\"\r\n\t\t\t}, divOutItalyResidence);\r\n\r\n\t\tthis._cmbOutItalyResidenceCountry = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Nazione\",\r\n\t\t\t\twidth: \"100%\"\r\n\t\t\t}, divOutItalyResidence);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Address Domicile\r\n\t\tlet divDomicile = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"margin-top: 10px;\" });\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"Indirizzo di domicilio\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t}, divDomicile);\r\n\r\n\t\tthis._chkDomicile = vr.createCheckBox({\r\n\t\t\ttext: \"Il domicilio coincide con la residenza\",\r\n\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\tchecked: true,\r\n\t\t\tonCheck: (e) =>\r\n\t\t\t{\r\n\t\t\t\tif (e.checked)\r\n\t\t\t\t\tpuma(divDomicileInternal).hide();\r\n\t\t\t\telse\r\n\t\t\t\t\tpuma(divDomicileInternal).show();\r\n\t\t\t}\r\n\t\t}, divDomicile);\r\n\r\n\t\tlet divDomicileInternal = vr.div(divDomicile, { css: \"display: none;\" });\r\n\t\tthis._swtItalianForeignDomicileAddress = vr.createSwitch({\r\n\t\t\tlabelOff: \"Italia\",\r\n\t\t\tlabelOn: \"Fuori Italia\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcssContainer: \"margin-bottom: 5px;\",\r\n\t\t\tonChange: (e) => \r\n\t\t\t{\r\n\t\t\t\tif (e.checked)\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyDomicile).hide();\r\n\t\t\t\t\tpuma(divOutItalyDomicile).show();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tpuma(divItalyDomicile).show();\r\n\t\t\t\t\tpuma(divOutItalyDomicile).hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, divDomicileInternal);\r\n\r\n\t\tlet divItalyDomicile = vr.div(divDomicileInternal);\r\n\t\tthis._txtItalyDomicileAddress = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Via\",\r\n\t\t\t\twidth: \"100%\"\r\n\t\t\t}, divItalyDomicile);\r\n\r\n\t\tthis._cmbItalyDomicileCity = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Comune\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\",\r\n\t\t\t\twebService: {\r\n\t\t\t\t\tauthKey: \"h]K)x@)k2j.@{=7D\",\r\n\t\t\t\t\tmethod: Rotator.patientUrl() + \"/api/UtilityWebApi/GetAllCities\",\r\n\t\t\t\t\titemsPropertyName: \"cities\",\r\n\t\t\t\t\ttypedTextPropertyName: \"searchText\",\r\n\t\t\t\t\tparameters: () =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tonlyActive: true\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tonAfterChange: (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tRegister.calcProvinceAndZipByCity(e.value, (e) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis._txtItalyDomicileProvince.clear();\r\n\t\t\t\t\t\tthis._cmbItalyDomicileZip.clearItems();\r\n\r\n\t\t\t\t\t\tthis._txtItalyDomicileProvince.value(e.city.provinceAbbreviation);\r\n\t\t\t\t\t\tthis._cmbItalyDomicileZip.items(e.city.zipCodes.map(k => { return { text: k.zipCode, value: k.zipCode } }));\r\n\t\t\t\t\t\tthis._cmbItalyDomicileZip.value(e.city.zipCodes.first().zipCode);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}, divItalyDomicile);\r\n\r\n\t\tthis._txtItalyDomicileProvince = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Provincia\",\r\n\t\t\t\tenable: false,\r\n\t\t\t\talign: vr.TextAlignEnum.Center,\r\n\t\t\t\twidth: \"Calc(50% - 10px)\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\"\r\n\t\t\t}, divItalyDomicile);\r\n\r\n\t\tthis._cmbItalyDomicileZip = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"CAP\",\r\n\t\t\t\tplaceholder: \"\",\r\n\t\t\t\twidth: \"50%\"\r\n\t\t\t}, divItalyDomicile);\r\n\r\n\t\tlet divOutItalyDomicile = vr.div(divDomicileInternal, { css: \"display: none;\" });\r\n\t\tthis._txtOutItalyDomicileAddress = vr.createTextBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Indirizzo\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-right: 10px;\"\r\n\t\t\t}, divOutItalyDomicile);\r\n\r\n\t\tthis._cmbOutItalyDomicileCountry = vr.createComboBox(\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Nazione\",\r\n\t\t\t\twidth: \"100%\"\r\n\t\t\t}, divOutItalyDomicile);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Sailor info\r\n\t\tlet divSailor = vr.div(this._container, { class: \"vrPatientDivSlot\", css: \"margin-top: 10px;\" });\r\n\t\tif (Rotator.sailorType() == SailorTypeEnum.Sasn)\r\n\t\t{\r\n\t\t\tthis._swtSailorMode = vr.createSwitch({\r\n\t\t\t\tlabelOff: \"Marittimo\",\r\n\t\t\t\tlabelOn: \"Aeronavigante\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\"\r\n\t\t\t}, divSailor);\r\n\r\n\t\t\tthis._txtSerialNumber = vr.createTextBox({\r\n\t\t\t\tlabel: \"Matricola\",\r\n\t\t\t\tvalidation: {\r\n\t\t\t\t\tmaxLength: 10,\r\n\t\t\t\t\tminLength: 3\r\n\t\t\t\t},\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divSailor);\r\n\r\n\t\t\tthis._txtCompanyName = vr.createTextBox({\r\n\t\t\t\tlabel: \"Compagnia\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divSailor);\r\n\r\n\t\t\tthis._cmbCategories = vr.createComboBox({\r\n\t\t\t\tlabel: \"Categoria\",\r\n\t\t\t\tmode: vr.ComboBoxTypeEnum.DropDown,\r\n\t\t\t\tnullable: true,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divSailor);\r\n\t\t}\r\n\t\telse if (Rotator.sailorType() == SailorTypeEnum.Usmaf)\r\n\t\t{\r\n\t\t\tthis._txtCompanyName = vr.createTextBox({\r\n\t\t\t\tlabel: \"Ditta\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, divSailor);\r\n\r\n\t\t\t//#region Port Authority\r\n\t\t\tlet groupBoxPortAuthorityContacts = vr.createGroupBox({\r\n\t\t\t\ttitle: \"Contatti Capitaneria\",\r\n\t\t\t}, divSailor);\r\n\r\n\t\t\tthis._txtPortAuthorityContactName = vr.createTextBox({\r\n\t\t\t\tlabel: \"Città/Codice fiscale\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, groupBoxPortAuthorityContacts.content());\r\n\r\n\t\t\tthis._txtPortAuthorityContactPhoneNumber = vr.createTextBox({\r\n\t\t\t\tlabel: \"Telefono\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, groupBoxPortAuthorityContacts.content());\r\n\r\n\t\t\tthis._txtPortAuthorityContactEmail = vr.createTextBox({\r\n\t\t\t\tlabel: \"Email\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, groupBoxPortAuthorityContacts.content());\r\n\t\t\t//#endregion\r\n\r\n\t\t\t//#region Ship owner\r\n\t\t\tlet groupBoxShipOwnerContacts = vr.createGroupBox({\r\n\t\t\t\ttitle: \"Contatti Armatore\",\r\n\t\t\t\tcssContainer: \"margin-top: 10px;\"\r\n\t\t\t}, divSailor);\r\n\r\n\t\t\tthis._txtShipOwnerContactName = vr.createTextBox({\r\n\t\t\t\tlabel: \"Società/Codice fiscale\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, groupBoxShipOwnerContacts.content());\r\n\r\n\t\t\tthis._txtShipOwnerContactPhoneNumber = vr.createTextBox({\r\n\t\t\t\tlabel: \"Telefono\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, groupBoxShipOwnerContacts.content());\r\n\r\n\t\t\tthis._txtShipOwnerContactEmail = vr.createTextBox({\r\n\t\t\t\tlabel: \"Email\",\r\n\t\t\t\tmode: vr.TextModeEnum.Text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\tlabelSettings: { colorSettings: { textColor: Rotator.color() } }\r\n\t\t\t}, groupBoxShipOwnerContacts.content());\r\n\t\t\t//#endregion\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\tthis._btnRegister = vr.createButton({\r\n\t\t\ttext: \"Registrati\",\r\n\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tcssContainer: \"margin-bottom: 30px;\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tonClick: (e) =>\r\n\t\t\t{\r\n\t\t\t\t//#region Check\r\n\t\t\t\tlet error = false;\r\n\t\t\t\tif (this._txtName.isEmpty())\r\n\t\t\t\t{\r\n\t\t\t\t\tthis._txtName.error(\"Nome obbligatorio\", vr.ErrorModeEnum.Solid);\r\n\t\t\t\t\terror = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this._txtSurname.isEmpty())\r\n\t\t\t\t{\r\n\t\t\t\t\tthis._txtSurname.error(\"Cognome obbligatorio\", vr.ErrorModeEnum.Solid);\r\n\t\t\t\t\terror = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this._txtPhoneNumber.isEmpty())\r\n\t\t\t\t{\r\n\t\t\t\t\tthis._txtPhoneNumber.error(\"Cellulare obbligatorio\", vr.ErrorModeEnum.Solid);\r\n\t\t\t\t\terror = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (error)\r\n\t\t\t\t\treturn;\r\n\t\t\t\t//#endregion\r\n\r\n\t\t\t\tthis.registerSailor();\r\n\t\t\t}\r\n\t\t}, this._container);\r\n\r\n\t\tRegister.getAllCountries((e: any) =>\r\n\t\t{\r\n\t\t\tthis._cmbOutItalyResidenceCountry.items(e.countries);\r\n\t\t\tthis._cmbOutItalyDomicileCountry.items(e.countries);\r\n\t\t\tthis._cmbForeignBirthCityCountry.items(e.countries);\r\n\t\t});\r\n\r\n\t\tRegister.getAllCategories((e: any) =>\r\n\t\t{\r\n\t\t\tthis._cmbCategories.items(e.categories);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate static registerSailor()\r\n\t{\r\n\t\tlet request = new RegisterRequest();\r\n\t\trequest.webApiBirthDate = Date.toWebApiDateTime(this._dtpBirthdate.value());\r\n\t\trequest.surname = this._txtSurname.value();\r\n\t\trequest.name = this._txtName.value();\r\n\t\trequest.phone = this._txtPhoneNumber.value();\r\n\t\trequest.mail = this._txtEmail.value();\r\n\t\trequest.fiscalCode = this._txtFiscalCode.value();\r\n\t\trequest.landline = this._txtLandline.value();\r\n\t\trequest.gender = this._btgGender.getSelectedValues()[0];\r\n\t\trequest.privacy = true;\r\n\t\trequest.privacyCommercial = true;\r\n\r\n\t\tlet identityCard = new IdentityDocumentInfo();\r\n\t\tidentityCard.number = this._txtIdentityCard.value();\r\n\t\tidentityCard.emissionDate = Date.toWebApiDateTime(this._dtpIdentityCardEmissionDate.value());\r\n\t\trequest.identityCard = identityCard;\r\n\r\n\t\tlet passport = new IdentityDocumentInfo();\r\n\t\tpassport.number = this._txtPassport.value();\r\n\t\tpassport.emissionDate = Date.toWebApiDateTime(this._dtpPassportEmissionDate.value());\r\n\t\trequest.passport = passport;\r\n\r\n\t\trequest.birthAddressInfo = new BirthAddressInfo();\r\n\t\tif (!this._swtItalianForeignBirthCity.checked())\r\n\t\t{\r\n\t\t\t//#region Italian\r\n\t\t\trequest.birthAddressInfo.istatCode = this._cmbBirthCity.value()!;\r\n\t\t\t//#endregion\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t//#region Foreign\r\n\t\t\tlet countrySelected = this._cmbForeignBirthCityCountry.getSelectedItem();\r\n\t\t\tif (countrySelected != null)\r\n\t\t\t\trequest.birthAddressInfo.countryCode = this._cmbForeignBirthCityCountry.value()!;\r\n\r\n\t\t\trequest.birthAddressInfo.address = this._txtForeignBirthCity.value();\r\n\t\t\t//#endregion\r\n\t\t}\r\n\r\n\t\t//#region Residence\r\n\t\tif (!this._swtItalianForeignResidenceAddress.checked())\r\n\t\t{\r\n\t\t\t//#region Italian address\r\n\t\t\tlet italianAddress = new ItalianAddress();\r\n\t\t\titalianAddress.street = this._txtItalyResidenceAddress.value();\r\n\t\t\titalianAddress.istatCode = this._cmbItalyResidenceCity.value()!;\r\n\t\t\titalianAddress.zipCode = this._cmbItalyResidenceZip.text();\r\n\t\t\trequest.italianAddress = italianAddress;\r\n\t\t\t//#endregion\r\n\t\t}\r\n\t\telse \r\n\t\t{\r\n\t\t\t//#region Foreign address\r\n\t\t\tlet foreignAddress = new ForeignAddress();\r\n\t\t\tforeignAddress.address = this._txtOutItalyResidenceAddress.value();\r\n\r\n\t\t\tlet countrySelected = this._cmbOutItalyResidenceCountry.getSelectedItem();\r\n\t\t\tif (countrySelected != null)\r\n\t\t\t\tforeignAddress.countryCode = this._cmbOutItalyResidenceCountry.value()!;\r\n\r\n\t\t\trequest.foreignAddress = foreignAddress;\r\n\t\t\t//#endregion\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Domicile\r\n\t\tif (this._chkDomicile.checked())\r\n\t\t{\r\n\t\t\trequest.italianAddressDomicile = request.italianAddress;\r\n\t\t\trequest.foreignAddressDomicile = request.foreignAddress;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif (!this._swtItalianForeignDomicileAddress.checked())\r\n\t\t\t{\r\n\t\t\t\t//#region Italian address\r\n\t\t\t\tlet italianAddress = new ItalianAddress();\r\n\t\t\t\titalianAddress.street = this._txtItalyDomicileAddress.value();\r\n\t\t\t\titalianAddress.istatCode = this._cmbItalyDomicileCity.value()!;\r\n\t\t\t\titalianAddress.zipCode = this._cmbItalyDomicileZip.text();\r\n\t\t\t\trequest.italianAddressDomicile = italianAddress;\r\n\t\t\t\t//#endregion\r\n\t\t\t}\r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\t//#region Foreign address\r\n\t\t\t\tlet foreignAddress = new ForeignAddress();\r\n\t\t\t\tforeignAddress.address = this._txtOutItalyDomicileAddress.value();\r\n\r\n\t\t\t\tlet countrySelected = this._cmbOutItalyDomicileCountry.getSelectedItem();\r\n\t\t\t\tif (countrySelected != null)\r\n\t\t\t\t\tforeignAddress.countryCode = this._cmbOutItalyDomicileCountry.value()!;\r\n\r\n\t\t\t\trequest.foreignAddressDomicile = foreignAddress;\r\n\t\t\t\t//#endregion\r\n\t\t\t}\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Sailor\r\n\t\trequest.isSailor = Rotator.sailor();\r\n\t\trequest.sailorType = Rotator.sailorType();\r\n\r\n\t\tif (Rotator.sailorType() == SailorTypeEnum.Sasn)\r\n\t\t{\r\n\t\t\trequest.sailorSasnMode = (this._swtSailorMode.checked()) ? SailorSasnModeEnum.AirShipper : SailorSasnModeEnum.Marine;\r\n\t\t\trequest.sailorSasnSerialNumber = this._txtSerialNumber.value();\r\n\t\t\trequest.sailorSasnCompanyName = this._txtCompanyName.value();\r\n\t\t\trequest.categoryId = Number(this._cmbCategories.value());\r\n\t\t}\r\n\t\telse if (Rotator.sailorType() == SailorTypeEnum.Usmaf)\r\n\t\t{\r\n\t\t\trequest.sailorUsmafCompanyName = this._txtCompanyName.value();\r\n\r\n\t\t\trequest.sailorUsmafPortAuthorityContactName = this._txtPortAuthorityContactName.value();\r\n\t\t\trequest.sailorUsmafPortAuthorityContactPhoneNumber = this._txtPortAuthorityContactPhoneNumber.value();\r\n\t\t\trequest.sailorUsmafPortAuthorityContactEmail = this._txtPortAuthorityContactEmail.value();\r\n\r\n\t\t\trequest.sailorUsmafShipOwnerContactName = this._txtShipOwnerContactName.value();\r\n\t\t\trequest.sailorUsmafShipOwnerContactPhoneNumber = this._txtShipOwnerContactPhoneNumber.value();\r\n\t\t\trequest.sailorUsmafShipOwnerContactEmail = this._txtShipOwnerContactEmail.value();\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\trequest.throwException = false;\r\n\t\trequest.createUserAccount = true;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: RegisterResponse) => \r\n\t\t\t\t{\r\n\t\t\t\t\tif (response.registerResult == RegisterResult.PatientCreated || response.registerResult == RegisterResult.PatientFound)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlet loginParameters = new LoginParameters();\r\n\t\t\t\t\t\tloginParameters.fromRegister = true;\r\n\t\t\t\t\t\tloginParameters.username = response.username;\r\n\t\t\t\t\t\tRotator.page(PageEnum.Login, loginParameters);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tRegister.manageRegisterResult(response.registerResult, response.ExceptionMessage);\r\n\t\t\t\t},\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n}\r\n\r\n//#region Classes\r\nclass SailorRegisterParameters\r\n{\r\n\r\n}\r\n\r\nexport enum SailorSasnModeEnum\r\n{\r\n\tMarine = 10,\r\n\tAirShipper = 20\r\n}\r\n//#endregion","import { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\n\r\nexport class AuthenticationManager\r\n{\r\n\tprivate static _passwordRules: PasswordRules;\r\n\r\n\tstatic isPasswordStrong(password: string): boolean\r\n\t{\r\n\t\tlet request = new IsStrongRequest();\r\n\t\trequest.password = password;\r\n\t\treturn request.call({ mode: vrshared.WebApiModeEnum.Sync }).result;\r\n\t}\r\n\r\n\tstatic getPasswordRules(): PasswordRules\r\n\t{\r\n\t\tif (this._passwordRules == null)\r\n\t\t{\r\n\t\t\tlet request = new GetRulesRequest();\r\n\t\t\tthis._passwordRules = request.call({ mode: vrshared.WebApiModeEnum.Sync }).rules;\r\n\t\t}\r\n\t\treturn this._passwordRules;\r\n\t}\r\n\r\n\tstatic generatePassword(): string\r\n\t{\r\n\t\tlet request = new GeneratePasswordRequest();\r\n\t\treturn request.call({ mode: vrshared.WebApiModeEnum.Sync }).password;\r\n\t}\r\n\r\n\t/** Check if the password is strong based on rules\r\n\t * @param passwordRules The rules to classify password */\r\n\tstatic checkPasswordStrength(password: string, passwordRules: PasswordRules): CheckPasswordStrengthResponse\r\n\t{\r\n\t\tlet checkPasswordStrengthResponse: CheckPasswordStrengthResponse = new CheckPasswordStrengthResponse();\r\n\t\tlet isValid: boolean = true;\r\n\t\tlet errorMessage: string = \"Password con almeno:
      \";\r\n\r\n\t\t// Minimum and Maximum Length of field - 6 to 12 characters\r\n\t\tif (password.length < passwordRules.minimumLength)\r\n\t\t{\r\n\t\t\tisValid = false;\r\n\t\t\terrorMessage += \"
    • \" + passwordRules.minimumLength + \" caratteri
    • \";\r\n\t\t}\r\n\r\n\t\tlet numberCount: number = 0;\r\n\t\tlet specialCount: number = 0;\r\n\t\tlet lowerCaseCount: number = 0;\r\n\t\tlet upperCaseCount: number = 0;\r\n\r\n\t\tfor (let c of password.split(''))\r\n\t\t{\r\n\t\t\tif (c == \"\")\r\n\t\t\t{\r\n\t\t\t\tisValid = false;\r\n\t\t\t\terrorMessage = \"C'é uno spazio nella password. Password non valida\";\r\n\r\n\t\t\t\tcheckPasswordStrengthResponse.IsValid = isValid;\r\n\t\t\t\tcheckPasswordStrengthResponse.ErrorMessage = errorMessage;\r\n\t\t\t\treturn checkPasswordStrengthResponse;\r\n\t\t\t}\r\n\r\n\t\t\tif (vrshared.UtilityManager().isNumber(c))\r\n\t\t\t\tnumberCount++;\r\n\t\t\telse if (vrshared.UtilityManager().isLetter(c) && c == c.toUpperCase())\r\n\t\t\t\tupperCaseCount++;\r\n\t\t\telse if (vrshared.UtilityManager().isLetter(c) && c == c.toLowerCase())\r\n\t\t\t\tlowerCaseCount++;\r\n\t\t\telse\r\n\t\t\t\tspecialCount++;\r\n\t\t}\r\n\r\n\t\tif (lowerCaseCount < passwordRules.minimumLowercaseChars)\r\n\t\t{\r\n\t\t\tisValid = false;\r\n\t\t\terrorMessage += \"
    • \" + passwordRules.minimumLowercaseChars + \" lettera/e minuscola/e
    • \";\r\n\t\t}\r\n\r\n\t\tif (upperCaseCount < passwordRules.minimumUppercaseChars)\r\n\t\t{\r\n\t\t\tisValid = false;\r\n\t\t\terrorMessage += \"
    • \" + passwordRules.minimumUppercaseChars + \" lettera/e maiuscola/e
    • \";\r\n\t\t}\r\n\r\n\t\tif (numberCount < passwordRules.minimumDigits)\r\n\t\t{\r\n\t\t\tisValid = false;\r\n\t\t\terrorMessage += \"
    • \" + passwordRules.minimumDigits + \" numero/i
    • \";\r\n\t\t}\r\n\r\n\t\tif (specialCount < passwordRules.minimumSymbols)\r\n\t\t{\r\n\t\t\tisValid = false;\r\n\t\t\terrorMessage += \"
    • \" + passwordRules.minimumSymbols + \" simbolo/i
    • \";\r\n\t\t}\r\n\r\n\t\tcheckPasswordStrengthResponse.IsValid = isValid;\r\n\t\tcheckPasswordStrengthResponse.ErrorMessage = (isValid) ? \"\" : (errorMessage + \"
    \");\r\n\t\treturn checkPasswordStrengthResponse;\r\n\t}\r\n}\r\n\r\n//#region Supporting classes\r\nexport class PasswordRules\r\n{\r\n\tpublic minimumLength: number;\r\n\tpublic minimumUppercaseChars: number;\r\n\tpublic minimumSymbols: number;\r\n\tpublic minimumDigits: number;\r\n\tpublic minimumLowercaseChars: number;\r\n}\r\n\r\nclass GeneratePasswordRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/AuthenticationWebApi/GeneratePassword\";\r\n}\r\n\r\nclass GeneratePasswordResponse extends WebApiResponseBase\r\n{\r\n\tpublic password: string;\r\n}\r\n\r\nclass IsStrongRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/AuthenticationWebApi/IsPasswordStrong\";\r\n\tpublic password: string;\r\n}\r\n\r\nclass IsStrongResponse extends WebApiResponseBase\r\n{\r\n\tpublic rules: PasswordRules;\r\n\tpublic result: boolean;\r\n}\r\n\r\nclass GetRulesRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/AuthenticationWebApi/GetRules\";\r\n}\r\n\r\nclass GetRulesResponse extends WebApiResponseBase\r\n{\r\n\tpublic rules: PasswordRules;\r\n}\r\n\r\nclass CheckPasswordStrengthResponse\r\n{\r\n\tpublic IsValid: boolean;\r\n\tpublic ErrorMessage: string;\r\n}\r\n//#endregion","export class ActivityTypeGroupResult\r\n{\r\n public value: number;\r\n public text: string;\r\n public plantId: number;\r\n public activityTypesInThisGroup: string[];\r\n public isOnlineBooking: boolean;\r\n public children: ActivityTypeItem[];\r\n}\r\n\r\nexport class WorkplaceResponse\r\n{\r\n public id: number;\r\n public code: string;\r\n public name: string;\r\n public plantId: number;\r\n public latitude: number;\r\n public longitude: number;\r\n public street: string;\r\n public city: string;\r\n public province: string;\r\n public zip: string;\r\n public tagObject: any;\r\n}\r\n\r\nexport class ResourceResponse\r\n{\r\n public id: number;\r\n public code: string;\r\n public name: string;\r\n public minutesDuration: number;\r\n public plantIdList: number[];\r\n public title: string;\r\n public qualification: string;\r\n public genderEnum: GenderEnum;\r\n public isTechnician: boolean;\r\n public onlyBookableOnline?: boolean;\r\n public rating: ResourceRating;\r\n hasAvatar: boolean;\r\n imageBase64: string;\r\n}\r\n\r\nexport class ResourceRating\r\n{\r\n public total: number;\r\n public values: number[];\r\n}\r\n\r\nexport class ActivityTypeResponse\r\n{\r\n public id: number;\r\n public code: string;\r\n public name: string;\r\n public plantId: number;\r\n public workplacesInThisActivity: WorkplaceResponse[];\r\n public activityNote: string;\r\n public paymentMode: OnlineBookingPaymentModeEnum;\r\n public doNotRequireLogin: boolean;\r\n public preparationInfo: string;\r\n public onlineBookingModeEnum: OnlineBookingModeEnum;\r\n public onlineBookingDoNotChooseDoctor: boolean;\r\n public onlineBookingShowOnlyFromDirectLink: boolean;\r\n public onlineBookingName: string;\r\n public useWaitingListIfNoAvailabilities: boolean;\r\n public onlineBookingLoadingFileModeId: OnlineBookingLoadingFileMode;\r\n public onlineBookingLoadingFileMessage: string;\r\n\r\n public get isOnlineBooking()\r\n {\r\n return (this.onlineBookingModeEnum == OnlineBookingModeEnum.ShowAlways || this.onlineBookingModeEnum == OnlineBookingModeEnum.ShowOnlyIfAvailable);\r\n }\r\n}\r\n\r\nexport enum OnlineBookingModeEnum\r\n{\r\n Disabled = 1,\r\n ShowOnlyIfAvailable = 2,\r\n ShowAlways = 3,\r\n ShowAlwaysButNotBookable = 4\r\n}\r\n\r\nexport enum OnlineBookingLoadingFileMode\r\n{\r\n NoLoading,\r\n YesLoading,\r\n RequireLoading\r\n}\r\n\r\nexport class ActivityTypeItem\r\n{\r\n public id: number;\r\n public name: string;\r\n public plantId: number;\r\n public minutesDuration?: number;\r\n public workplacesInThisActivity: WorkplaceResponse[];\r\n public paymentMode: OnlineBookingPaymentModeEnum;\r\n public onlineBookingDoNotChooseDoctor: boolean;\r\n public onlineBookingShowOnlyFromDirectLink: boolean;\r\n public useWaitingListIfNoAvailabilities: boolean;\r\n}\r\n\r\nexport enum OnlineBookingPaymentModeEnum\r\n{\r\n None = 1,\r\n Optional = 2,\r\n Required = 3\r\n}\r\n\r\nexport class Timeslot\r\n{\r\n public day: string;\r\n public hourFromDisplay: TimeSpanDisplay;\r\n public hourToDisplay: TimeSpanDisplay;\r\n public price: number;\r\n public priceId: number;\r\n public workplaceId: number;\r\n public workplaceName: string;\r\n public resourceSubjectId: number;\r\n public resourceInstrumentId: number;\r\n public resourceSpaceId: number;\r\n}\r\n\r\nexport class TimeSpanDisplay\r\n{\r\n ticks: number;\r\n days: number;\r\n hours: number;\r\n milliseconds: number;\r\n minutes: number;\r\n seconds: number;\r\n totalDays: number;\r\n totalHours: number;\r\n totalMilliseconds: number;\r\n totalMinutes: number;\r\n totalSeconds: number;\r\n}\r\n\r\nexport class AvailabilityRequestMultiplant\r\n{\r\n public workplaceIdList: number[] | null;\r\n public resourceId?: number | null;\r\n public activityTypeId: number;\r\n public resourceInstrumentId: number;\r\n public resourceSpaceId: number;\r\n getNext: boolean;\r\n}\r\n\r\nexport class AvailabilityResponse\r\n{\r\n public id: number;\r\n public workplaceId: number;\r\n public resourceId: number;\r\n public activityTypeId: number;\r\n public price: number;\r\n public timeslots: Timeslot[];\r\n public nextTimeslots: Timeslot[];\r\n public resource: ResourceResponse;\r\n}\r\n\r\nexport enum FileTypeEnum\r\n{\r\n Pdf = \"application/pdf\",\r\n Txt = \"text/plain\",\r\n Image = \"image/png\",\r\n Zip = \"application/octet-stream\",\r\n General = \"application/octet-stream\"\r\n}\r\n\r\nexport enum GenderEnum\r\n{\r\n Male = 10,\r\n Female = 20,\r\n NotSpecified = 30\r\n}\r\n\r\nexport class ReportItem\r\n{\r\n public doctorName: string;\r\n public activityTypeName: string;\r\n public date: Date;\r\n public storedFileId: number;\r\n public workplaceName: string;\r\n public plantCompanyName: string;\r\n public reportSendingId: number;\r\n public representerOfName: string;\r\n}\r\n\r\nexport class SendingAttachmentsDisplay\r\n{\r\n public id: number;\r\n public fileName: string;\r\n public uploadDate: Date;\r\n public storageRecordId: number;\r\n public mimeType: string;\r\n}\r\n\r\nexport class DocumentItem\r\n{\r\n public id: number;\r\n public date: Date;\r\n public paymentDate: Date;\r\n public number: string;\r\n public netPrice: number;\r\n public grossPrice: number;\r\n public expirationDate: Date;\r\n public expirationDateRows: DocumentExpirationInfo[];\r\n public plantCompanyName: string;\r\n public documentId: number;\r\n}\r\n\r\nclass DocumentExpirationInfo\r\n{\r\n public id: number;\r\n public documentId: number;\r\n public paymentCodeId: number;\r\n public paymentCodeName: string;\r\n public expirationDate: Date;\r\n public grossPrice: number;\r\n public paymentDate?: Date;\r\n}\r\n\r\nexport class FileItem\r\n{\r\n public id: number;\r\n public size: number;\r\n public fileName: string;\r\n public mimeType: string;\r\n public uploadDate?: Date;\r\n public uploadedByPatient: boolean;\r\n public fileType: StorageFileTypeBaseEnum;\r\n public plantCompanyName: string;\r\n public displaySize: string;\r\n public representerOfName: string;\r\n}\r\n\r\nexport enum StorageFileTypeBaseEnum\r\n{\r\n GenericFile = 1,\r\n ImageGallery = 2,\r\n SignaturePresenceFile = 3,\r\n ImageStartingImage = 4,\r\n Privacy = 5,\r\n MedicalReportAttachment = 6,\r\n FiscalDocument = 7,\r\n MedicalReport = 8,\r\n InformedConsent = 9,\r\n Evaluation = 10,\r\n Report = 11\r\n}\r\n\r\nexport enum AddressTypeEnum\r\n{\r\n Residence,\r\n Domicile\r\n}\r\n\r\nexport class City\r\n{\r\n public id: number;\r\n public istat: number;\r\n public fisco: string;\r\n public active: boolean;\r\n public name: string;\r\n public replacedByIstatCode?: number;\r\n public replacedByName: string;\r\n public zipCodes: Zip[];\r\n public latitude?: number;\r\n public longitude?: number;\r\n public population: number;\r\n public surface: number;\r\n public aslSpecificCode: string;\r\n public provinceAbbreviation: string;\r\n}\r\n\r\nexport class Zip\r\n{\r\n public zipCode: string;\r\n}\r\n\r\nexport class BirthAddressInfo\r\n{\r\n public countryCode: string;\r\n public istatCode: string;\r\n public address: string;\r\n}\r\n\r\nexport class ItalianAddress\r\n{\r\n public street: string;\r\n public zipCode: string;\r\n public istatCode: string;\r\n public countryCode: string;\r\n}\r\n\r\nexport class ForeignAddress\r\n{\r\n public address: string;\r\n public countryCode: string;\r\n public zIPCode: string;\r\n}\r\n\r\nexport class ContactInfo\r\n{\r\n public contactId: number;\r\n public value: string;\r\n public conactType: ContactTypeEnum;\r\n}\r\n\r\nexport enum ContactTypeEnum\r\n{\r\n HomePhone = 1,\r\n WorkPhone = 2,\r\n HomeFax = 3,\r\n WorkFax = 4,\r\n PrivateEmail = 5,\r\n WorkEmail = 6,\r\n PrivateMobile = 7,\r\n WorkMobile = 8,\r\n WebSite = 9,\r\n PEC = 10\r\n}\r\n\r\nexport class WebApiDateTime\r\n{\r\n public day: number;\r\n public month: number;\r\n public year: number;\r\n public hours: number;\r\n public minutes: number;\r\n public seconds: number;\r\n public milliSeconds: number;\r\n}\r\n\r\nexport class InterpersonalItem\r\n{\r\n public id: number;\r\n public subjectId: number;\r\n public name: string;\r\n public surname: string;\r\n public displayName: string;\r\n public birthdate?: Date;\r\n public genderEnum: GenderEnum;\r\n public subjectRelationTypeId: number;\r\n public subjectRelationTypeName: string;\r\n public avatarBase64: string;\r\n public subjectRelationTypeReverseName: string;\r\n}","import { Popup, Support } from \"../../src/support\";\r\nimport { PageEnum, puma, Rotator } from \"../../src/rotator\";\r\nimport { WebApiRequestBase, WebApiResponseBase } from \"../../src/shared/webApi\";\r\n\r\nexport class Dashboard\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\r\n\tstatic initialize()\r\n\t{\r\n\t\tpuma(Rotator.container()).addClass(\"vettorePatientContainerAppDashboard\");\r\n\t\tthis._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\t\tRotator.title(Rotator.configuration().appName);\r\n\r\n\t\tthis.createControls();\r\n\t}\r\n\r\n\tprivate static createControls()\r\n\t{\r\n\t\t//#region Logo\r\n\t\tif (Rotator.configuration().appDashboardShowLogo)\r\n\t\t{\r\n\t\t\tlet base64Logo = Support.getAppLogo();\r\n\t\t\tif (base64Logo != null && base64Logo != \"\")\r\n\t\t\t{\r\n\t\t\t\tvr.createImage({\r\n\t\t\t\t\tbase64: true,\r\n\t\t\t\t\tvalue: base64Logo,\r\n\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\tposition: vr.ImagePositionTypeEnum.Center,\r\n\t\t\t\t\tcssContainer: \"max-height: 80px; margin-top: 10px; z-index: 2;\",\r\n\t\t\t\t\theight: 80\r\n\t\t\t\t}, this._container);\r\n\t\t\t}\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Background\r\n\t\tif (String.isNotNullOrEmpty(Rotator.configuration().appDashboardBackgroundColor))\r\n\t\t\tthis._container.style.cssText += \"background-color: \" + Rotator.configuration().appDashboardBackgroundColor + \";\";\r\n\t\telse\r\n\t\t\tthis._container.style.cssText += \"background-color: \" + Rotator.color() + \";\";\r\n\r\n\t\tif (String.isNotNullOrEmpty(Rotator.configuration().appDashboardBackgroundImage))\r\n\t\t{\r\n\t\t\tvr.createImage({\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\theight: \"100%\",\r\n\t\t\t\tbase64: true,\r\n\t\t\t\tvalue: Rotator.configuration().appDashboardBackgroundImage,\r\n\t\t\t\tcssContainer: \"position: absolute; top: 0px; left: 0px; z-index: 1;\"\r\n\t\t\t}, this._container)\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Tiles\r\n\t\tlet divTiles = vr.div(this._container, { css: \"display: flex; z-index: 99999; flex-wrap: wrap; position: absolute; bottom: 20px; width: 100%;\" });\r\n\r\n\t\tlet request = new GetTilesRequest();\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: GetTilesResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (let tile of response.tiles)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlet divTile = vr.div(divTiles, { css: \"flex: \" + ((Rotator.isTablet()) ? \"33\" : \"50\") + \"%; display: flex; justify-content: center;\" });\r\n\t\t\t\t\t\tvr.createButton({\r\n\t\t\t\t\t\t\ttext: tile.text,\r\n\t\t\t\t\t\t\twidth: \"Calc(100% - 10px)\",\r\n\t\t\t\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \"; width: 100%; padding: 20px;\",\r\n\t\t\t\t\t\t\tclass: \"vrButtonBookingTile vrButtonPatient\",\r\n\t\t\t\t\t\t\tcssContainer: \"margin-bottom: 10px;\",\r\n\t\t\t\t\t\t\tcolorSettings: {\r\n\t\t\t\t\t\t\t\ttextColor: (tile.color.isNotNullOrEmpty()) ? tile.color : \"#000\",\r\n\t\t\t\t\t\t\t\tbackground: (tile.backgroundColor.isNotNullOrEmpty()) ? tile.backgroundColor : \"#FFF\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\ticon: tile.icon as vr.IconClassicLight,\r\n\t\t\t\t\t\t\tonClick: (e) =>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tswitch (tile.typeEnum)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tcase TileTypeEnum.Link:\r\n\t\t\t\t\t\t\t\t\t\tSupport.openLinkPopup(tile.value);\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase TileTypeEnum.Navigation:\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.webComponentParameters()[0].specificDoctorIdList = [];\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.webComponentParameters()[0].specificActivityTypeIdList = [];\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.webComponentParameters()[0].specificActivityTypeGroupIdList = [];\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.webComponentParameters()[0].specificWorkplaceId = 0;\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.page(tile.value as PageEnum);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase TileTypeEnum.Email:\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tlet aTag = document.createElement(\"a\");\r\n\t\t\t\t\t\t\t\t\t\t\taTag.id = \"dashboard_tempUrl\";\r\n\t\t\t\t\t\t\t\t\t\t\taTag.href = \"mailto:\" + tile.value;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tdocument.body.appendChild(aTag);\r\n\t\t\t\t\t\t\t\t\t\t\taTag.click();\r\n\t\t\t\t\t\t\t\t\t\t\tpuma(\"#dashboard_tempUrl\").remove();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase TileTypeEnum.Call:\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tlet aTag = document.createElement(\"a\");\r\n\t\t\t\t\t\t\t\t\t\t\taTag.id = \"dashboard_tempUrl\";\r\n\t\t\t\t\t\t\t\t\t\t\taTag.href = \"tel:\" + tile.value;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tdocument.body.appendChild(aTag);\r\n\t\t\t\t\t\t\t\t\t\t\taTag.click();\r\n\t\t\t\t\t\t\t\t\t\t\tpuma(\"#dashboard_tempUrl\").remove();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase TileTypeEnum.PopupText:\r\n\t\t\t\t\t\t\t\t\t\tlet popup = new Popup(Rotator.container(),\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tcloseable: true,\r\n\t\t\t\t\t\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tmodal: true,\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: \"Calc(100% - 40px)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcss: \"top: 40px !important; height: Calc(100% - 65px) !important;\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcontent: tile.value\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\tpopup.open();\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase TileTypeEnum.SpecificDoctor:\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.webComponentParameters()[0].specificDoctorIdList = tile.value.removeSpaces().split(\",\").toNumberArrayList();\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.page(PageEnum.Booking);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase TileTypeEnum.SpecificActivityType:\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.webComponentParameters()[0].specificActivityTypeIdList = tile.value.removeSpaces().split(\",\").toNumberArrayList();\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.page(PageEnum.Booking);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase TileTypeEnum.SpecificActivityTypeGroup:\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.webComponentParameters()[0].specificActivityTypeGroupIdList = tile.value.removeSpaces().split(\",\").toNumberArrayList();\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.page(PageEnum.Booking);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase TileTypeEnum.SpecificWorkplace:\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.webComponentParameters()[0].specificWorkplaceId = Number(tile.value);\r\n\t\t\t\t\t\t\t\t\t\t\tRotator.page(PageEnum.Booking);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, divTile)\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t\t//#endregion\r\n\t}\r\n}\r\n\r\n//#region ChangeTilePosition\r\nclass GetTilesRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/UtilityWebApi/GetTiles\";\r\n}\r\n\r\nclass GetTilesResponse extends WebApiResponseBase\r\n{\r\n\tpublic tiles: OnlineBookingTileItem[];\r\n}\r\n\r\nclass OnlineBookingTileItem\r\n{\r\n\tpublic id?: number | null;\r\n\tpublic color: string;\r\n\tpublic backgroundColor: string;\r\n\tpublic icon: string | null;\r\n\tpublic typeEnum: TileTypeEnum;\r\n\tpublic displayType: string;\r\n\tpublic value: string;\r\n\tpublic position: number;\r\n\tpublic text: string;\r\n}\r\n\r\nenum TileTypeEnum\r\n{\r\n\tLink = 1,\r\n\tEmail = 2,\r\n\tSms = 3,\r\n\tCall = 4,\r\n\tSpecificDoctor = 5,\r\n\tSpecificWorkplace = 6,\r\n\tSpecificActivityType = 7,\r\n\tPopupText = 8,\r\n\tText = 9,\r\n\tNavigation = 10,\r\n\tSpecificActivityTypeGroup = 11\r\n}\r\n//#endregion","import { Support } from \"../../src/support\";\r\nimport { AppLoginModeEnum, PageEnum, puma, Rotator } from \"../../src/rotator\";\r\nimport { WebComponentModeEnum } from \"../../src/main\";\r\n\r\nexport class Menu\r\n{\r\n\tprivate static _divMenuContainer: HTMLElement;\r\n\tprivate static _divMenu: HTMLElement;\r\n\tprivate static _menuItemList: MenuItem[] = [];\r\n\tprivate static _background: HTMLElement;\r\n\r\n\tstatic initialize()\r\n\t{\r\n\t\tthis._divMenuContainer = vr.div(puma(\".vrPatientDivContainer\"), { class: \"vettorePatientMenu\" })\r\n\t\tthis._divMenu = vr.div(this._divMenuContainer, { css: \"height: Calc(100% - 33px); overflow-y: auto;\" });\r\n\r\n\t\t//#region Profile\r\n\t\tlet profileState = (Rotator.mode() == WebComponentModeEnum.OnlyBooking) ? MenuStateEnum.Hide : MenuStateEnum.ShowIfLogged;\r\n\t\tthis.createMenuItem(\"Profilo\", PageEnum.Profile, vr.IconClassicLight.User, profileState);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Booking\r\n\t\tlet bookingState = (Rotator.configuration().appLoginRequired == AppLoginModeEnum.Always) ? MenuStateEnum.ShowIfLogged : MenuStateEnum.ShowAlways;\r\n\t\tif ((Rotator.webComponentParameters()[0].vrSessionId == null || Rotator.webComponentParameters()[0].vrSessionId == \"\")\r\n\t\t\t&& (!Rotator.configuration().appBookingAppointments || Rotator.mode() == WebComponentModeEnum.OnlyPrivateArea))\r\n\t\t\tbookingState = MenuStateEnum.Hide;\r\n\r\n\t\tlet titleBooking = (Rotator.configuration().appShowDashboard) ? \"Home\" : \"Prenota\";\r\n\t\tlet iconBooking = (Rotator.configuration().appShowDashboard) ? vr.IconClassicLight.House : vr.IconClassicLight.Calendar;\r\n\t\tthis.createMenuItem(titleBooking, PageEnum.Booking, iconBooking, bookingState, (e) => Rotator.goToMainPage());\r\n\t\t//#endregion\r\n\r\n\t\t//#region Appointments\r\n\t\tlet appointmentsState = (Rotator.mode() == WebComponentModeEnum.OnlyBooking) ? MenuStateEnum.Hide : MenuStateEnum.ShowIfLogged;\r\n\t\tthis.createMenuItem(\"Appuntamenti\", PageEnum.AppointmentList, vr.IconClassicLight.CalendarCheck, appointmentsState);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Documents\r\n\t\tlet documentState = (Rotator.mode() == WebComponentModeEnum.OnlyBooking) ? MenuStateEnum.Hide : MenuStateEnum.ShowIfLogged;\r\n\t\tif (Rotator.configuration().appShowDocuments)\r\n\t\t\tthis.createMenuItem(\"Fatture\", PageEnum.DocumentList, vr.IconClassicLight.FileLines, documentState);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Reports\r\n\t\tlet reportsState = (Rotator.mode() == WebComponentModeEnum.OnlyBooking) ? MenuStateEnum.Hide : MenuStateEnum.ShowIfLogged;\r\n\t\tif (Rotator.configuration().appShowReports)\r\n\t\t\tthis.createMenuItem(\"Referti\", PageEnum.ReportList, vr.IconClassicLight.Book, reportsState);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Files\r\n\t\tlet filesState = (Rotator.mode() == WebComponentModeEnum.OnlyBooking) ? MenuStateEnum.Hide : MenuStateEnum.ShowIfLogged;\r\n\t\tif (Rotator.configuration().appShowFiles)\r\n\t\t\tthis.createMenuItem(\"Lista File\", PageEnum.FileList, vr.IconClassicLight.FileLines, filesState);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Info\r\n\t\tif (!Rotator.configuration().appHideInfoSection)\r\n\t\t\tthis.createMenuItem(\"Info\", PageEnum.Info, vr.IconClassicLight.CircleInfo, MenuStateEnum.ShowAlways);\r\n\t\t//#endregion\r\n\r\n\t\t//#region Login\r\n\t\tlet loginState = (Rotator.mode() == WebComponentModeEnum.OnlyBooking) ? MenuStateEnum.Hide : MenuStateEnum.ShowIfNotLogged;\r\n\t\tthis.createMenuItem(\"Accedi\", PageEnum.Login, vr.IconClassicLight.Login, loginState,\r\n\t\t\t(e) =>\r\n\t\t\t{\r\n\t\t\t\tRotator.page(PageEnum.Login);\r\n\t\t\t});\r\n\t\t//#endregion\r\n\r\n\t\tthis.createStructure();\r\n\t\tthis.draw();\r\n\r\n\t\tSupport.checkLogin();\r\n\t}\r\n\r\n\tprivate static createMenuItem(text: string, value: string, icon: vr.IconClassicLight, stateEnum: MenuStateEnum, callback?: (e: ClickMenuEvent) => void)\r\n\t{\r\n\t\tlet menuItem = new MenuItem();\r\n\t\tmenuItem.text = text;\r\n\t\tmenuItem.value = value;\r\n\t\tmenuItem.icon = icon;\r\n\t\tmenuItem.stateEnum = stateEnum;\r\n\t\tmenuItem.onClick = (e) =>\r\n\t\t{\r\n\t\t\tRotator.inBookingFlow(value == PageEnum.Booking);\r\n\t\t\tif (value == PageEnum.AppointmentList) Rotator.filterAppointmentOnPast(false);\r\n\r\n\t\t\tif (callback != null)\r\n\t\t\t\tcallback(e);\r\n\t\t\telse\r\n\t\t\t\tRotator.page(value);\r\n\t\t}\r\n\t\tthis._menuItemList.push(menuItem);\r\n\t}\r\n\r\n\tprivate static createStructure()\r\n\t{\r\n\t\tthis._background = vr.div(puma(\".vrPatientDivContainer\"), { class: \"vrPatient_popupBackground\", css: \"opacity: 0 !important;\" });\r\n\t\tpuma(this._background).hide();\r\n\t\tpuma(this._background).on(\"click\", (e: JQuery.ClickEvent) => this.hide());\r\n\r\n\t\tlet colorSeparator = (Rotator.isMobile()) ? \"#FFF\" : Rotator.color()\r\n\t\tvr.div(this._divMenu, { css: \"background-color: \" + colorSeparator + \"; height: 1px;\", class: \"vrPatientDivMenuTitleSeparator\" });\r\n\r\n\t\tlet divCredits = vr.div(this._divMenuContainer, { css: \"position: absolute; bottom: 0px; padding: 10px; padding-top: 5px; padding-bottom: 5px; width: Calc(100% - 20px); background-color: #FFF; border-top: solid 1px \" + Rotator.color() + \"; color: \" + Rotator.color() + \"; text-align: right;\" });\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"© Vettore.Medical\"\r\n\t\t}, divCredits);\r\n\t}\r\n\r\n\tprivate static draw()\r\n\t{\r\n\t\tfor (let menuItem of this._menuItemList)\r\n\t\t{\r\n\t\t\tlet divMenuItem = vr.div(this._divMenu, { class: \"vrPatientDivMenuItem\" });\r\n\t\t\tpuma(divMenuItem).attr(\"value\", menuItem.value);\r\n\t\t\tpuma(divMenuItem).attr(\"state\", menuItem.stateEnum);\r\n\r\n\t\t\tvr.icon(menuItem.icon, divMenuItem, { css: \"font-size: 1.6em; margin-right: 7px; color: \" + Rotator.color() });\r\n\r\n\t\t\tvr.createLabel({\r\n\t\t\t\ttext: menuItem.text,\r\n\t\t\t\tfontSize: \"1.6em\",\r\n\t\t\t\tcss: \"cursor: pointer;\"\r\n\t\t\t}, divMenuItem);\r\n\r\n\t\t\tpuma(divMenuItem).on(\"click\", (e: JQuery.ClickEvent) =>\r\n\t\t\t{\r\n\t\t\t\tthis.hide();\r\n\r\n\t\t\t\tlet clickEvent = new ClickMenuEvent();\r\n\t\t\t\tclickEvent.text = menuItem.text;\r\n\t\t\t\tclickEvent.value = menuItem.value;\r\n\t\t\t\tmenuItem.onClick!(clickEvent);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tstatic show()\r\n\t{\r\n\t\tpuma(this._divMenuContainer).show();\r\n\t\tpuma(this._background).show();\r\n\t}\r\n\r\n\tstatic hide()\r\n\t{\r\n\t\tpuma(this._divMenuContainer).hide();\r\n\t\tpuma(this._background).hide();\r\n\t}\r\n\r\n\tstatic visible(state?: boolean)\r\n\t{\r\n\t\tif (state != null)\r\n\t\t{\r\n\t\t\tif (state) this.show();\r\n\t\t\telse this.hide();\r\n\t\t}\r\n\t\treturn puma(this._divMenuContainer).is(\":visible\");\r\n\t}\r\n\r\n\tstatic manageState(logged: boolean)\r\n\t{\r\n\t\tpuma(\".vrPatientDivMenuItem[state='\" + MenuStateEnum.Hide + \"']\").hide();\r\n\r\n\t\tif (logged)\r\n\t\t{\r\n\t\t\tpuma(\".vrPatientDivMenuItem[state='\" + MenuStateEnum.ShowIfNotLogged + \"']\").hide();\r\n\t\t\tpuma(\".vrPatientDivMenuItem[state='\" + MenuStateEnum.ShowIfLogged + \"']\").show();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tpuma(\".vrPatientDivMenuItem[state='\" + MenuStateEnum.ShowIfNotLogged + \"']\").show();\r\n\t\t\tpuma(\".vrPatientDivMenuItem[state='\" + MenuStateEnum.ShowIfLogged + \"']\").hide();\r\n\t\t}\r\n\t}\r\n\r\n\tstatic highlightItem(value: string | PageEnum)\r\n\t{\r\n\t\tpuma(\".vrPatientDivMenuItem\").css(\"background-color\", \"#FFF\");\r\n\t\tpuma(\".vrPatientDivMenuItem i\").css(\"color\", Rotator.color());\r\n\t\tpuma(\".vrPatientDivMenuItem label\").css(\"color\", \"#000\");\r\n\r\n\t\tpuma(\".vrPatientDivMenuItem[value='\" + value + \"']\").css(\"background-color\", Rotator.color());\r\n\t\tpuma(\".vrPatientDivMenuItem[value='\" + value + \"'] i\").css(\"color\", \"#FFF\");\r\n\t\tpuma(\".vrPatientDivMenuItem[value='\" + value + \"'] label\").css(\"color\", \"#FFF\");\r\n\t}\r\n\r\n\tstatic hideItem(value: string | PageEnum)\r\n\t{\r\n\t\tpuma(\".vrPatientDivMenuItem[value='\" + value + \"']\").hide();\r\n\t}\r\n}\r\n\r\n//#region Classes\r\nclass MenuItem\r\n{\r\n\ttext: string;\r\n\tvalue: string;\r\n\ticon: vr.IconClassicLight;\r\n\tstateEnum: MenuStateEnum;\r\n\tonClick?: (e: ClickMenuEvent) => void;\r\n}\r\n\r\nclass ClickMenuEvent\r\n{\r\n\ttext: string;\r\n\tvalue: string;\r\n}\r\n\r\nenum MenuStateEnum\r\n{\r\n\tShowAlways,\r\n\tShowIfLogged,\r\n\tShowIfNotLogged,\r\n\tHide\r\n}\r\n//#endregion","import { Support } from \"../../src/support\";\r\nimport { Rotator, puma, PageEnum } from \"../../src/rotator\";\r\nimport { VrManager } from \"./vrManager\";\r\n\r\nexport class NoInternetConnection\r\n{\r\n\tprivate static _container: HTMLElement;\r\n\r\n\tstatic initialize()\r\n\t{\r\n\t\tthis._container = puma(\"
    \").appendTo(Rotator.container())[0];\r\n\t\tRotator.title(\"INTERNET ASSENTE\");\r\n\r\n\t\tthis.createControls();\r\n\t}\r\n\r\n\tprivate static createControls()\r\n\t{\r\n\t\t//#region Info\r\n\t\tlet divInfo = vr.div(this._container, { class: \"vrPatientDivSlot\" });\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: \"Connessione a internet limitata o assente\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcssContainer: \"margin-bottom: 5px;\",\r\n\t\t\talign: vr.TextAlignEnum.Center\r\n\t\t}, divInfo);\r\n\r\n\t\tvr.createLabel(\r\n\t\t\t{\r\n\t\t\t\ttext: \"Si è verificato un problema per quanto riguarda la connessione ad internet.

    Verifica che il dispositivo sia collegato alla rete e che il segnale arrivi in maniera adeguata.

    Una volta risolto il problema, sarà sufficiente ricaricare la pagina.\",\r\n\t\t\t\twidth: \"100%\"\r\n\t\t\t}, divInfo);\r\n\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Ricarica\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tcssContainer: \"margin-top: 15px;\",\r\n\t\t\tonClick: (e) => \r\n\t\t\t{\r\n\t\t\t\tif (Support.checkInternetConnection())\r\n\t\t\t\t{\r\n\t\t\t\t\tVrManager.notify(\"Connessione ristabilita\", \"\", { type: vr.NotifierTypeEnum.Success });\r\n\t\t\t\t\tRotator.goToFirstPage();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tVrManager.notify(\"Nessuna connessione\", \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\t}\r\n\t\t}, divInfo);\r\n\t\t//#endregion\r\n\t}\r\n}","import { Rotator } from \"../../src/rotator\";\r\nimport { Support } from \"../../src/support\";\r\n\r\nexport class VrManager\r\n{\r\n\tstatic notify(text: string, stackTrace?: string, options?: vr.NotifierOptions | null, container?: HTMLElement | JQuery | string | null): vr.Notifier\r\n\t{\r\n\t\tif (options == null) options = {};\r\n\t\toptions.css = \"padding-top: 3px; padding-bottom: 3px;\";\r\n\t\toptions.fontSize = \"1.2em !important\";\r\n\t\t//options.hideSettings = { clickToHide: true }\r\n\r\n\t\tif (stackTrace != null && stackTrace != \"\" && !Rotator.isMobile())\r\n\t\t{\r\n\t\t\toptions.onClick = () =>\r\n\t\t\t{\r\n\t\t\t\tvr.createWindow({\r\n\t\t\t\t\ttitle: \"Gestione eccezione\",\r\n\t\t\t\t\tcontent: \"
    StackTrace: \" + stackTrace + \"
    \",\r\n\t\t\t\t\tfooter: [{ type: vr.WindowFooterItemTypeEnum.Close }]\r\n\t\t\t\t}, Rotator.shadowRoot() as any).open();\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tlet result = vr.notify(text, options);\r\n\t\tSupport.fixNotifyPosition();\r\n\t\treturn result;\r\n\t}\r\n}","import { Support } from \"../../src/support\";\r\nimport { Rotator, PageEnum, puma } from \"../rotator\";\r\nimport { VrManager } from \"./vrManager\";\r\n\r\nexport class WebApiRequestBase extends vrshared.WebApiRequest()\r\n{\r\n\tpublic method: string;\r\n\tpublic checkConnection: boolean = true;\r\n\tprivate sessionId: string;\r\n\r\n\tcall(settings?: vrshared.WebApiSettings): T\r\n\t{\r\n\t\tthis.sessionId = Rotator.setCookieSession();\r\n\t\tthis.method = Rotator.patientUrl() + this.method;\r\n\r\n\t\tif (settings == null)\r\n\t\t\tsettings = new vrshared.WebApiSettings();\r\n\r\n\t\tlet success = settings!.success;\r\n\t\tsettings.success = (response) =>\r\n\t\t{\r\n\t\t\tif (response != null && (response as any).sessionExpired === true)\r\n\t\t\t{\r\n\t\t\t\tlet request = new GetConfigurationRequest();\r\n\t\t\t\trequest.configurations = Rotator.webComponentParameters();\r\n\t\t\t\trequest.call(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsuccess: (response: GetConfigurationResponse) => super.call(settings)\r\n\t\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (settings!.loader !== false)\r\n\t\t\t\tvrshared.LoaderManager().hide();\r\n\r\n\t\t\tif (response.warningMessage != null && response.warningMessage != \"\")\r\n\t\t\t{\r\n\t\t\t\tVrManager.notify(response.warningMessage, \"\", { type: vr.NotifierTypeEnum.Error });\r\n\t\t\t\tif (settings!.error != null)\r\n\t\t\t\t\tsettings!.error(response);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (success != null)\r\n\t\t\t\t\tsuccess(response);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet error = settings!.error;\r\n\t\tsettings.showError = false;\r\n\t\tsettings.error = (response) =>\r\n\t\t{\r\n\t\t\tif (response.statusCode == 401) // Unauthorized\r\n\t\t\t{\r\n\t\t\t\tlet request = new LogoutRequest();\r\n\t\t\t\trequest.call(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsuccess: (response: LogoutResponse) => \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tpuma(\".vrPatientDivMenuItem[state='2']\").show();\r\n\t\t\t\t\t\t\tpuma(\".vrPatientDivMenuItem[state='1']\").hide();\r\n\t\t\t\t\t\t\tRotator.page(PageEnum.Login);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tloader: false,\r\n\t\t\t\t\t\tshowError: false\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tvrshared.LoaderManager().hide();\r\n\t\t\tif (error != null)\r\n\t\t\t\terror(response);\r\n\r\n\t\t\tlet message = response.message;\r\n\t\t\tif (response.statusCode == 403) // Forbidden\r\n\t\t\t\tmessage += \"
    Controllare la validità dell'Api Key\";\r\n\r\n\t\t\tif (response.message != null)\r\n\t\t\t\tVrManager.notify(message, (response.statusCode == 200) ? \"\" : response.stackTrace, { type: vr.NotifierTypeEnum.Error });\r\n\t\t}\r\n\r\n\t\t//#region Check Internet connection\r\n\t\tif (!Support.checkInternetConnection()) \r\n\t\t{\r\n\t\t\tRotator.page(PageEnum.NoInternetConnection);\r\n\t\t\treturn null as any as T;\r\n\t\t};\r\n\t\t//#endregion\r\n\r\n\t\tlet response = super.call(settings);\r\n\t\treturn response;\r\n\t}\r\n}\r\n\r\nexport class WebApiResponseBase extends vrshared.WebApiResponse()\r\n{\r\n\tdeclare public StackTrace: string | undefined;\r\n\tdeclare public ExceptionMessage: string | null;\r\n\tdeclare public Success: boolean;\r\n\tdeclare public ShowErrorPopup: boolean;\r\n}\r\n\r\n//#region GetConfiguration\r\nclass GetConfigurationRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/LoginWebApi/GetConfiguration\";\r\n\tpublic configurations: any[];\r\n}\r\n\r\nclass GetConfigurationResponse extends vrshared.WebApiResponse()\r\n{\r\n\tpublic configuration: any;\r\n}\r\n\r\nclass LogoutRequest extends WebApiRequestBase \r\n{\r\n\tpublic method: string = \"/api/LoginWebApi/Logout\";\r\n}\r\n\r\nclass LogoutResponse extends WebApiResponseBase \r\n{\r\n}\r\n//#endregion","import { WebApiRequestBase, WebApiResponseBase } from \"./shared/webApi\";\r\nimport { Rotator, PageEnum, puma, OnlineBookingPriceZeroEnum } from \"./rotator\";\r\nimport { Login, LoginParameters } from \"./login/login\";\r\nimport { Menu } from \"./shared/menu\";\r\nimport { WorkplaceResponse } from \"./shared/common\";\r\nimport { VrManager } from \"./shared/vrManager\";\r\n\r\ndeclare var gtag: any;\r\ndeclare var fbq: any;\r\n\r\nexport class Support\r\n{\r\n\tstatic checkLogin(loggedCallback?: Function | null, notLoggedCallback?: Function | null, afterLoginCallback?: Function | null, async = true)\r\n\t{\r\n\t\tlet request = new CheckLoginRequest();\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: CheckLoginResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (response.logged)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//#region Logged\r\n\t\t\t\t\t\tif (loggedCallback == null)\r\n\t\t\t\t\t\t\tRotator.goToMainPage();\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tloggedCallback();\r\n\r\n\t\t\t\t\t\tMenu.manageState(true);\r\n\t\t\t\t\t\t//#endregion\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlet credentials = vrshared.CookieManager().getCookie(\"credentials\") as any;\r\n\t\t\t\t\t\tif (credentials != null && credentials.username != null && credentials.password != null && credentials.username.length > 0 && credentials.password.length > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tLogin.login(credentials.username, credentials.password, () => \r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t//#region Logged\r\n\t\t\t\t\t\t\t\tif (loggedCallback == null)\r\n\t\t\t\t\t\t\t\t\tRotator.goToMainPage();\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\tloggedCallback();\r\n\r\n\t\t\t\t\t\t\t\tMenu.manageState(true);\r\n\t\t\t\t\t\t\t\t//#endregion\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t() =>\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t//#region Not logged\r\n\t\t\t\t\t\t\t\t\tif (notLoggedCallback == null)\r\n\t\t\t\t\t\t\t\t\t\tRotator.goToMainPage();\r\n\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\tnotLoggedCallback();\r\n\r\n\t\t\t\t\t\t\t\t\tMenu.manageState(false);\r\n\t\t\t\t\t\t\t\t\t//#endregion\r\n\t\t\t\t\t\t\t\t}, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//#region Not logged\r\n\t\t\t\t\t\t\tif (notLoggedCallback == null && afterLoginCallback != null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tRotator.inBookingFlow(false);\r\n\t\t\t\t\t\t\t\tlet loginParameters = new LoginParameters();\r\n\t\t\t\t\t\t\t\tloginParameters.successCallback = afterLoginCallback;\r\n\t\t\t\t\t\t\t\tRotator.page(PageEnum.Login, loginParameters);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse if (notLoggedCallback != null)\r\n\t\t\t\t\t\t\t\tnotLoggedCallback();\r\n\r\n\t\t\t\t\t\t\tMenu.manageState(false);\r\n\t\t\t\t\t\t\t//#endregion\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tmode: (async) ? vrshared.WebApiModeEnum.Async : vrshared.WebApiModeEnum.Sync,\r\n\t\t\t\tloader: false\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic logout(callback?: Function)\r\n\t{\r\n\t\tlet request = new LogoutRequest();\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: LogoutResponse) => \r\n\t\t\t\t{\r\n\t\t\t\t\tVrManager.notify(\"Logout effettuato!\");\r\n\r\n\t\t\t\t\tRotator.bookingParameters(null);\r\n\t\t\t\t\tRotator.confirmationParameters(null);\r\n\t\t\t\t\tRotator.clearPageHistory();\r\n\t\t\t\t\t//vrshared.CookieManager().deleteCookie(\"sessionId\");\r\n\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback();\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tRotator.goToMainPage();\r\n\r\n\t\t\t\t\tMenu.manageState(false);\r\n\t\t\t\t},\r\n\t\t\t\tloader: false\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic getLocation()\r\n\t{\r\n\t\tif (navigator.geolocation)\r\n\t\t{\r\n\t\t\tnavigator.geolocation.getCurrentPosition(\r\n\t\t\t\t(position) => \r\n\t\t\t\t{\r\n\t\t\t\t\tRotator.bookingParameters().latitude = position.coords.latitude;\r\n\t\t\t\t\tRotator.bookingParameters().longitude = position.coords.longitude;\r\n\t\t\t\t},\r\n\t\t\t\t(error) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (error.code)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase error.PERMISSION_DENIED:\r\n\t\t\t\t\t\t\tconsole.log(\"User denied the request for Geolocation.\");\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase error.POSITION_UNAVAILABLE:\r\n\t\t\t\t\t\t\tconsole.log(\"Location information is unavailable.\")\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase error.TIMEOUT:\r\n\t\t\t\t\t\t\tconsole.log(\"The request to get user location timed out.\")\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tconsole.log(\"An unknown error occurred when get location.\")\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tstatic getFileBase64(fileId: number, callback: (base64: string) => void, loader: boolean | HTMLElement | JQuery | string)\r\n\t{\r\n\t\tlet request = new DownloadFileRequest();\r\n\t\trequest.fileId = fileId;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: DownloadFileResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tcallback(response.base64);\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic downloadFile(fileId: number, fileName?: string, mimeType: FileTypeEnum = FileTypeEnum.General)\r\n\t{\r\n\t\tthis.getFileData(fileId, (e) =>\r\n\t\t{\r\n\t\t\tvrshared.UtilityManager().downloadFile(e.base64, fileName, mimeType, !Rotator.isApp());\r\n\t\t});\r\n\t}\r\n\r\n\tstatic getFileData(fileId: number, callback?: (e: FileDataEvent) => void)\r\n\t{\r\n\t\tlet request = new DownloadFileRequest();\r\n\t\trequest.fileId = fileId;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: DownloadFileResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (response.base64 == null || response.base64.length == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvr.notifyError(\"Impossibile scaricare o visualizzare il file; risulta vuoto o danneggiato\");\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(response);\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic downloadDocument(documentId: number, fileName?: string)\r\n\t{\r\n\t\tthis.getDocumentData(documentId, (base64) =>\r\n\t\t{\r\n\t\t\tif (base64 == null || base64.length == 0)\r\n\t\t\t{\r\n\t\t\t\tvr.notifyError(\"Impossibile scaricare o visualizzare il documento; risulta vuoto o danneggiato\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvrshared.UtilityManager().downloadFile(base64, fileName, FileTypeEnum.Pdf, !Rotator.isApp());\r\n\t\t});\r\n\t}\r\n\r\n\tstatic getDocumentData(documentId: number, callback?: (e: string) => void)\r\n\t{\r\n\t\tlet request = new DownloadDocumentRequest();\r\n\t\trequest.documentId = documentId;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: DownloadDocumentResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif (response.base64 == null || response.base64.length == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvr.notifyError(\"Impossibile scaricare o visualizzare il documento; risulta vuoto o danneggiato\");\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(response.base64);\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: Rotator.container()\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic fixNotifyPosition()\r\n\t{\r\n\t\tlet divContainer = puma(\".vrPatientDivContainer\")[0];\r\n\t\tif (divContainer != null)\r\n\t\t{\r\n\t\t\tpuma(\".vrNotifierAreaTopCenter\").appendToPuma(divContainer);\r\n\t\t\tpuma(\".vrNotifierAreaTopCenter\").css({ \"top\": \"0px\", \"left\": \"0px\", \"position\": \"absolute\", \"width\": (Rotator.isMobile()) ? \"Calc(100% - 20px)\" : \"100%\" });\r\n\t\t\tpuma(\".vrNotifierContainer\").css({ \"left\": \"0px\", \"top\": \"0px\" });\r\n\t\t}\r\n\t}\r\n\r\n\tstatic addCss(css: string)\r\n\t{\r\n\t\tlet style = document.createElement(\"style\");\r\n\t\tlet cssNode: Text = document.createTextNode(css);\r\n\t\tstyle.appendChild(cssNode);\r\n\t\tRotator.shadowRoot().appendChild(style);\r\n\t}\r\n\r\n\tstatic getAddressName(workplace: WorkplaceResponse)\r\n\t{\r\n\t\tlet address = \"\";\r\n\t\tif (workplace != null)\r\n\t\t{\r\n\t\t\tlet street = (workplace.street != null) ? workplace.street : \"\";\r\n\t\t\tlet zip = (workplace.zip != null) ? (\" \" + workplace.zip) : \"\";\r\n\t\t\tlet city = (workplace.city != null) ? (\" - \" + workplace.city) : \"\";\r\n\t\t\tlet province = (workplace.province != null) ? (\" (\" + workplace.province + \")\") : \"\";\r\n\t\t\taddress = street + zip + city + province;\r\n\t\t}\r\n\r\n\t\tif (address === \"\") address = \"Dettaglio sede non impostato\";\r\n\t\treturn address;\r\n\t}\r\n\r\n\tstatic displayPrice(price: number, type: PriceTypeEnum, colored = false, spaceBefore = true)\r\n\t{\r\n\t\tlet displayPrice = \"\";\r\n\t\tif (type == PriceTypeEnum.Appointment)\r\n\t\t{\r\n\t\t\tif (!Rotator.configuration().appShowAppointmentPrice)\r\n\t\t\t\tdisplayPrice = \"\";\r\n\t\t\telse if (price > 0)\r\n\t\t\t\tdisplayPrice = price.toCurrencyString();\r\n\t\t\telse if (price == 0)\r\n\t\t\t{\r\n\t\t\t\tswitch (Rotator.configuration().appAppointmentPriceZeroManagement)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase OnlineBookingPriceZeroEnum.Decimal: displayPrice = price.toCurrencyString(); break;\r\n\t\t\t\t\tcase OnlineBookingPriceZeroEnum.Free: displayPrice = \"Gratuito\"; break;\r\n\t\t\t\t\tcase OnlineBookingPriceZeroEnum.Hide: displayPrice = \"\"; break;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (type == PriceTypeEnum.ActivityType)\r\n\t\t{\r\n\t\t\tif (!Rotator.configuration().appShowActivityTypePrice)\r\n\t\t\t\tdisplayPrice = \"\";\r\n\t\t\telse if (price > 0)\r\n\t\t\t\tdisplayPrice = price.toCurrencyString();\r\n\t\t\telse if (price == 0)\r\n\t\t\t{\r\n\t\t\t\tswitch (Rotator.configuration().appActivityTypePriceZeroManagement)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase OnlineBookingPriceZeroEnum.Decimal: displayPrice = price.toCurrencyString(); break;\r\n\t\t\t\t\tcase OnlineBookingPriceZeroEnum.Free: displayPrice = \"Gratuita\"; break;\r\n\t\t\t\t\tcase OnlineBookingPriceZeroEnum.Hide: displayPrice = \"\"; break;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (colored && displayPrice.length > 0)\r\n\t\t\tdisplayPrice = \"\" + displayPrice + \"\";\r\n\r\n\t\tif (spaceBefore)\r\n\t\t\tdisplayPrice = \" \" + displayPrice;\r\n\r\n\t\treturn displayPrice;\r\n\t}\r\n\r\n\tstatic fullScreen()\r\n\t{\r\n\t\tlet container = Rotator.container() as any;\r\n\t\ttry\r\n\t\t{\r\n\t\t\tlet doc = window.document as any;\r\n\t\t\tif (!doc.fullscreenElement && !doc.mozFullScreenElement && !doc.webkitFullscreenElement && !doc.msFullscreenElement)\r\n\t\t\t{\r\n\t\t\t\t//#region RequestFullScreen\r\n\t\t\t\tif (container.requestFullscreen)\r\n\t\t\t\t\tcontainer.requestFullscreen();\r\n\t\t\t\telse if (container.mozRequestFullScreen) // Firefox\r\n\t\t\t\t\tcontainer.mozRequestFullScreen();\r\n\t\t\t\telse if (container.webkitRequestFullscreen) // Chrome, Safari, Opera\r\n\t\t\t\t\tcontainer.webkitRequestFullscreen();\r\n\t\t\t\telse if (container.msRequestFullscreen) // Edge\r\n\t\t\t\t\tcontainer.msRequestFullscreen();\r\n\t\t\t\telse if (container.webkitEnterFullscreen) // Safari mobile (if not supported webkitRequestFullScreen) - No custom buttons\r\n\t\t\t\t\tcontainer.onloadedmetadata = () => container.webkitEnterFullscreen();\r\n\t\t\t\t//#endregion\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch (e) { }\r\n\t}\r\n\r\n\tstatic createDatePicker(options: vr.DatePickerOptions, divContainer: HTMLElement)\r\n\t{\r\n\t\toptions.onAfterChange = (e) => calendar.value(e.value, false);\r\n\t\tlet datePicker = vr.createDatePicker(options, divContainer);\r\n\r\n\t\tlet popup = new Popup(Rotator.container(), { height: \"auto\", width: 320 });\r\n\t\tlet calendar = vr.createCalendar(\r\n\t\t\t{\r\n\t\t\t\tcssContainer: \"margin-top: -10px;\",\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tselectedColor: Rotator.color(),\r\n\t\t\t\tonAfterChange: (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tdatePicker.value(e.value, false);\r\n\t\t\t\t\tpopup.close();\r\n\t\t\t\t}\r\n\t\t\t}, popup.element());\r\n\t\tpuma(calendar.element()).find(\".vrDatePickerPopup_table\")[0].style.cssText += \"min-height: 285px;\";\r\n\r\n\t\tpuma(datePicker.container()).find(\".vrIcon\").hide();\r\n\t\tvr.createButton({\r\n\t\t\ticon: vr.IconClassicLight.Calendar,\r\n\t\t\tcss: \"border: none; background: none;\",\r\n\t\t\tcssContainer: \"position: absolute; right: -4px; margin-top: 18px;\",\r\n\t\t\tonClick: (e) => popup.open()\r\n\t\t}, datePicker.container());\r\n\r\n\t\treturn datePicker;\r\n\t}\r\n\r\n\tstatic getDayWeekName(date: Date, short = false)\r\n\t{\r\n\t\tif (short)\r\n\t\t{\r\n\t\t\tlet dayWeekNamesShort = [\"DOM\", \"LUN\", \"MAR\", \"MER\", \"GIO\", \"VEN\", \"SAB\"];\r\n\t\t\treturn dayWeekNamesShort[date.getDay()];\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tlet dayWeekNamesShort = [\"Domenica\", \"Lunedì\", \"Martedì\", \"Mercoledì\", \"Giovedì\", \"Venerdì\", \"Sabato\"];\r\n\t\t\treturn dayWeekNamesShort[date.getDay()];\r\n\t\t}\r\n\t}\r\n\r\n\tstatic getMonthName(date: Date, short = false)\r\n\t{\r\n\t\tif (short)\r\n\t\t{\r\n\t\t\tlet dayWeekNamesShort = [\"GEN\", \"FEB\", \"MAR\", \"APR\", \"MAG\", \"GIU\", \"LUG\", \"AGO\", \"SET\", \"OTT\", \"NOV\", \"DIC\"];\r\n\t\t\treturn dayWeekNamesShort[date.getMonth()];\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tlet dayWeekNamesShort = [\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"];\r\n\t\t\treturn dayWeekNamesShort[date.getMonth()];\r\n\t\t}\r\n\t}\r\n\r\n\tstatic checkInternetConnection()\r\n\t{\r\n\t\tif (!window.navigator.onLine)\r\n\t\t\treturn false;\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tstatic getTrackingCookies()\r\n\t{\r\n\t\tlet request = new GetTrackingCookiesRequest();\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: GetTrackingCookiesResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tRotator.trackingCookiesInfo(response.cookiesInfo);\r\n\t\t\t\t\tfor (let cookieInfo of response.cookiesInfo)\r\n\t\t\t\t\t\tpuma(\"head\").append(cookieInfo.code);\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: false\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic getUTM()\r\n\t{\r\n\t\t//#region Properties\r\n\t\tlet campaignSourceProperty = Rotator.configuration().appUTMCampaignSource;\r\n\t\tlet campaignMediumProperty = Rotator.configuration().appUTMCampaignMedium;\r\n\t\tlet campaignNameProperty = Rotator.configuration().appUTMCampaignName;\r\n\t\t//#endregion\r\n\r\n\t\tif ((campaignSourceProperty != null && campaignSourceProperty != \"\")\r\n\t\t\t|| (campaignMediumProperty != null && campaignMediumProperty != \"\")\r\n\t\t\t|| (campaignNameProperty != null && campaignNameProperty != \"\"))\r\n\t\t{\r\n\t\t\tlet request = new GetMarketingUTMRequest();\r\n\t\t\trequest.plantId = [Rotator.configuration().plant.id];\r\n\t\t\trequest.call(\r\n\t\t\t\t{\r\n\t\t\t\t\tsuccess: (response: GetMarketingUTMResponse) =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlet error = false;\r\n\t\t\t\t\t\tlet campaignSource = vrshared.UtilityManager().getUrlParameter(campaignSourceProperty);\r\n\t\t\t\t\t\tif (campaignSource == null)\r\n\t\t\t\t\t\t\tcampaignSource = (Rotator.webComponentParameters()[0] as any)[campaignSourceProperty];\r\n\r\n\t\t\t\t\t\tif (campaignSource != null && campaignSource.length > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlet existingCampaignSource = response.campaignSource.filter(k => k.code == campaignSource)[0];\r\n\t\t\t\t\t\t\tif (existingCampaignSource == null)\r\n\t\t\t\t\t\t\t\terror = true;\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tRotator.campaignSourceId(existingCampaignSource.id);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (error)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tSupport.removeWebComponent();\r\n\t\t\t\t\t\t\tvr.createLabel(\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttext: \"Campaign Source not found\",\r\n\t\t\t\t\t\t\t\t\tcolorSettings: { textColor: \"red\" }\r\n\t\t\t\t\t\t\t\t}, Rotator.shadowRoot() as any);\r\n\r\n\t\t\t\t\t\t\tthrow Error(\"Campaign Source not found\");\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlet campaignMedium = vrshared.UtilityManager().getUrlParameter(campaignMediumProperty);\r\n\t\t\t\t\t\tif (campaignMedium == null)\r\n\t\t\t\t\t\t\tcampaignMedium = (Rotator.webComponentParameters()[0] as any)[campaignMediumProperty];\r\n\r\n\t\t\t\t\t\tif (campaignMedium != null && campaignMedium.length > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlet existingCampaignMedium = response.campaignMedium.filter(k => k.code == campaignMedium)[0];\r\n\t\t\t\t\t\t\tif (existingCampaignMedium == null)\r\n\t\t\t\t\t\t\t\terror = true;\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tRotator.campaignMediumId(existingCampaignMedium.id);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (error)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tSupport.removeWebComponent();\r\n\t\t\t\t\t\t\tvr.createLabel(\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttext: \"Campaign Medium not found\",\r\n\t\t\t\t\t\t\t\t\tcolorSettings: { textColor: \"red\" }\r\n\t\t\t\t\t\t\t\t}, Rotator.shadowRoot() as any);\r\n\r\n\t\t\t\t\t\t\tthrow Error(\"Campaign Medium not found\");\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlet campaignName = vrshared.UtilityManager().getUrlParameter(campaignNameProperty);\r\n\t\t\t\t\t\tif (campaignName == null)\r\n\t\t\t\t\t\t\tcampaignName = (Rotator.webComponentParameters()[0] as any)[campaignNameProperty];\r\n\r\n\t\t\t\t\t\tif (campaignName != null)\r\n\t\t\t\t\t\t\tRotator.campaignName(campaignName);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\t\tloader: false\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tstatic removeWebComponent()\r\n\t{\r\n\t\tpuma(\".vrPatientDivContainer\").remove();\r\n\t\tRotator.mainButton().hide();\r\n\t}\r\n\r\n\tstatic getAppLogo()\r\n\t{\r\n\t\tlet base64Logo = \"\";\r\n\t\tlet request = new GetAppLogoRequest();\r\n\t\trequest.plantId = [Rotator.configuration().plant.id];\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: GetAppLogoResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tbase64Logo = response.base64Logo;\r\n\t\t\t\t},\r\n\t\t\t\terror: (e) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tbase64Logo = \"\";\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Sync,\r\n\t\t\t\tloader: false,\r\n\t\t\t\tshowError: false\r\n\t\t\t});\r\n\t\treturn base64Logo;\r\n\t}\r\n\r\n\tstatic getResourceAvatar(resourceId: number, callback?: (e: string) => void, async = false)\r\n\t{\r\n\t\tlet request = new GetResourceAvatarRequest();\r\n\t\trequest.plantId = [Rotator.configuration().plant.id];\r\n\t\trequest.resourceId = resourceId;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: GetResourceAvatarResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tlet base64Avatar = response.base64Avatar;\r\n\t\t\t\t\tif (callback != null)\r\n\t\t\t\t\t\tcallback(base64Avatar);\r\n\t\t\t\t},\r\n\t\t\t\tmode: (async) ? vrshared.WebApiModeEnum.Async : vrshared.WebApiModeEnum.Sync,\r\n\t\t\t\tloader: false,\r\n\t\t\t\tshowError: false\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic manageTrackingCookiesEvent(eventTypeEnum: EventTypeEnum, activityTypeId?: number, parameters?: TrackingCookiesEventParameters)\r\n\t{\r\n\t\tif (Rotator.trackingCookiesInfo() == null || Rotator.trackingCookiesInfo().length == 0)\r\n\t\t\treturn;\r\n\r\n\t\tlet request = new GetTrackingCookiesEventRequest();\r\n\t\trequest.eventTypeId = eventTypeEnum;\r\n\t\trequest.activityTypeId = activityTypeId;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: GetTrackingCookiesEventResponse) =>\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (let eventInfo of response.eventInfo)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tswitch (eventInfo.serviceTypeId)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase ServiceTypeEnum.Facebook:\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tlet json: any = {};\r\n\t\t\t\t\t\t\t\t\tjson.content_ids = [eventInfo.code];\r\n\t\t\t\t\t\t\t\t\tjson.eventref = \"\";\r\n\r\n\t\t\t\t\t\t\t\t\tif (eventInfo.remoteEventName == \"Purchase\")\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tjson.currency = \"EUR\";\r\n\t\t\t\t\t\t\t\t\t\tjson.num_items = 1;\r\n\t\t\t\t\t\t\t\t\t\tjson.value = (parameters != null) ? parameters.amount : 0;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tfbq(\"track\", eventInfo.remoteEventName, json);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase ServiceTypeEnum.Google:\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tgtag(\"event\", eventInfo.remoteEventName, {\r\n\t\t\t\t\t\t\t\t\t\t\"send_to\": eventInfo.code\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: false\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic sendErrorEmail(message: string, appointmentId?: number)\r\n\t{\r\n\t\tlet request = new SendErrorEmailRequest();\r\n\t\trequest.appointmentId = appointmentId;\r\n\t\trequest.optionalBody = message;\r\n\t\trequest.call(\r\n\t\t\t{\r\n\t\t\t\tsuccess: (response: SendErrorEmailResponse) =>\r\n\t\t\t\t{\r\n\r\n\t\t\t\t},\r\n\t\t\t\tmode: vrshared.WebApiModeEnum.Async,\r\n\t\t\t\tloader: false\r\n\t\t\t});\r\n\t}\r\n\r\n\tstatic openLinkPopup(link: string)\r\n\t{\r\n\t\tlet popup = new Popup(Rotator.container(),\r\n\t\t\t{\r\n\t\t\t\tcloseable: true,\r\n\t\t\t\theight: \"100%\",\r\n\t\t\t\tmodal: true,\r\n\t\t\t\twidth: \"Calc(100% - 40px)\",\r\n\t\t\t\tpadding: false,\r\n\t\t\t\tcss: \"top: 40px !important; height: Calc(100% - 48px) !important;\"\r\n\t\t\t});\r\n\t\tpopup.open();\r\n\r\n\t\tlet iframe = puma(\"\").appendToPuma(popup.element())[0] as HTMLIFrameElement;\r\n\t\tlet iframeBody: HTMLElement | null = null;\r\n\r\n\t\tlet iframeContentDocument = iframe!.contentDocument;\r\n\t\tpuma(iframeContentDocument).find(\"body\").css(\"margin\", \"0px\");\r\n\t\tif (iframeContentDocument != null)\r\n\t\t\tiframeBody = iframeContentDocument.body;\r\n\r\n\t\tvrshared.LoaderManager().show();\r\n\t\tpuma(iframe).attr(\"src\", link);\r\n\t\tpuma(iframe).on(\"load\", () => \r\n\t\t{\r\n\t\t\tvrshared.LoaderManager().hide();\r\n\t\t\tlet iframeContentDocument = iframe!.contentDocument;\r\n\t\t\tpuma(iframeContentDocument).find(\"body\").css(\"margin\", \"0px\");\r\n\t\t});\r\n\t}\r\n\r\n\tstatic prompt(text: string, successCallback: (value: string) => void, cancelCallback?: Function)\r\n\t{\r\n\t\tlet popup = new Popup(Rotator.container(),\r\n\t\t\t{\r\n\t\t\t\tcloseable: false,\r\n\t\t\t\theight: \"auto\",\r\n\t\t\t\tmodal: true,\r\n\t\t\t\twidth: \"Calc(100% - 40px)\"\r\n\t\t\t});\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: text,\r\n\t\t\twidth: \"100%\",\r\n\t\t\talign: vr.TextAlignEnum.Center\r\n\t\t}, popup.element());\r\n\r\n\t\tlet txtValue = vr.createTextBox({\r\n\t\t\twidth: \"100%\"\r\n\t\t}, popup.element())\r\n\t\twindow.setTimeout(() => txtValue.focus());\r\n\r\n\t\tlet divButtons = vr.div(popup.element(), { css: \"display: flex; justify-content: space-between; margin-top: 15px;\" });\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Conferma\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tcssContainer: \"margin-right: 5px;\",\r\n\t\t\tclass: \"vrButtonChangePassword vrButtonPatient\",\r\n\t\t\tonClick: (e) => \r\n\t\t\t{\r\n\t\t\t\tpopup.close();\r\n\t\t\t\tif (successCallback != null)\r\n\t\t\t\t\tsuccessCallback(txtValue.value());\r\n\t\t\t}\r\n\t\t}, divButtons)\r\n\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Chiudi\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tcssContainer: \"margin-left: 5px;\",\r\n\t\t\tclass: \"vrButtonChangePassword vrButtonPatient\",\r\n\t\t\tonClick: (e) => \r\n\t\t\t{\r\n\t\t\t\tif (cancelCallback != null)\r\n\t\t\t\t\tcancelCallback();\r\n\r\n\t\t\t\tpopup.close()\r\n\t\t\t}\r\n\t\t}, divButtons);\r\n\r\n\t\tpopup.open();\r\n\t}\r\n\r\n\tstatic confirm(text: string, successCallback?: Function)\r\n\t{\r\n\t\tlet popup = new Popup(Rotator.container(),\r\n\t\t\t{\r\n\t\t\t\tcloseable: false,\r\n\t\t\t\theight: \"auto\",\r\n\t\t\t\tmodal: true,\r\n\t\t\t\twidth: \"Calc(100% - 40px)\"\r\n\t\t\t});\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: text,\r\n\t\t\twidth: \"100%\",\r\n\t\t\talign: vr.TextAlignEnum.Center\r\n\t\t}, popup.element());\r\n\r\n\t\tlet divButtons = vr.div(popup.element(), { css: \"display: flex; justify-content: space-between; margin-top: 15px;\" });\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Conferma\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcolorSettings: { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tcssContainer: \"margin-right: 5px;\",\r\n\t\t\tclass: \"vrButtonChangePassword vrButtonPatient\",\r\n\t\t\tonClick: (e) => \r\n\t\t\t{\r\n\t\t\t\tpopup.close();\r\n\t\t\t\tif (successCallback != null)\r\n\t\t\t\t\tsuccessCallback();\r\n\t\t\t}\r\n\t\t}, divButtons)\r\n\r\n\t\tvr.createButton({\r\n\t\t\ttext: \"Chiudi\",\r\n\t\t\twidth: \"100%\",\r\n\t\t\tcolorSettings: { textColor: Rotator.color() },\r\n\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\tcssContainer: \"margin-left: 5px;\",\r\n\t\t\tclass: \"vrButtonChangePassword vrButtonPatient\",\r\n\t\t\tonClick: (e) => popup.close()\r\n\t\t}, divButtons);\r\n\r\n\t\tpopup.open();\r\n\t}\r\n\r\n\tstatic dialog(text: string, footerItems: vr.WindowFooterItem[])\r\n\t{\r\n\t\tlet popup = new Popup(Rotator.container(),\r\n\t\t\t{\r\n\t\t\t\tcloseable: false,\r\n\t\t\t\theight: \"auto\",\r\n\t\t\t\tmodal: true,\r\n\t\t\t\twidth: \"Calc(100% - 40px)\",\r\n\t\t\t\tremoveOnClose: true\r\n\t\t\t});\r\n\r\n\t\tvr.createLabel({\r\n\t\t\ttext: text,\r\n\t\t\twidth: \"100%\",\r\n\t\t\talign: vr.TextAlignEnum.Center\r\n\t\t}, popup.element());\r\n\r\n\t\tlet divButtons = vr.div(popup.element(), { css: \"display: flex; justify-content: space-between; margin-top: 15px;\" });\r\n\t\tfor (let footerItem of footerItems)\r\n\t\t{\r\n\t\t\tvr.createButton({\r\n\t\t\t\ttext: footerItem.text,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\tcolorSettings: (footerItem.colorSettings != null) ? footerItem.colorSettings : { background: Rotator.color(), textColor: Rotator.textColor() },\r\n\t\t\t\tcss: \"box-shadow: 0 1px 3px \" + Rotator.color() + \";\",\r\n\t\t\t\tcssContainer: \"margin-right: 5px;\",\r\n\t\t\t\tclass: \"vrButtonChangePassword vrButtonPatient\",\r\n\t\t\t\tonClick: (e) => \r\n\t\t\t\t{\r\n\t\t\t\t\tif (footerItem.type == vr.WindowFooterItemTypeEnum.Close)\r\n\t\t\t\t\t\tpopup.close(true)\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (footerItem.onClick != null)\r\n\t\t\t\t\t\t\tfooterItem.onClick(e as any);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, divButtons)\r\n\t\t}\r\n\r\n\t\tpopup.open(true, false);\r\n\t}\r\n}\r\n\r\n//#region CheckLogin\r\nexport class CheckLoginRequest extends WebApiRequestBase \r\n{\r\n\tpublic method: string = \"/api/LoginWebApi/CheckLogin\";\r\n}\r\n\r\nexport class CheckLoginResponse extends WebApiResponseBase \r\n{\r\n\tpublic logged: boolean;\r\n}\r\n//#endregion\r\n\r\n//#region Logout\r\nclass LogoutRequest extends WebApiRequestBase \r\n{\r\n\tpublic method: string = \"/api/LoginWebApi/Logout\";\r\n}\r\n\r\nclass LogoutResponse extends WebApiResponseBase \r\n{\r\n}\r\n//#endregion\r\n\r\n//#region DownloadFile\r\nclass DownloadFileRequest extends WebApiRequestBase \r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/DownloadFile\";\r\n\tpublic fileId: number;\r\n}\r\n\r\nclass DownloadFileResponse extends WebApiResponseBase \r\n{\r\n\tpublic base64: string;\r\n\tpublic requiredHealthRecordPrivacy: boolean;\r\n}\r\n\r\nclass FileDataEvent\r\n{\r\n\tpublic base64: string;\r\n\tpublic requiredHealthRecordPrivacy: boolean;\r\n}\r\n//#endregion\r\n\r\n//#region DownloadDocument\r\nclass DownloadDocumentRequest extends WebApiRequestBase \r\n{\r\n\tpublic method: string = \"/api/PrivateAreaWebApi/DownloadDocument\";\r\n\tpublic documentId: number;\r\n}\r\n\r\nclass DownloadDocumentResponse extends WebApiResponseBase \r\n{\r\n\tpublic base64: string;\r\n}\r\n//#endregion\r\n\r\nexport enum FileTypeEnum\r\n{\r\n\tPdf = \"application/pdf\",\r\n\tTxt = \"text/plain\",\r\n\tImage = \"image/png\",\r\n\tZip = \"application/octet-stream\",\r\n\tGeneral = \"application/octet-stream\"\r\n}\r\n\r\n//#region GetTrackingCookies\r\nclass GetTrackingCookiesRequest extends WebApiRequestBase \r\n{\r\n\tpublic method: string = \"/api/UtilityWebApi/GetTrackingCookies\";\r\n}\r\n\r\nclass GetTrackingCookiesResponse extends WebApiResponseBase \r\n{\r\n\tpublic cookiesInfo: TrackingCookieInfo[];\r\n}\r\n\r\nexport class TrackingCookieInfo\r\n{\r\n\tpublic id: number;\r\n\tpublic serviceTypeId: ServiceTypeEnum;\r\n\tpublic serviceTypeName: string;\r\n\tpublic active: boolean;\r\n\tpublic code: string;\r\n}\r\n\r\nexport enum ServiceTypeEnum\r\n{\r\n\tGoogle = 1,\r\n\tFacebook = 2\r\n}\r\n//#endregion\r\n\r\n//#region GetTrackingCookiesEvent\r\nclass GetTrackingCookiesEventRequest extends WebApiRequestBase \r\n{\r\n\tpublic method: string = \"/api/UtilityWebApi/GetTrackingCookiesEvent\";\r\n\r\n\tpublic eventTypeId: EventTypeEnum;\r\n\tpublic activityTypeId?: number | null;\r\n}\r\n\r\nclass GetTrackingCookiesEventResponse extends WebApiResponseBase \r\n{\r\n\tpublic eventInfo: TrackingCookieMappingInfo[];\r\n}\r\n\r\nclass TrackingCookieMappingInfo\r\n{\r\n\tpublic id: number;\r\n\tpublic remoteEventName: string;\r\n\tpublic localEventTypeId: number;\r\n\tpublic localEventTypeName: string;\r\n\tpublic serviceId: number;\r\n\tpublic serviceName: string;\r\n\tpublic serviceTypeId: ServiceTypeEnum;\r\n\tpublic code: string;\r\n\tpublic activityTypeId: number;\r\n\tpublic activityTypeName: string;\r\n\tpublic active: boolean;\r\n\tpublic plantId: number;\r\n}\r\n\r\nexport enum EventTypeEnum\r\n{\r\n\tSearchAvailabilities = 1, // Search availabilities\r\n\tSelectAvailability = 2, // Selected availabilities\r\n\tBooked = 3, // Booked appointment\r\n\tRegistered = 4 // Registered patient\r\n}\r\n//#endregion\r\n\r\n//#region SendErrorEmail\r\nclass SendErrorEmailRequest extends WebApiRequestBase \r\n{\r\n\tpublic method: string = \"/api/UtilityWebApi/SendErrorEmail\";\r\n\r\n\tpublic optionalBody: string;\r\n\tpublic appointmentId?: number;\r\n}\r\n\r\nclass SendErrorEmailResponse extends WebApiResponseBase \r\n{\r\n\r\n}\r\n//#endregion\r\n\r\n//#region GetAppLogo\r\nclass GetAppLogoRequest extends WebApiRequestBase \r\n{\r\n\tpublic method: string = \"/api/UtilityWebApi/GetAppLogo\";\r\n\r\n\tplantId: number[];\r\n}\r\n\r\nclass GetAppLogoResponse extends WebApiResponseBase \r\n{\r\n\tbase64Logo: string;\r\n}\r\n//#endregion\r\n\r\n//#region GetResourceAvatar\r\nclass GetResourceAvatarRequest extends WebApiRequestBase \r\n{\r\n\tpublic method: string = \"/api/UtilityWebApi/GetResourceAvatar\";\r\n\r\n\tplantId: number[];\r\n\tresourceId: number;\r\n}\r\n\r\nclass GetResourceAvatarResponse extends WebApiResponseBase \r\n{\r\n\tbase64Avatar: string;\r\n}\r\n//#endregion\r\n\r\n//#region GetTrackingCookies\r\nclass GetMarketingUTMRequest extends WebApiRequestBase\r\n{\r\n\tpublic method: string = \"/api/UtilityWebApi/GetMarketingUTMData\";\r\n\tpublic plantId: number[];\r\n}\r\n\r\nclass GetMarketingUTMResponse extends WebApiResponseBase\r\n{\r\n\tpublic campaignSource: UTMItem[];\r\n\tpublic campaignMedium: UTMItem[];\r\n\tpublic channelTypes: CustomerContactBaseTypeEnum[]\r\n}\r\n\r\nclass UTMItem\r\n{\r\n\tpublic id: number;\r\n\tpublic code: string;\r\n\tpublic name: string;\r\n\tpublic plantId: number;\r\n}\r\n\r\nenum CustomerContactBaseTypeEnum\r\n{\r\n\tGeneric = 1,\r\n\tPhoneCall = 2,\r\n\tLetter = 3,\r\n\tEMail = 4,\r\n\tSMS = 5,\r\n\tWebSite = 6,\r\n\tFax = 7,\r\n\tMeeting = 8,\r\n\tPush = 9\r\n}\r\n//#endregion\r\n\r\nexport class Popup\r\n{\r\n\tprivate _element: HTMLElement;\r\n\tprivate _background: HTMLElement;\r\n\tprivate _btnClose: vr.Button;\r\n\tprivate _settings: PopupSettings;\r\n\r\n\tconstructor(container: HTMLElement, settings?: PopupSettings)\r\n\t{\r\n\t\t//#region Settings\r\n\t\tif (settings == null) settings = new PopupSettings();\r\n\t\tif (settings.modal == null) settings.modal = true;\r\n\t\tif (settings.fullScreen == null) settings.fullScreen = false;\r\n\t\tif (settings.height == null) settings.height = \"auto\";\r\n\t\tif (settings.width == null) settings.width = \"100%\";\r\n\t\tif (settings.closeable == null) settings.closeable = true;\r\n\t\tif (settings.footer == null) settings.footer = false;\r\n\t\tif (settings.padding == null) settings.padding = true;\r\n\t\tif (settings.removeOnClose == null) settings.removeOnClose = false;\r\n\t\tthis._settings = settings;\r\n\t\t//#endregion\r\n\r\n\t\tthis._element = vr.div(container, { class: \"vrPatientPopup\" });\r\n\r\n\t\tif (settings.fullScreen)\r\n\t\t{\r\n\t\t\tif (!settings.padding)\r\n\t\t\t\tthis._element.style.cssText += \"padding: 0px; top: 0px !important; height: Calc(100% - 5px) !important;\";\r\n\t\t\telse\r\n\t\t\t\tthis._element.style.cssText += \"padding: 10px; top: -10px !important; height: Calc(100% - 20px) !important;\";\r\n\t\t}\r\n\r\n\t\tif (!settings.padding)\r\n\t\t\tthis._element.style.cssText += \"padding: 0px;\";\r\n\t\telse\r\n\t\t\tthis._element.style.cssText += \"padding: 10px;\";\r\n\r\n\t\tif (settings.css != null)\r\n\t\t\tthis._element.style.cssText += settings.css;\r\n\r\n\t\tif (settings.content != null)\r\n\t\t\tpuma(this._element).html(settings.content);\r\n\r\n\t\tthis._background = vr.div(container, { class: \"vrPatientPopupBackground\" });\r\n\t\tpuma(this._background).click(() => \r\n\t\t{\r\n\t\t\tif (settings!.closeable)\r\n\t\t\t\tthis.close(settings!.removeOnClose);\r\n\t\t});\r\n\r\n\t\tthis._btnClose = vr.createButton({\r\n\t\t\ticon: vr.IconClassicLight.Close,\r\n\t\t\tcss: \"border-radius: 30px; height: 40px;\",\r\n\t\t\tcssContainer: \"position: absolute; top: 0px; right: 0px; margin-top: -40px; z-index: 1;\",\r\n\t\t\tonClick: (e) => this.close(settings!.removeOnClose)\r\n\t\t}, this._element);\r\n\r\n\t\tif (!settings.closeable)\r\n\t\t\tthis._btnClose.hide();\r\n\t}\r\n\r\n\topen(center = true, takeIntoScrolling = true)\r\n\t{\r\n\t\tlet settings = this.settings();\r\n\t\tlet top = (takeIntoScrolling) ? Rotator.container().scrollTop : 0;\r\n\t\tlet left = (takeIntoScrolling) ? Rotator.container().scrollLeft : 0;\r\n\t\tlet height = settings.height;\r\n\t\tlet width = settings.width;\r\n\r\n\t\tpuma(this._element).show();\r\n\r\n\t\tif (typeof (height) == \"number\")\r\n\t\t\theight = height + \"px\";\r\n\r\n\t\tif (typeof (width) == \"number\")\r\n\t\t\twidth = width + \"px\";\r\n\r\n\t\tif (settings.fullScreen)\r\n\t\t{\r\n\t\t\ttop = 0;\r\n\t\t\tleft = 0;\r\n\t\t\theight = \"100%\";\r\n\t\t\twidth = \"100%\";\r\n\t\t}\r\n\r\n\t\tif (height != null)\r\n\t\t\tthis._element.style.cssText += \"height: \" + height + \";\";\r\n\r\n\t\tif (width != null)\r\n\t\t\tthis._element.style.cssText += \"width: \" + width + \";\";\r\n\r\n\t\tif (center)\r\n\t\t{\r\n\t\t\ttop = top + ((Rotator.container().clientHeight - this._element.clientHeight) / 2);\r\n\t\t\tleft = left + ((Rotator.container().clientWidth - this._element.clientWidth) / 2);\r\n\t\t}\r\n\r\n\t\tlet maxZindexPopup = Array.from(puma(this._element)).map(k => Number(puma(k).css(\"z-index\"))).max();\r\n\t\tif (isNaN(maxZindexPopup))\r\n\t\t\tmaxZindexPopup = 0;\r\n\r\n\t\tmaxZindexPopup = 9997;\r\n\t\tpuma(this._element).css(\"z-index\", (maxZindexPopup + 2));\r\n\t\tif (settings.modal)\r\n\t\t{\r\n\t\t\tpuma(this._background).show();\r\n\t\t\tpuma(this._background).css(\"z-index\", (maxZindexPopup + 1));\r\n\t\t}\r\n\r\n\t\tthis._element.style.cssText += \"top: \" + top + \"px; left: \" + left + \"px;\";\r\n\t\tthis._background.style.cssText += \"top: \" + ((takeIntoScrolling) ? Rotator.container().scrollTop : 0) + \"px;\";\r\n\t}\r\n\r\n\tclose(remove = false)\r\n\t{\r\n\t\tif (remove)\r\n\t\t{\r\n\t\t\tpuma(this._element).remove();\r\n\t\t\tpuma(this._background).remove();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tpuma(this._element).hide();\r\n\t\t\tpuma(this._background).hide();\r\n\t\t}\r\n\t}\r\n\r\n\telement()\r\n\t{\r\n\t\treturn this._element;\r\n\t}\r\n\r\n\tbackground()\r\n\t{\r\n\t\treturn this._background;\r\n\t}\r\n\r\n\tsettings()\r\n\t{\r\n\t\treturn this._settings;\r\n\t}\r\n}\r\n\r\nclass PopupSettings\r\n{\r\n\tfullScreen?: boolean;\r\n\tmodal?: boolean;\r\n\theight?: number | string;\r\n\tcloseable?: boolean;\r\n\twidth?: string | number;\r\n\tfooter?: boolean;\r\n\tpadding?: boolean;\r\n\tcss?: string;\r\n\tcontent?: string;\r\n\tremoveOnClose?: boolean;\r\n}\r\n\r\nexport class TrackingCookiesEventParameters\r\n{\r\n\tamount?: number;\r\n}\r\n\r\nexport enum PriceTypeEnum\r\n{\r\n\tAppointment,\r\n\tActivityType\r\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(927);\n"],"names":["root","factory","exports","module","define","amd","this","static","initialize","parameters","_parameters","_container","puma","appendTo","Rotator","container","title","createControls","Booking","createStep","StepEnum","Activity","back","selectionListControl","SelectionListControl","selectionFocusMode","rebind","authKey","method","itemsPropertyName","rebindAtStartup","configuration","plant","id","webComponentParameters","specificActivityTypeGroupId","specificActivityTypeGroupIdList","specificActivityTypeId","specificActivityTypeIdList","bookingParameters","resource","workplace","sailor","callback","length","items","first","click","activityType","select","onSelect","e","activityTypeResponse","dataItem","onlineBookingModeEnum","OnlineBookingModeEnum","ShowAlways","ShowOnlyIfAvailable","DoctorList","getResources","undefined","onlineBookingDoNotChooseDoctor","doctorSlotVisible","footerItems","appNoAvailabilitiesPhoneNumber","callPhoneItem","text","colorSettings","background","color","textColor","onClick","link","document","createElement","href","push","appNoAvailabilitiesMail","mailItem","closeItem","type","vr","WindowFooterItemTypeEnum","Close","Support","dialog","appNoOnlineBookingMessage","preventDefault","onClear","find","html","appShowWorkplaces","WorkplaceList","getWorkplaces","workplacesList","getActivityTypeGroups","async","request","GetActivityTypeGroupsRequest","plantIdList","resourceIdList","workplaceIdList","activityTypeGroupId","activityTypeGroupIdList","activityTypeId","activityTypeIdList","isSailor","call","success","response","activityTypeGroupList","mode","vrshared","WebApiModeEnum","Async","Sync","loader","WebApiRequestBase","onlyBookableOnline","WebApiResponseBase","filesLoaded","vrSessionId","appBookingAppointments","appLoginRequired","AppLoginModeEnum","Always","initializeInternal","checkLogin","page","PageEnum","Login","AppointmentList","confirmationParameters","inBookingFlow","specificDoctorIdList","specificDoctorId","assignSpecificParameters","filter","k","appUseGeolocationInsteadOfWorkplaceOrder","getLocation","Workplace","hide","Menu","hideItem","css","empty","hideDoctorStep","resourceList","Doctor","From","createButton","cssContainer","width","class","appNoBookingMinor","Profile","getSubject","patientAge","VrManager","notify","NotifierTypeEnum","Error","isDefaultPrevented","fullscreen","isMobile","UtilityManager","enterFullScreen","from","Date","appRequiredWorkplaceChoice","show","WorkplaceTimeslots","ResourceTimeslots","error","stepEnum","highlighted","spanIconExpandCallback","visible","divStep","div","backgroundColor","style","cssText","question","choice","icon","IconClassicLight","Bell","FileLines","onlineBookingName","Map","name","workplaceList","UserDoctor","Clock","toItalyLongString","spanIcon","span","fontSize","spanDescription","createLabel","ActivityList","specificWorkplaceId","FromList","spanError","TriangleExclamation","spanIconExpand","AngleDown","on","stepDoctor","stepMode","Default","activityTypeGroup","activityTypeTemp","children","activityTypes","pushRange","map","includes","resourcesList","price","timeslot","latitude","longitude","bookingForInfo","Confirmation1","drawSummary","createDivAddPerson","_btnAddPerson","Add","visibleDivAddPerson","createLegend","_divOtherPeople","_divAddPerson","_txtName","createTextBox","label","placeholder","TextModeEnum","Text","labelSettings","focus","_txtSurname","_dtpBirthdate","createDatePicker","_btgGender","createButtonGroup","value","GenderEnum","Male","Female","NotSpecified","selected","selectionMode","SelectionModeEnum","Single","_cmbRelationType","createDropDown","GetSubjectInterpersonalRelationTypesRequest","interpersonalRelationTypeList","Delete","addInterpersonal","isEmpty","getSelectedValues","interpersonalItem","InterpersonalItem","surname","birthdate","convertDateFromClient","genderEnum","Number","subjectRelationTypeId","AddInterpersonalRequest","interpersonal","state","clearControls","clear","getInterpersonal","_interpersonalPeople","people","drawInterpersonal","person","drawInterpersonalDetail","divNoRecords","align","TextAlignEnum","Center","divPerson","divIconInfo","avatarBase64","createImage","base64","height","iconByGender","UserHairLong","UserHair","divInfo","subjectRelationTypeReverseName","displayName","noBr","toItalyShortString","BookingForInfo","subjectId","GetInterpersonalRequest","constructor","GetSubjectInterpersonalRelationTypesResponse","doctorMode","pageHistory","pop","Confirmation2","divControls","position","PositionEnum","Top","appSpidEnabled","IconSharpSolid","User","iconSettings","manageSpidButton","doNotRequireLogin","Never","_txtPhoneNumber","Numeric","Left","_txtEmail","Mail","Register","getMandatoryFields","_fields","fields","fieldType","OnlineBookingMandatoryFieldTypeEnum","EMail","isVisible","divPrivacy","_chkPrivacy","createCheckBox","privacyLabelText","appPrivacyLabelText","textToHighlight","substring","lastIndexOf","replace","wndPrivacy","open","top","scrollTop","createWindow","maximized","content","privacyText","clientHeight","draggable","modal","hideCloseIcon","footer","Ok","close","checked","shadowRoot","appendToPuma","privacyCommercial","appHidePrivacyCommercial","privacyCommercialLabelText","appPrivacyCommercialLabelText","_chkPrivacyCommercial","paymentMode","OnlineBookingPaymentModeEnum","Required","preregister","RegisterRequest","phone","String","mail","privacy","createUserAccount","throwException","registerResult","RegisterResult","PatientCreated","PatientFound","customerId","manageRegisterResult","ExceptionMessage","appHideRegistrationIntoConfirmationPage","SailorRegister","appPreregisterSubject","RegisterParameters","preregisterId","customerName","customerSurname","customerMail","customerPhone","checkRequiredFields","checkNameIfNoLogin","preregisterSettings","PreregisterSettings","phoneNumber","emailAddress","privacyForMedicalBooking","privacyForCommercialUse","ErrorHideModeEnum","hideError","fieldEmail","isMandatory","email","isValidEmail","divSummary","shortVersion","divResourceInfo","hasAvatar","imageBase64","avatar","qualification","rating","values","createRating","max","total","sum","enable","divActivityType","displayPrice","PriceTypeEnum","ActivityType","divWorkplace","MapPin","address","getAddressName","divDate","Calendar","fromHours","hourFromDisplay","hours","padStart","fromMinutes","minutes","date","day","isNotNullOrEmpty","appMessagePaymentRequired","Color","red500","onlineBookingLoadingFileModeId","OnlineBookingLoadingFileMode","RequireLoading","FileLoading","preparationInfo","divPreparationInfo","stopBooking","divNoBookingMinor","goToMainPage","divNotes","_txtNotes","appPlaceholderPatientNotes","MultiLine","rows","patientId","appAllowBookingFor","divBookingFor","_btnChangeBookingFor","BookingFor","_divPayBook","_btnPay","PaymentDataParameters","priceId","itemName","callbackAfterPayment","PaymentData","createInvoice","appointmentId","paymentResultParameters","PaymentResultParameters","documentId","invoiceId","cashAdvanceInfo","documentName","pdfDocumentName","documentBase64","pdfDocument","PaymentResult","_btnBook","createAppointment","_appointmentId","manageAppointmentCreation","None","Optional","paypalClientId","appPaypalClientIdSandbox","appPaypalClientId","paypalClientSecret","appPaypalClientSecretSandbox","appPaypalClientSecret","YesLoading","filesLoadedNumber","createSeparator","orientation","OrientationEnum","Horizontal","_divConfirmations","btnViewAppointment","AppointmentDetailParameter","showMenuBurger","AppointmentDetail","btnBookAnother","showInvoice","disable","_divInvoice","window","scrollTo","body","scrollHeight","burgerButton","backButton","errorCallback","CreateAppointmentRequest","resourceId","resourceInstrumentId","resourceSpaceId","workplaceId","note","setHours","webApiFrom","toWebApiDateTime","marketingUTMData","MarketingUTMData","campaignSourceId","campaignMediumId","campaignName","createFollowUp","filesToBase64","then","base64List","i","file","fileLoaded","FileLoaded","fileName","mimeType","createAppointmentWebApi","manageTrackingCookiesEvent","EventTypeEnum","Booked","amount","print","DownloadBookingConfirmationReportRequest","downloadFile","pdfDataBase64","FileTypeEnum","Pdf","GetResourcesRequest","loaderDelay","includeActivitiesInResponse","divFiles","onlineBookingLoadingFileMessage","upload","createUpload","uploadButton","fileList","progressBar","multiple","autoUpload","dropArea","addFiles","files","getFiles","Warning","sender","divCalendar","createCalendar","selectedColor","availableFrom","onAfterChange","setTimeout","createMap","MapModeEnum","Streets","openUrl","leafletImage","err","canvas","_base64Map","toDataURL","divSlot","cashAdvancePrice","_indexForLoader","drawResourcesSlot","resources","LoaderManager","divWorkplaces","getNextAvailability","divSlots","nextAvailabilitiesByWorkplace","drawWorkplaceTimeslots","availabilityWorkplace","attr","oldSelected","currentTarget","parent","colorOpacity","removeClass","addClass","e2","nextAvailabilities","city","e3","f","SearchAvailabilities","timeslots","defaultTimeslot","divNoTimeslots","noAvailabilityMessage","appNoAvailabilitiesMessage","divNoAvailabilityButtons","useWaitingListIfNoAvailabilities","waitingListParameters","WaitingListParameters","WaitingList","activityTypeName","divFirstAvailability","divTimeslots","isEqualsTo","createButtonTimeslot","isSlot","btnClass","ChevronRight","Right","tag","resourceParameter","resourceSubjectId","TimeslotListParameters","SelectAvailability","TimeslotList","GetNextAvailabilityRequest","searchFrom","workplaces","_options","_items","_txtSearchFilter","_value","options","getAllItems","item","child","drawDataSource","searchedText","getOptions","remove","timeout","Search","onKeyUp","clearTimeout","element","getFilteredArrayByInputText","drawItems","elementToAppend","ul","getOnlyChildrenItems","li","isChildren","closest","rowText","template","comboItem","comboItemText","siblings","split","iconClear","toLowerCase","filteredArray","forEach","index","indexOf","parentItem","getAllChildrenItems","getDataChildrenItems","dataItems","dataElement","dateChildrenItem","texts","Array","rebindRequest","startsWith","jsonParameters","Object","getOwnPropertyNames","param","triggerChange","selectEvent","OnSelectEvent","clearValue","liList","clearEvent","OnClearEvent","_defaultPrevented","_divWorkplace","_popupAddress","is","hidePopupAddress","showPopupAddress","chooseAddress","createPopupAddress","divTimeslotsContainer","divBack","_btnBack","ChevronLeft","_startDate","addDays","isLessThan","_initialDate","getTimeslots","_divTimeslots","divNext","ChevronDown","_popupAddressBackground","iconSelected","Star","GetTimeslotsRequest","to","addSeconds","requestMultiplantList","requestMultiPlant","AvailabilityRequestMultiplant","getNext","drawTimeslots","availabilityList","allTimeslots","timeslotList","usableTimeslots","dayTimeslots","startDateTimeslots","equals","set","secondDate","secondDateTimeslots","thirdDate","thirdDateTimeslots","maxLength","key","divTimeslot","getDayWeekName","getDate","getMonthName","divNoAvailabilities","lblText","nextTimeslots","divDeadline","_dtpDeadline","addMonths","AddToWaitingListRequest","_subjectId","customerEmail","customerPhoneNumber","deadline","divMessageConfirmation","appConfirmationMessageAddedToWaitingList","contacts","emailContactInfo","conactType","ContactTypeEnum","PrivateEmail","contactId","mobilePhoneContactInfo","PrivateMobile","hasPrivacy","GetWorkplacesRequest","drawWorkplacesSlots","appName","base64Logo","getAppLogo","ImagePositionTypeEnum","appEmail","appPhoneNumber","website","appWebsite","divContactsContainer","bold","LabelModeEnum","linkCss","Phone","Link","divWorkplacesContainer","offsetTop","street","textWorkplace","zip","province","geoCoordinate","_passwordRules","AuthenticationManager","getPasswordRules","passwordExpiredGuid","_txtPassword","onEnterKey","_btnChangePassword","Password","result","checkPasswordStrength","IsValid","ErrorMessage","ErrorModeEnum","Solid","ErrorPositionEnum","Bottom","_txtPasswordConfirm","hasError","isPasswordStrong","ChangePasswordRequest","passwordExpireGuid","password","_txtUsername","_btnSendPassword","textRecoverPassword","appHasEmailNotificationsPlannedForLoginCredentials","recoverPassword","loginParameters","LoginParameters","fromRegister","username","Promise","ForgotPasswordRequest","_pwdErrorsCount","ForgotPassword","_btnLogin","autocomplete","TextBoxAutoCompleteEnum","Username","CurrentPassword","_txtVerificationCode","attributes","_abortController","abort","validationCode","notifyWarning","login","successCallback","appHideFiscalCodeImpersonification","size","_txtFiscalCodeAlreadyPatient","inputMode","TextTransformModeEnum","Uppercase","btnImpersonificate","impersonificate","appHideRegistrationIntoLogin","returnUrl","encodeURIComponent","location","deviceType","spidUrl","data","SpidCookieData","CookieManager","setCookieMinutes","DeviceTypeEnum","Ios","screen","availWidth","availHeight","outerHeight","screenY","left","outerWidth","screenX","addEventListener","event","fiscalCode","checkSpidLogin","spidLoginData","CheckSpidLoginRequest","userLogged","manageState","customerFiscalCode","fromSpid","txt","innerHTML","mobilePhone","spidMobilePhone","spidMail","gender","customerGender","customerBirthdate","fiscalCodeAlreadyPatient","notLoggedCallback","encrypted","doubleFactorCode","DoLoginRequest","trim","credentialsEncrypted","deviceId","token","operatingSystemName","DeviceManager","isIphone","loginStatus","LoginStatusEnum","loginResult","LoginResult","Success","setCookie","encryptedUsername","encryptedPassword","WrongUsernameAndPassword","UsernameExistButWrongPassword","PasswordExpired","ChangePasswordParameters","ChangePassword","RequireDoubleFactorAuthentication","AbortController","navigator","credentials","get","otp","transport","signal","code","message","showError","_btnRegister","_txtMobilePhone","_txtMail","_txtLandline","manageFields","Landline","Gender","divBirthInfo","BirthDate","divBirthCity","BirthLocation","_swtItalianForeignBirthCity","createSwitch","labelOff","labelOn","onChange","divItalyBirthCity","divForeignBirthCity","_cmbBirthCity","createComboBox","webService","patientUrl","typedTextPropertyName","onlyActive","_cmbForeignBirthCityCountry","_txtForeignBirthCity","divFiscalCode","_txtFiscalCode","FiscalCode","btnVerifyFiscalCode","Check","tooltip","checkFiscalCode","isValid","btnCalcFiscalCode","birthAddressInfo","getSelectedItem","BirthAddressInfo","countryCode","istatCode","computeFiscalCode","invalidFieldsMessage","divResidence","ResidenceAddress","_swtItalianForeignResidenceAddress","divItalyResidence","divOutItalyResidence","_txtItalyResidenceAddress","_cmbItalyResidenceCity","calcProvinceAndZipByCity","_txtItalyResidenceProvince","_cmbItalyResidenceZip","clearItems","provinceAbbreviation","zipCodes","zipCode","_txtOutItalyResidenceAddress","_cmbOutItalyResidenceCountry","register","getAllCountries","countries","GetAllCountriesRequest","getAllCategories","GetAllCategoriesRequest","fieldTypeEnum","control","field","cityIstatCode","GetCityInfoByIstatCodeRequest","cityOrCountryIstatCode","checkMandatoryFields","webApiBirthDate","landline","foreignAddress","ForeignAddress","italianAddress","ItalianAddress","Registered","exceptionMessage","UsernameAlreadyExist","UserExistSamePhoneNumber","UserExistDifferentPhoneNumber","UserExistNoPhoneNumber","PatientNotFound","OtherError","txtFiscalCode","dtpBirthdate","swtItalianForeignBirthCity","cmbBirthCity","cmbForeignBirthCityCountry","txtForeignBirthCity","btgGender","swtItalianForeignResidenceAddress","txtItalyResidenceAddress","cmbItalyResidenceCity","txtItalyResidenceProvince","cmbItalyResidenceZip","txtOutItalyResidenceAddress","cmbOutItalyResidenceCountry","txtLandline","fieldFiscalCode","fieldLandline","fieldBirthdate","fieldBirthCity","errorBirthCity","fieldGender","fieldAddress","errorResidence","settings","PreregisterRequest","GetMandatoryFieldsRequest","birthDate","italianAddressDomicile","foreignAddressDomicile","identityCard","passport","categoryId","sailorType","sailorSasnMode","sailorSasnSerialNumber","sailorSasnCompanyName","sailorUsmafCompanyName","sailorUsmafPortAuthorityContactName","sailorUsmafPortAuthorityContactPhoneNumber","sailorUsmafPortAuthorityContactEmail","sailorUsmafShipOwnerContactName","sailorUsmafShipOwnerContactPhoneNumber","sailorUsmafShipOwnerContactEmail","number","emissionDate","RegisterResponse","PreregisterResponse","GetMandatoryFieldsResponse","fieldName","AuthKey","VettorePatient","HTMLElement","_webComponentConfigs","_btnOpenPopup","super","attachShadow","attributeChangedCallback","oldValue","newValue","JSON","parse","observedAttributes","connectedCallback","createComponent","sessionId","getUrlParameter","getCookie","deleteCookie","setCookieYears","sameSite","CookieSameSiteEnum","Lax","secured","customElements","whenDefined","prePath","version","getTime","jqueryVariable","when","getScript","done","createTextNode","appendChild","append","protocol","GetConfigurationRequest","configurations","checkConnection","keyMessageCheck","onload","tokenFromUrl","appColor","appHeaderColor","appMobileHeaderColor","appMobileHeaderTextColor","appHeaderTextColor","addCss","appFileCssBase64TextContent","createStructure","getTrackingCookies","getUTM","buttonSettings","iconCss","isModal","mainButton","divBackground","divContainer","divContainerHeight","innerHeight","source","WebComponentSourceModeEnum","CrmLink","heightParameter","widthParameter","cssDivContainer","right","bottom","brutalStopScroll","header","createHeader","vrDrag","createContainer","BookingParameters","appointmentIdFromUrl","SailorHome","SpidLoginData","WebComponentModeEnum","OnlyPrivateArea","btnBurger","Burger","divTitleLogo","isApp","appCustomHomeAppMobile","closeButton","exitFullScreen","originalEvent","wheelDelta","detail","plantId","url","clientId","clientSecret","appointment","getAppointments","appointments","highlightItem","drawAppointmentDetail","createFilesSection","createButtons","_appointment","divAppointment","divHeader","statusBackgroundColor","statusColor","statusEnum","ActivityStatusEnum","Aborted","Quote","Contract","Terminated","Circle","status","time","toTimeString","appShowAppointmentDuration","activityTypeItem","doctor","Appointment","ownerId","divBookedFor","userIcon","patientGenderEnum","patientName","GetConfirmationToggleButtonVisibilityRequest","showConfirm","confirmationMessage","customerConfirmationToggleAppointment","AppointmentConfirmationStatusEnum","ConfirmedByCustomer","showAbort","appCancelAppointment","confirm","RejectedByCustomer","billingStatus","billableOnline","downloadDocument","toBill","DocumentList","report","reports","storedFileId","appCanSubjectUploadFilesIntoAppointment","divFilesSection","fileListMaxHeight","AddFileToAppointmentRequest","CustomerConfirmationToggleAppointmentRequest","customerConfirmationStatusEnum","printReport","base64Map","PrintAppointmentRequest","base64Data","_appointments","appShowAppointmentAborted","createFilter","_divAppointments","drawAppointments","divFilter","_swtFilter","filterAppointmentOnPast","sortDesc","sortAsc","parameter","GetAppointmentsRequest","doctorId","doctorName","workplaceName","confirmed","minutesDuration","discountRate","activityNote","getDocuments","_documents","documents","_divDocuments","drawDocuments","drawDocumentDetail","divDocument","paymentDate","expirationDate","FilePdf","appShowPlantInFiles","plantCompanyName","divButtons","downloadButton","showButton","getDocumentData","pdfViewer","createPdfViewer","popup","maximize","hasPaypal","expirationDateRows","fromDocumentPage","grossPrice","setDocumentPayment","GetDocumentsRequest","appUploadFiles","validation","appUploadFilesExtensions","extensions","checkMimeType","webApiSettings","setCookieSession","onSuccess","_files","drawFiles","_divFiles","FileList","drawFileDetail","divFile","iconInfo","getFileInfo","uploadDate","uploadedByIcon","Upload","Download","formatStorageSize","representerOfName","getFileData","previewFile","GetFilesRequest","FileImage","FileWord","FileExcel","FileZipper","FileVideo","subjectName","_lblBookingFor","onBlur","_btnConfirmData","checkAndManageData","fieldFiscalCodeForIndex","fieldResidenceAddressForIndex","updateSubject","txtName","txtSurname","txtEmail","txtPhoneNumber","_getSubjectResponse","createPaypalButton","_needsToAddStampRow","needsToAddStampRow","_divAppointmentCreated","appMessagePrePayment","appPaypalSandboxMode","divSandboxAlert","_btnPaypalButton","onBeforePayment","createOrderRequest","environment","PaypalEnvironmentEnum","Sandbox","Production","payerInfo","billingInfo","approveRequest","paymentDataEvent","PaymentDataEvent","sendErrorEmail","_subjectDisplayName","CreateInvoiceRequest","stackTrace","SetDocumentPaymentRequest","selectIndex","appCanPatientEditProfileData","Logout","logout","fillControls","controls","year","month","seconds","milliSeconds","landlineContactInfo","HomePhone","GetSubjectRequest","check","UpdateSubjectRequest","ContactInfo","ComputeFiscalCodeRequest","countryId","CheckFiscalCodeRequest","GetSubjectResponse","getReports","_reports","_divReports","drawReports","ReportList","drawReportDetail","divReport","titleCase","GetPacsInfoRequest","reportSendingId","hasLicense","deliveryStatus","manageDownloadReport","openCredentialsPopup","privacyHealthInfo","privacyHealthInfoText","_wndPrivacy","storageList","openViewer","ReportSendingStorageListParameters","storageFileList","daysExpirationDelay","ReportSendingStorageList","downloadReport","requiredHealthRecordPrivacy","setPrivacyEHealthRecord","SetPrivacyEHealthRecordRequest","privacyValue","GetReportsRequest","_popup","Popup","saveCredentialsPopup","_txtPin","_txtOtp","notifyError","ReportSendingLoginRequest","pin","requireOTP","_divStorageFiles","drawStorageFiles","drawReport","GetPacsOrdersRequest","pacsType","PacsType","O3_Web","Webinar","Remoteye","webLink","hasDoctolibAccount","excludeSendDocumentDoctolib","reportDeliveryDaysExpirationDelay","hasDoctolibSendDocumentParameter","SendReportToDoctolibRequest","storageFile","drawDetail","divDetail","fileInfo","downloadReportSendingStorage","DownloadReportSendingStorageRequest","reportSendingStorageId","$","Crm","Vettore","Test","cookieSessionTimeout","_cookieSessionTimeout","createGuid","vettoreVersion","slice","AllModules","_token","_backgroundColor","_color","_appHeaderColor","_appHeaderTextColor","button","_mainButton","sourceId","_campaignSourceId","mediumId","_campaignMediumId","_campaignName","getControl","headerTitleLogo","_sailorType","_shadowRoot","_configuration","demoUrl","_webComponentParameters","appMobile","isTablet","_bookingParameters","_confirmationParameters","_inBookingFlow","_filterAppointmentOnPast","eval","jQuery","trackingCookiesInfo","_trackingCookiesInfo","_pageHistory","last","setHeader","pageTitle","Info","InfoPage","NoInternetConnection","Dashboard","history","pushState","goToFirstPage","firstPage","lastPage","clearPageHistory","appShowDashboard","OnlineBookingPriceZeroEnum","SailorTypeEnum","Configuration","appTextColorWhite","appDashboardShowLogo","appDashboardBackgroundColor","appDashboardBackgroundImage","appNameSociety","appDaysBeforeCancelAppointment","appHoursBeforeTakeAppointment","appShowFiles","appShowReports","appUploadReports","appShowDocuments","appCreateNewPatient","appWebRtcRecordSessionAudio","appWebRtcMessageRecordSessionAudio","appOnlyActivitiesOnline","appShowAppointmentPrice","appAppointmentPriceZeroManagement","appShowActivityTypePrice","appActivityTypePriceZeroManagement","appUTMCampaignName","appUTMCampaignMedium","appUTMCampaignSource","appFileCssBase64","appUseDoubleFactorAuthentication","appHideInfoSection","PlantInfo","phoneNumbers","emails","WorkplacesInfo","GeoCoordinate","Justify","goNext","Sasn","Usmaf","divDocumentIdentityCard","_txtIdentityCard","_dtpIdentityCardEmissionDate","divDocumentPassport","_txtPassport","_dtpPassportEmissionDate","divDomicile","_chkDomicile","onCheck","divDomicileInternal","_swtItalianForeignDomicileAddress","divItalyDomicile","divOutItalyDomicile","_txtItalyDomicileAddress","_cmbItalyDomicileCity","_txtItalyDomicileProvince","_cmbItalyDomicileZip","_txtOutItalyDomicileAddress","_cmbOutItalyDomicileCountry","divSailor","_swtSailorMode","_txtSerialNumber","minLength","_txtCompanyName","_cmbCategories","ComboBoxTypeEnum","DropDown","nullable","groupBoxPortAuthorityContacts","createGroupBox","_txtPortAuthorityContactName","_txtPortAuthorityContactPhoneNumber","_txtPortAuthorityContactEmail","groupBoxShipOwnerContacts","_txtShipOwnerContactName","_txtShipOwnerContactPhoneNumber","_txtShipOwnerContactEmail","registerSailor","categories","IdentityDocumentInfo","SailorSasnModeEnum","AirShipper","Marine","IsStrongRequest","GetRulesRequest","rules","generatePassword","GeneratePasswordRequest","passwordRules","checkPasswordStrengthResponse","CheckPasswordStrengthResponse","errorMessage","minimumLength","numberCount","specialCount","lowerCaseCount","upperCaseCount","c","isNumber","isLetter","toUpperCase","minimumLowercaseChars","minimumUppercaseChars","minimumDigits","minimumSymbols","activityTypesInThisGroup","isOnlineBooking","tagObject","isTechnician","StorageFileTypeBaseEnum","AddressTypeEnum","workplacesInThisActivity","onlineBookingShowOnlyFromDirectLink","hourToDisplay","ticks","days","milliseconds","totalDays","totalHours","totalMilliseconds","totalMinutes","totalSeconds","storageRecordId","netPrice","uploadedByPatient","fileType","displaySize","istat","fisco","active","replacedByIstatCode","replacedByName","population","surface","aslSpecificCode","zIPCode","subjectRelationTypeName","divTiles","GetTilesRequest","tile","tiles","divTile","typeEnum","TileTypeEnum","openLinkPopup","Navigation","Email","aTag","Call","PopupText","closeable","SpecificDoctor","removeSpaces","toNumberArrayList","SpecificActivityType","SpecificActivityTypeGroup","SpecificWorkplace","_divMenuContainer","_divMenu","profileState","OnlyBooking","MenuStateEnum","Hide","ShowIfLogged","createMenuItem","bookingState","titleBooking","iconBooking","House","appointmentsState","CalendarCheck","documentState","reportsState","Book","filesState","CircleInfo","loginState","ShowIfNotLogged","draw","stateEnum","menuItem","MenuItem","_menuItemList","_background","colorSeparator","divCredits","divMenuItem","clickEvent","ClickMenuEvent","logged","checkInternetConnection","fixNotifyPosition","WebApiRequest","WebApiSettings","sessionExpired","warningMessage","statusCode","LogoutRequest","WebApiResponse","loggedCallback","afterLoginCallback","CheckLoginRequest","geolocation","getCurrentPosition","coords","PERMISSION_DENIED","console","log","POSITION_UNAVAILABLE","TIMEOUT","getFileBase64","fileId","DownloadFileRequest","General","DownloadDocumentRequest","cssNode","colored","spaceBefore","toCurrencyString","Decimal","Free","fullScreen","doc","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","msFullscreenElement","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","webkitEnterFullscreen","onloadedmetadata","calendar","datePicker","short","getDay","getMonth","onLine","GetTrackingCookiesRequest","cookiesInfo","cookieInfo","campaignSourceProperty","campaignMediumProperty","campaignNameProperty","GetMarketingUTMRequest","campaignSource","existingCampaignSource","removeWebComponent","campaignMedium","existingCampaignMedium","GetAppLogoRequest","getResourceAvatar","GetResourceAvatarRequest","base64Avatar","eventTypeEnum","GetTrackingCookiesEventRequest","eventTypeId","eventInfo","serviceTypeId","ServiceTypeEnum","Facebook","json","content_ids","eventref","remoteEventName","currency","num_items","fbq","Google","gtag","SendErrorEmailRequest","optionalBody","padding","iframe","iframeBody","iframeContentDocument","contentDocument","prompt","cancelCallback","txtValue","removeOnClose","footerItem","CheckLoginResponse","CustomerContactBaseTypeEnum","serviceTypeName","_element","_btnClose","_settings","PopupSettings","center","takeIntoScrolling","scrollLeft","clientWidth","maxZindexPopup","isNaN","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","__webpack_exports__"],"sourceRoot":""}