From 186e03254fecc30e949ea0a32fbb07532e01fee3 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Wed, 30 Mar 2022 19:27:04 +0000 Subject: [PATCH] --- devdocs/deploy.txt | 3 + devdocs/todo.txt | 71 +++++++++++++++--- docs/8.0/ayanova/docs/adm-import-customer.md | 3 +- docs/8.0/ayanova/docs/adm-import.md | 16 ++++ .../docs/img/adm-import-json-correctcomma.png | Bin 0 -> 26896 bytes .../img/adm-import-json-incorrectcomma.png | Bin 0 -> 26631 bytes .../ayanova/docs/ops-install-linux-desktop.md | 45 ++++++++--- .../ayanova/docs/ops-install-linux-server.md | 4 +- .../ayanova/docs/ops-upgrade-linux-desktop.md | 38 ++++++++++ .../ayanova/docs/ops-upgrade-linux-server.md | 9 +++ docs/8.0/ayanova/docs/ops-upgrade-windows.md | 13 ++++ docs/8.0/ayanova/docs/ops-upgrade.md | 9 +++ docs/8.0/ayanova/mkdocs.yml | 2 + server/AyaNova/util/AySchema.cs | 4 +- 14 files changed, 190 insertions(+), 27 deletions(-) create mode 100644 docs/8.0/ayanova/docs/img/adm-import-json-correctcomma.png create mode 100644 docs/8.0/ayanova/docs/img/adm-import-json-incorrectcomma.png create mode 100644 docs/8.0/ayanova/docs/ops-upgrade-linux-desktop.md create mode 100644 docs/8.0/ayanova/docs/ops-upgrade-linux-server.md create mode 100644 docs/8.0/ayanova/docs/ops-upgrade-windows.md create mode 100644 docs/8.0/ayanova/docs/ops-upgrade.md diff --git a/devdocs/deploy.txt b/devdocs/deploy.txt index da9bb01f..aaacb103 100644 --- a/devdocs/deploy.txt +++ b/devdocs/deploy.txt @@ -27,6 +27,9 @@ Make sure main.js in client devmode is set to false (should just keep it that wa ### run build-release.bat check for errors +## UPLOAD TEST to ayanova.com/download/next folder where it will be staged before officially being released and moved to parent download folder + + ### Test install to devops server ### Test install to windows server diff --git a/devdocs/todo.txt b/devdocs/todo.txt index 5b73fa0a..8b9a5d69 100644 --- a/devdocs/todo.txt +++ b/devdocs/todo.txt @@ -5,19 +5,57 @@ Import / export features TODO: OUTSTANDING FOR IMPORT: - + + DOCS regarding missing boolean value in csv and info on not leaving empty POST IMPORT TASKS - Test build installers, will they overwrite properly adn schema update properly?? + Test installer / upgrade + Linux server + - Ok, but needs upgrade shell script published somewhere + Linux Desktop standalone + TODO TEST DOCUMENT + Windows single standalone (should settle on naming scheme) + - OK, just stop the launcher if running, run setup, say no to overwrite config.json if edited, start the launcher + Windows lan + windows iis once working and confirmed post update and upate the beta forum with NEW RELEASE does forum working need to be changed to not only issues but new updates there as well? "Known issues / updates" - give to joyce for internal testing before posting as beta (1 day at max) - Need to test an update install without db erase so probably need to fire up IIS and win standalone if Joyce can't test - I'll test linux installers + + + Windows single would benefit from a backup and restore in a click kind of interface then could do the standalone install upgrade more easily? TEST FILE OPEN ON iPad device as the file input accept type may not work with apple +WINDOWS SINGLE LAUNCHER ISSUES: + Can windows single put it's db outside of the program files folder, i.e. can postgres be told to use a data folder instead? + only if it helps with the upgrade though, otherwise not much point + + Opens the windows server web page as well as the AyaNova web app but that's confusing as the first page is the windows server + instead should just show the web app + + Shutdown server in windows single gives error in server launcher window: + Shutting down Postgres database server... + Unhandled exception. System.InvalidOperationException: StandardIn has not been redirected. + at System.Diagnostics.Process.get_StandardInput() + at Program.
$(String[] args) in C:\data\code\raven-launcher\Program.cs:line 98 + + Launcher might be better if it was an actual application with a button to open AyaNova UI in browser and a shutdown button and a log windows showing what is in the server UI + rather than a dos command line looking thing + Also that could be the UI to do a db back up and restore maybe for upgrade?? + +Linux desktop installer issues + There are two installers just becuase of config.json data path, consolidate? + rename to linux-x64 drop -server and -desktop? + why do I need *any* root rights, shouldn't it all just work or is it becuase of postgre? + why do I need to chmod desktop for ./AyaNova when it works on server without doing that? + Upgrade seems to be remove everything EXCEPT config.json from /usr/sbin/ayanova since there is no data there anyway + then unzip the new version and restart + Is /usr/sbin really the correct folder for the binaries? + INSTALL DOCS ISSUE + Says stopping and starting in one section but only talks about stopping + can there be a desktop icon to start the server like windows single? + get back to docs completion @@ -62,6 +100,10 @@ critical path items: +#1 Task oriented simple view / dashboard type idea + something to get people going without having to flail around + identify common tasks and find ways to accomplish it as simply as possible + maybe dashboard has overlay floating menu for quick actions? @@ -828,12 +870,19 @@ client: Total : 295 files, 112234 codes, 6586 comments, 5547 blanks, all 124367 ####################################################################################################################################### -https://www.ayanova.com/download/v8-migrate.exe -https://www.ayanova.com/download/ayanova-windows-x64-single-setup.exe -https://www.ayanova.com/download/ayanova-linux-x64-desktop.zip -https://www.ayanova.com/download/ayanova-linux-x64-server.zip -https://www.ayanova.com/download/ayanova-windows-x64-lan-setup.exe -Current v8 docs home: https://www.ayanova.com/docs/ +These link to the "next" version of docs and installers, they will replace the current docs / installers once we decide it's ready +https://www.ayanova.com/download/next/v8-migrate.exe +https://www.ayanova.com/download/next/ayanova-windows-x64-single-setup.exe +https://www.ayanova.com/download/next/ayanova-linux-x64-desktop.zip +https://www.ayanova.com/download/next/ayanova-linux-x64-server.zip +https://www.ayanova.com/download/next/ayanova-windows-x64-lan-setup.exe +Current v8 docs home: https://www.ayanova.com/docs/next BUILD 8.0.0-beta.3 CHANGES OF NOTE +- No need to erase db will update schema automatically and add new translations +- Windows single install upgrade not supported / tested, will likely need changes to keep the db but update the code, I'm working on it now +- Import utility implemented properly administration->Import + documented fully + + diff --git a/docs/8.0/ayanova/docs/adm-import-customer.md b/docs/8.0/ayanova/docs/adm-import-customer.md index d19722b0..ba1d1285 100644 --- a/docs/8.0/ayanova/docs/adm-import-customer.md +++ b/docs/8.0/ayanova/docs/adm-import-customer.md @@ -104,6 +104,7 @@ The .json file must contain an **array** of one or more objects. ], "WebAddress": "https://example.org", "AlertNotes": null, + "BillHeadOffice": false, "TechNotes": null, "AccountNumber": "27263133", "Phone1": "534.467.2146", @@ -165,6 +166,6 @@ The first row of the .csv file must contain column headers that match the field ``` Name,Active,Notes,Wiki,Tags,WebAddress,AlertNotes,BillHeadOffice,HeadOfficeViz,TechNotes,AccountNumber,ContractViz,ContractExpires,Phone1,Phone2,Phone3,Phone4,Phone5,EmailAddress,PostAddress,PostCity,PostRegion,PostCountry,PostCode,Address,City,Region,Country,Latitude,Longitude Armstrong LLC,true,Ergonomic empowering project,,"black,purple,quince,zone1,zone4",https://example.biz,,true,XYZ HeadOffice,,88129181,Gold Contract,2022-12-30T00:00:00Z,(948) 817-1939,768-686-6990,(343) 810-7973,,,Talia.Terry53@example.net,7942 Herman Dale,Mabelville,Michigan,Denmark,53147,7937 Dale Estates,Mabelville,Michigan,Denmark,46.8059,-64.1016 -Adams Inc,true,Stand-alone clear-thinking contingency,,zone3,https://example.org,,,,,27263133,,,534.467.2146,(897) 987-0916 x510,(389) 833-8807,,,Ramona_Gulgowski@example.com,398 Mary Ridge,East Colbyberg,Rhode Island,Sierra Leone,41587,720 Jennie Green,East Colbyberg,Rhode Island,Sierra Leone,23.6209,-0.3821 +Adams Inc,true,Stand-alone clear-thinking contingency,,zone3,https://example.org,,false,,,27263133,,,534.467.2146,(897) 987-0916 x510,(389) 833-8807,,,Ramona_Gulgowski@example.com,398 Mary Ridge,East Colbyberg,Rhode Island,Sierra Leone,41587,720 Jennie Green,East Colbyberg,Rhode Island,Sierra Leone,23.6209,-0.3821 Bartell Inc,true,Devolved asynchronous info-mediaries,,zone7,http://example.org,,false,,,28202278,,,670.690.0352 x841,1-687-856-1614,1-665-462-1998 x08190,,,Autumn99@example.org,5112 Stanley Heights,North Hazelport,Alabama,Turkey,53994,5111 Wilkinson Bypass,North Hazelport,Alabama,Turkey,47.3514,161.4385 ``` diff --git a/docs/8.0/ayanova/docs/adm-import.md b/docs/8.0/ayanova/docs/adm-import.md index d389e3d5..2d1c8e04 100644 --- a/docs/8.0/ayanova/docs/adm-import.md +++ b/docs/8.0/ayanova/docs/adm-import.md @@ -146,6 +146,22 @@ To ensure the integrity of the data, import will _not_ be attempted if ther are CSV parsing errors come from a 3rd party utility and will be displayed in the English language only. +#### JSON Parsing errors + +If there is an issue with parsing the JSON file you may receive a Syntax error with further description: + +##### "Expected double quoted property name" syntax error + +This error is due to a trailing comma in the JSON structure, either in an individual record after the last field in that record or in the entire array of objects after the last object: + +Correct comma format: + +![correct comma placement image](img/adm-import-json-correctcomma.png) + +Invalid comma format: + +![not correct comma placement image](img/adm-import-json-incorrectcomma.png) + ### Maximum file size The actual limit on how many records can be imported / updated at once depends on many different things from individual browser limits, memory available, intermediate networking device and server configuration etc making it impossible to specify a limit. diff --git a/docs/8.0/ayanova/docs/img/adm-import-json-correctcomma.png b/docs/8.0/ayanova/docs/img/adm-import-json-correctcomma.png new file mode 100644 index 0000000000000000000000000000000000000000..588909d3b612d9699edaf1819c165381cdee4ecf GIT binary patch literal 26896 zcma&N1yEc;w>5fTu;38fC4}JaE&+lBcXxLuxVr@nZo%DxdkF5q-Q8X0O}=|?-KtlA zz4ueV>Di~}O!w;DtM^{r6QS@`5(SX}5dZ*`FH+)4000dsLb)RRyI>Fxh(a#!9Hcaz z0RXlC-yc*m9V#Kj2=DSm?lb%zhy;M)Ztihi{Ez9ghKq=+i-o-tP+B!A1u-GJKuqGM z&c;rb4lb7VcEJ000k8z;TcE z4sz$+zdOqIW-jiAPNsma1NdKcr2jnJ(%IO?5K`3%Xzp%^gP0Ninbi%Q>@4lffo{UR zFo+HQzuxcaWNZrDf`g9#r<$0(t*xn@3vf4@(gm@>{i~*8>0)CFl$=dd0{|KDMO;M1 zBlD!g&w+40`TWuLwMN8|6{;~`+^((~0e=TsikH%FPJavBXD<7o^*ItD1d@eU4mQQ8 z`I8|8F5vwE&|ySu6#tKxLS+Bt(GOE`Fz9$wY)=UQ7#p02HNBIuy10HM2`y#WaN|}- zK%-}LNoz`S!pUaV3|*YwwMf*Vn{N_Qm6WN*$@h6Z#KMNGkLe$|ORe8gICGqkj<`+Jtgx-`n?SS7T^UW7==DLYn%B_T|y7Ks?!`;Pa|> z07l0<#!i&3GcMD1Undr~Te-)V2%**O*iJ@c{3lLA{0?2jV@JdcB29PWBcJRmPvW+D zi+xp>+kx}++m0$?;(6c9HyL-dF6PEqL=$xI=C3EBpH4sgJ;dJTFM8LptWOZTeLxdJ-v3srclE2Fy4rsG27}q{ zc5}&o_&mg-Qs^i{`q;mYVjTz{>j6=E!LAnkVt@T(KTYVGf&U$(%*2kf5L;VrPdoC% z>@agTwQVeV&F1eQ7>DnRpXeMkQ_@{Tb}+0|ESSb8V~v26Lewow>3P}K?1qwZkDgTM z*yKAbO)-;aQ6UvI8ouI(Y)Y@Woklvr5uA4u;YT_*0y$ti*^Y^^!+URx)$)}%wtWGz zk6nd7T|q)#4ye+QSbxZXU-zc#(O0%(W3#DQ3ost5qFALKLR!vj z6@A33WKcoOx1z>pvCbKUSptE6!KAp}&0~2qq`VN!WwZyn5ybin2c64Si%n-1j^ELE~%xMURGN z$Pn5Px=j=Ma~#8N_QW?X&Yvs$ZinCW)+}4Yw$-cpbM>>okrgpJibu#%pL@Zq zIR}!uZLgc^eZ17Sc)8C|me=g}kdf3K2DZwYZuzf=5rZBcVWB}3`M{s(M?_WjJGXT?3& zbC1(~HHOF=#76m>?ngZ!U|r|<57F=XIqTWW|8#L*vNs^T>z!udJ*R%JyZaV>ojm77 zhIKe0P35iR%hTsKx@3kHWL))=vgBF2P~jsFExoy^l)w!fu9v zi5Z-z?Z25|eue3KaBuIYdZzdLeir;2m&9%8 z-8Sy!zaCOmLEXHAE84M?@SM`}%We-m}+i-Jb86_X56z&YXNz@ zoP&S~{gns5oV*8BI$?vMd+*pbMG*)HgRew>1;PjxuNgSLl$1i9ACZlqkHOa1H??ms zjiZg0MMK&7G%*XVG(CU?_{5MK>lo`aM<6p={6!<-6VwW&<0{Tfa;QYC@hB9n2

)LM~c;*IO+mVW+ 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 z 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

tYhu_>;X6NCU< z2E@MVKm>-lGq5t82y$qKbyGL{H$4~)mmaTQAB$MU8J&RJdUn|ItrkG;N6 z{f6)`LFFp+a8Sdu$cuoFDu3AEw)Osv{7lMK+8&EFcv`GZXGdC0#-G0;8h2PZ0#@$E zYcJ&TZxu~NdKCuQ(GB^?{mXvT7(sp!#!_rgAfiYuo@PlrJ;^eO9M`6meba4J zQXiwm&(%d9m>3F+mUcvik+rKAPh43E#FAR>u>nul<^t^8^X|yJnY}g<5w7-)+71lw z5+xgT6>52rof-DfY3iFl8rAt9)a+0<6h)1Xw|TfhEFl%$QM}ZZHW7aIwbcus%3Et9Z2$~ zg-y@RJK6H1PQ5Cn>@04TVrl6vv+#dkbo86%{h6v*u_U#F^&!-C)#8ZweU7qrD6vT ziWZ}mgvDw%Kd;iU1b31T(k?fX>DS}|uL4>wRxl3r?^e1ncFX)Zs{C_f1--^OEy}+J zYZ9_wNyS!KG@CdQWQL@#;7-p3`eT_(sGB(Y441E6b#Hi)y1@ur&|Cd*07E*pfV(9U zjH228f(}Bb)&a!Xn=B`9bQZmXsy#A@wyGm%%NDpyBlN)7oS^TO9cvP`%;V%AfkOWY zNnl*U0)Ez*ds36WP1ozkaDmH1N&+u_T~Y^EhDg75In;Pf!7Es)H=KL}alGeeEP(6| z0&^#~U!FI86D!n<ipWY=oIdZ67MdACMU{51aj5F~1R z#9H^1eh^92{ycQYE(_gu z~CpPFByssF6ApnSZEPjpj6zRDk;MFwzfrP|m)5(uVe%z);x9RNHFtD+O zhH3)M_X7e6+SDYb4l(&d;=d15e}iZO<|s>5cVN1ZNQ*T>ep$BIB6VoXb76R1H!Kij z3*mYUEHvYSNR~Cf1fYn9kxaNN%2ljg-8?8@F8}PX#{(b9gtqI!K;jHNTO<&VQH?zH zr?>*GAq0j6o~1*qgnzF#MWLtl5H9pVAp zSD&G+kH7=pzN!Zp5{lNm*xu)P4WE6`!#O5rrK8)a*El_HZC1RB Z=bQ5@bFN+4Ebu@;UPe*6>^Us(e*kAiJ8A#` literal 0 HcmV?d00001 diff --git a/docs/8.0/ayanova/docs/img/adm-import-json-incorrectcomma.png b/docs/8.0/ayanova/docs/img/adm-import-json-incorrectcomma.png new file mode 100644 index 0000000000000000000000000000000000000000..8a313ab034e0eec9e171ecde67c92be8d6888de4 GIT binary patch literal 26631 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

0tFS0 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 Server State and the menu item Shut down server. Alternatively you can hard shut down AyaNova using the ctrl-c key combination in the terminal console window where AyaNova is running however this is not recommended. +To start the server from a terminal follow the [boot](#boot-and-test-ayanova-server) instructions above. + +To start the server from + ## Report rendering first time delay The very first time a report is rendered in AyaNova there will be a delay while the Chromium browser report rendering components are installed. diff --git a/docs/8.0/ayanova/docs/ops-install-linux-server.md b/docs/8.0/ayanova/docs/ops-install-linux-server.md index 9582cc66..5412ee68 100644 --- a/docs/8.0/ayanova/docs/ops-install-linux-server.md +++ b/docs/8.0/ayanova/docs/ops-install-linux-server.md @@ -71,8 +71,8 @@ dotnet --list-runtimes The AspNetCore runtime should be displayed with version 6 or newer: ``` -Microsoft.AspNetCore.App 6.0.2 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App] -Microsoft.NETCore.App 6.0.2 [/usr/share/dotnet/shared/Microsoft.NETCore.App] +Microsoft.AspNetCore.App 6.0.3 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App] +Microsoft.NETCore.App 6.0.3 [/usr/share/dotnet/shared/Microsoft.NETCore.App] ``` If you do not see this go through the installation steps above again. diff --git a/docs/8.0/ayanova/docs/ops-upgrade-linux-desktop.md b/docs/8.0/ayanova/docs/ops-upgrade-linux-desktop.md new file mode 100644 index 00000000..798c1663 --- /dev/null +++ b/docs/8.0/ayanova/docs/ops-upgrade-linux-desktop.md @@ -0,0 +1,38 @@ +# AyaNova linux desktop platform upgrade + +The linux desktop upgrade process involves replacing the AyaNova program files with the latest version and restarting the AyaNova server. + +### 1\. Backup + +Before proceeding, [make a backup](ops-form-backup.md) of the database **and** the attachment files and store it in a safe place. + +If you do not have a fresh backup there will be no way to recover from potential data loss or damage. + +### 2\. Stop the AyaNova server + +To shut down the AyaNova server cleanly use the AyaNova web app form accessed from Server Operations -> Server State and the menu item [Shut down server](ops-server-state.md#shutting-down-the-ayanova-server). + +Alternatively you can hard shut down AyaNova using the ctrl-c key combination in the terminal console window where AyaNova is running however this is not recommended. + +### 3\. Upgrade + +The following shell script will automatically remove the old AyaNova files, download and unzip the latest AyaNova files then start the server. + +From a terminal window run the following commands: + +```bash +cd /opt/ayanova && \ +sudo curl -O https://www.ayanova.com/download/ayanova-linux-x64-desktop.zip && \ +sudo rm *.dll && \ +sudo rm -r ./resource && \ +sudo rm -r ./wwwroot && \ +sudo unzip -o ayanova-linux-x64-desktop.zip -x "config.json" && \ +sudo chmod 777 ./AyaNova && \ +sudo ./AyaNova +``` + +If there is an issue or error break apart the commands and execute each one individually to find the error. + +AyaNova should restart on it's own and perform any database schema updates if required automatically. + +Open the login form in your browser and after a short delay you should see the new version number at the bottom of the login form. diff --git a/docs/8.0/ayanova/docs/ops-upgrade-linux-server.md b/docs/8.0/ayanova/docs/ops-upgrade-linux-server.md new file mode 100644 index 00000000..55c97da4 --- /dev/null +++ b/docs/8.0/ayanova/docs/ops-upgrade-linux-server.md @@ -0,0 +1,9 @@ +# AyaNova linux platform upgrade + +The linux upgrade process involves replacing the AyaNova program files with the latest version and restarting the AyaNova server. + +The following commands should be run from the shell in the AyaNova server folder. + +```bash +sudo curl -O https://www.ayanova.com/download/ayanova-linux-x64-server.zip +``` \ No newline at end of file diff --git a/docs/8.0/ayanova/docs/ops-upgrade-windows.md b/docs/8.0/ayanova/docs/ops-upgrade-windows.md new file mode 100644 index 00000000..edf84ef6 --- /dev/null +++ b/docs/8.0/ayanova/docs/ops-upgrade-windows.md @@ -0,0 +1,13 @@ +# AyaNova Windows platform upgrade + +Follow the upgrade instructions for your installation type below. + +## Single user upgrade + +### Local area network upgrade + +AyaNova server running alone and access directly by users within a local office network. + +### AyaNova server hosted through IIS upgrade + +AyaNova hosted via Microsoft Internet Information Server that is included with most editions of Windows. diff --git a/docs/8.0/ayanova/docs/ops-upgrade.md b/docs/8.0/ayanova/docs/ops-upgrade.md new file mode 100644 index 00000000..9d9b0ad7 --- /dev/null +++ b/docs/8.0/ayanova/docs/ops-upgrade.md @@ -0,0 +1,9 @@ +# AyaNova upgrade + +Choose your operating system for specific instructions: + +- [Windows 64bit](ops-upgrade-windows.md) +- [Linux server 64bit](ops-upgrade-linux-server.md) +- [Linux desktop 64bit](ops-upgrade-linux-desktop.md) + + diff --git a/docs/8.0/ayanova/mkdocs.yml b/docs/8.0/ayanova/mkdocs.yml index b6e5b798..ff352ef0 100644 --- a/docs/8.0/ayanova/mkdocs.yml +++ b/docs/8.0/ayanova/mkdocs.yml @@ -131,6 +131,8 @@ nav: - 'Linux': 'ops-install-linux.md' - 'Linux desktop': 'ops-install-linux-desktop.md' - 'Linux server': 'ops-install-linux-server.md' + - Upgrade: + - 'Start': 'ops-upgrade.md' - Migration: - 'Migrating from AyaNova 7': 'ops-import-v7.md' - Backup & Restore: diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index 7680e004..09f75011 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -1330,9 +1330,9 @@ $BODY$ LANGUAGE PLPGSQL STABLE"); where t.baselanguage = 'en' */ - //MAKE SURE THE DESIRED SCHEMA WAS SET PROPERLY + //Handle newer schema than expected (user ran a new version then downgraded ayanova) if (currentSchema > DESIRED_SCHEMA_LEVEL) - throw new ArgumentOutOfRangeException("AySchema::DesiredSchemaLevel WASN'T SET PROPERLY"); + throw new ArgumentOutOfRangeException($"DB Schema error: the database has a newer schema version {currentSchema} than this version of AyaNova expects {DESIRED_SCHEMA_LEVEL}\nThis version of AyaNova is older than a previous version that was used with this database and is not compatible with the new database format.\nUpgrade AyaNova or restore a backup of the database from before the newer version of AyaNova was used.");