diff --git a/builds/installer.nsh b/builds/installer.nsh index 10fd392a..96fc9857 100644 --- a/builds/installer.nsh +++ b/builds/installer.nsh @@ -63,6 +63,7 @@ Var POSNIC_KEEP_HARDWARE Var POSNIC_KEEP_BACKUPS Var POSNIC_BUSINESS_CHECK Var POSNIC_HARDWARE_CHECK +Var POSNIC_REMOVE_ALL_CHECK Var POSNIC_BACKUPS_CHECK Var POSNIC_REMOVAL_SUMMARY Var POSNIC_POWERSHELL @@ -253,24 +254,62 @@ Function un.PosnicDataPage !insertmacro MUI_HEADER_TEXT "Remove Posnic?" "The application will be removed. Choose what to keep." nsDialogs::Create 1018 Pop $0 - ${NSD_CreateCheckbox} 0 12u 100% 20u "Keep business data" + ${NSD_CreateCheckbox} 0 0u 100% 18u "Remove all local data" + Pop $POSNIC_REMOVE_ALL_CHECK + ${NSD_OnClick} $POSNIC_REMOVE_ALL_CHECK un.PosnicRemoveAllClick + ${NSD_CreateCheckbox} 0 24u 100% 18u "Keep business data" Pop $POSNIC_BUSINESS_CHECK ${NSD_SetState} $POSNIC_BUSINESS_CHECK $POSNIC_KEEP_BUSINESS - ${NSD_CreateLabel} 14u 34u 95% 22u "Sales, stock, customers and pending changes." + ${NSD_OnClick} $POSNIC_BUSINESS_CHECK un.PosnicKeepClick + ${NSD_CreateLabel} 14u 42u 95% 14u "Sales, stock, customers and pending changes." Pop $0 - ${NSD_CreateCheckbox} 0 62u 100% 20u "Keep hardware settings" + ${NSD_CreateCheckbox} 0 58u 100% 18u "Keep hardware settings" Pop $POSNIC_HARDWARE_CHECK ${NSD_SetState} $POSNIC_HARDWARE_CHECK $POSNIC_KEEP_HARDWARE - ${NSD_CreateLabel} 14u 84u 95% 22u "Scales, printers and kitchen screens." + ${NSD_OnClick} $POSNIC_HARDWARE_CHECK un.PosnicKeepClick + ${NSD_CreateLabel} 14u 76u 95% 14u "Scales, printers and kitchen screens." Pop $0 - ${NSD_CreateCheckbox} 0 112u 100% 20u "Keep saved backups" + ${NSD_CreateCheckbox} 0 94u 100% 18u "Keep saved backups" Pop $POSNIC_BACKUPS_CHECK ${NSD_SetState} $POSNIC_BACKUPS_CHECK $POSNIC_KEEP_BACKUPS - ${NSD_CreateLabel} 0 145u 100% 36u "Cloud data will not be deleted. Unchecked data is permanently removed from this computer. No extra backup is created." + ${NSD_OnClick} $POSNIC_BACKUPS_CHECK un.PosnicKeepClick + ${NSD_CreateLabel} 0 116u 100% 22u "Cloud data stays unchanged. Unchecked local data is permanently deleted. No extra backup is created." Pop $0 + Call un.PosnicSyncRemoveAll nsDialogs::Show FunctionEnd +Function un.PosnicRemoveAllClick + Pop $0 + ${NSD_GetState} $POSNIC_REMOVE_ALL_CHECK $1 + ${If} $1 == ${BST_CHECKED} + StrCpy $1 ${BST_UNCHECKED} + ${Else} + StrCpy $1 ${BST_CHECKED} + ${EndIf} + ${NSD_SetState} $POSNIC_BUSINESS_CHECK $1 + ${NSD_SetState} $POSNIC_HARDWARE_CHECK $1 + ${NSD_SetState} $POSNIC_BACKUPS_CHECK $1 +FunctionEnd + +Function un.PosnicKeepClick + Pop $0 + Call un.PosnicSyncRemoveAll +FunctionEnd + +Function un.PosnicSyncRemoveAll + ${NSD_GetState} $POSNIC_BUSINESS_CHECK $1 + ${NSD_GetState} $POSNIC_HARDWARE_CHECK $2 + ${NSD_GetState} $POSNIC_BACKUPS_CHECK $3 + ${If} $1 == ${BST_UNCHECKED} + ${AndIf} $2 == ${BST_UNCHECKED} + ${AndIf} $3 == ${BST_UNCHECKED} + ${NSD_SetState} $POSNIC_REMOVE_ALL_CHECK ${BST_CHECKED} + ${Else} + ${NSD_SetState} $POSNIC_REMOVE_ALL_CHECK ${BST_UNCHECKED} + ${EndIf} +FunctionEnd + Function un.PosnicDataLeave ${NSD_GetState} $POSNIC_BUSINESS_CHECK $POSNIC_KEEP_BUSINESS ${NSD_GetState} $POSNIC_HARDWARE_CHECK $POSNIC_KEEP_HARDWARE diff --git a/package.json b/package.json index f8cab410..7595a6e1 100644 --- a/package.json +++ b/package.json @@ -243,6 +243,8 @@ "src/fonts/NotoSansTC-OFL.txt", "src/simple-setup.css", "src/simple-setup.js", + "src/setup-region.js", + "src/setup-region-data.js", "src/setup-recovery.js", "src/setup-hardware-files.json" ], diff --git a/scripts/generate-setup-regions.js b/scripts/generate-setup-regions.js new file mode 100644 index 00000000..a4d66897 --- /dev/null +++ b/scripts/generate-setup-regions.js @@ -0,0 +1,9 @@ +const fs=require('node:fs'),path=require('node:path'),vm=require('node:vm'); +const root=path.resolve(__dirname,'..'); +const read=name=>JSON.parse(fs.readFileSync(path.join(root,'api/src/json',name+'.json'),'utf8')); +const currency=read('country_currency'); +const source=fs.readFileSync(path.join(root,'src/install-wizard.html'),'utf8'); +const match=source.match(/const countryTimezones = (\{[\s\S]*?\n \});/); +if(!match)throw Error('Setup timezone reference not found'); +const data={countries:read('countries').countries.map(c=>[c.id,c.sortname,c.value,currency[c.sortname]||'']),states:read('states').states.map(s=>[s.country_id,s.name]),currencies:[...new Set(read('currency').currency.map(c=>c.text).filter(Boolean))],timezones:vm.runInNewContext('('+match[1]+')')}; +fs.writeFileSync(path.join(root,'src/setup-region-data.js'),'// Generated by scripts/generate-setup-regions.js from bundled reference data.\nwindow.PosnicSetupRegionData = '+JSON.stringify(data)+';\n'); diff --git a/src/install-wizard.html b/src/install-wizard.html index bfa989b2..8db21a30 100644 --- a/src/install-wizard.html +++ b/src/install-wizard.html @@ -731,13 +731,14 @@
Posnic +

Point of Sale that never goes down

- +

Setting up your account...

@@ -749,10 +750,10 @@
- +

๐ŸŽ‰ Installation Complete!

Your Posnic account has been created successfully

- +
@@ -797,25 +798,60 @@

๐ŸŽ‰ Installation Complete!

-
-

Letโ€™s set up your shop

-

Choose how you want to get started.

-
- - -
- - -
- -