diff --git a/devdocs/todo.txt b/devdocs/todo.txt index 680bcec2..2f6eec9a 100644 --- a/devdocs/todo.txt +++ b/devdocs/todo.txt @@ -1,21 +1,13 @@ # now -todo: spin up another 3 test servers on test.ayanova.com, besides a261 which is for joyce and test which is for me, can beef up that server if necessary but need something to send people to when they need to do a quick test -and there is other fuckery, do this today priority then send to rich as an option if haven't heard back from him yet. + - new website flesh out the framework and post as an alternate v8index.htm intrey portal so can fully make it without affecting v7 get the live test server stuff worked out too in advance sb triggered from a route to make things simple and so client / website doesn't need to do too much -TODO: DOCS - evaluate page should link to install page in manual so I'm certain I have one single thing to link people to that they can then use to get up and evaluating fully -TODO: DOCS _ Rich thought that the eval started by entring info into the screenshot of the evaluation page in the manual, it does seem to be worded to confuse as it says "enter it here" - Change to make it clear it's a screenshot of the actual page in the software ionce installed and sb a clear list of what to do in what order - -todo: any reason why got double license request earlier today from atlas guy?? - it was rockfish that sent it maybe try another and confirm address like he did etc - Yeah, it didn't do that thing so maybe he's somehow double requested and it changed the db id or something unusual I need to determine - maybe when I hear back he'll have some insight in to what happened. + todo: did a test generate an eval license but did not fetch it manually to see if it would get it, it didn't after almost 24 hours even though it was unlicensed so should be on the fast cycle something is amiss there check the code try it out here in debug and see what the fuck is happening. diff --git a/docs/8.0/ayanova/docs/adm-getting-started.md b/docs/8.0/ayanova/docs/adm-getting-started.md index 049b9a21..ac577458 100644 --- a/docs/8.0/ayanova/docs/adm-getting-started.md +++ b/docs/8.0/ayanova/docs/adm-getting-started.md @@ -4,7 +4,7 @@ The following are common steps for the AyaNova business Administrator to get Aya We also have a [technical guide](ops-intro.md) to server operations and maintenance with important guidance for the server operations manager to ensure the AyaNova server runs smoothly and data is safe and protected. -Not all steps are necessary if they don't apply to your business and most of the items below can be modifed later as your needs change. +Not all steps are necessary, some may not apply to your business. Most of the items below can be modifed later as your needs change. Here we will provide links to the help pages for each item rather than repeating the information in each step of this document. diff --git a/docs/8.0/ayanova/docs/adm-global-autocomplete-templates.md b/docs/8.0/ayanova/docs/adm-global-autocomplete-templates.md index 929916b7..bef09334 100644 --- a/docs/8.0/ayanova/docs/adm-global-autocomplete-templates.md +++ b/docs/8.0/ayanova/docs/adm-global-autocomplete-templates.md @@ -1,5 +1,7 @@ # Autocomplete list templates +![form](img/adm-global-autocomplete-templates.png) + This form is used to set which fields of an AyaNova object are displayed and [searchable](ay-start-form-autocomplete.md#searching) in [autocomplete lists](ay-start-form-autocomplete.md) on [forms](ay-start-form-overview.md). In most cases when users of AyaNova need to select from a list of AyaNova objects on a form they will be looking at the "Name" field however in many cases there are other fields that are equally important. For example when looking for a particular [part](inv-parts.md) to select on a [work order](svc-workorders.md) it may be helpful to be able to find the part by not only the part name but also by the part manufacturer or supplier number or other fields. @@ -8,15 +10,15 @@ AyaNova lets you choose the fields that are most appropriate for _your_ business ## Authorization Roles required -Many roles can *select* this object on other records where approriate. Editing or viewing this object in detail is only available to Users with the following [roles](ay-biz-admin-roles.md): +Many roles can _select_ this object on other records where approriate. Editing or viewing this object in detail is only available to Users with the following [roles](ay-biz-admin-roles.md): Full access -- Business administration +- Business administration Read only access -- Business administration - restricted +- Business administration - restricted ## How to access autocomplete list templates diff --git a/docs/8.0/ayanova/docs/adm-history.md b/docs/8.0/ayanova/docs/adm-history.md index 95eb2b84..42ded532 100644 --- a/docs/8.0/ayanova/docs/adm-history.md +++ b/docs/8.0/ayanova/docs/adm-history.md @@ -1,18 +1,22 @@ # Global history +![table](img/adm-history.png) + The global history form is an event log that shows important events that took place in AyaNova including User activity. While not a formal audit log, it does provide detailed information to help track down and resolve any unusual issues that might arise related to usage of AyaNova. +From this form you can also open the object(s) in question. + ## Authorization Roles required -Many roles can *select* this object on other records where approriate. Editing or viewing this object in detail is only available to Users with the following [roles](ay-biz-admin-roles.md): +Many roles can _select_ this object on other records where approriate. Editing or viewing this object in detail is only available to Users with the following [roles](ay-biz-admin-roles.md): Full access -- Business administration +- Business administration Read only access -- Business administration - restricted +- Business administration - restricted ## How to access global history @@ -28,20 +32,28 @@ Most events are related to changes to **"business objects"** in AyaNova, that is ### data that is tracked -AyaNova tracks the timestamp of the event, the type of event, the type of business object and it's id if the event is related to a particular business object and the User who triggered the event. This makes it possible to +AyaNova tracks the timestamp of the event, the type of event, the type of business object and it's id if the event is related to a particular business object and the User who triggered the event. ### events that are tracked -- `Business object created`: user created and saved a new business object -- `Business object updated`: user modified and saved an existing business object -- `Business object retrieved`: user has opened the edit form for a business object -- `Business object deleted`: user has created a new business object -- `Attachment created`: user has [attached](ay-start-form-attachments.md) a file to a business object -- `Attachment retrieved`: user has downloaded a file [attached](ay-start-form-attachments.md) to a business object -- `Attachment modified`: user has modified the descriptive notes or name of a file [attached](ay-start-form-attachments.md) to a business object -- `Attachment deleted`: user has removed an [attached](ay-start-form-attachments.md) file from a business object -- `License updated`: AyaNova has installed a new replacement license key -- `Server state change`: AyaNova server has been put into an [alternative state](ops-server-state.md) -- `Seed database`: user has requested that the AyaNova database be overwritten with sample data for [evaluation](ay-evaluate.md) -- `Erase all data`: user has requested that the AyaNova database be erased and all data removed -- `Backup downloaded`: user has downloaded a copy of the [AyaNova backup](ops-form-backup.md) files +- `Business object created`: user created and saved a new business object +- `Business object updated`: user modified and saved an existing business object +- `Business object retrieved`: user has opened the edit form for a business object +- `Business object deleted`: user has [deleted](#what-happens-when-i-delete-an-object) an existing business object +- `Attachment created`: user has [attached](ay-start-form-attachments.md) a file to a business object +- `Attachment retrieved`: user has downloaded a file [attached](ay-start-form-attachments.md) to a business object +- `Attachment modified`: user has modified the descriptive notes or name of a file [attached](ay-start-form-attachments.md) to a business object +- `Attachment deleted`: user has removed an [attached](ay-start-form-attachments.md) file from a business object +- `License updated`: AyaNova has installed a new replacement license key +- `Server state change`: AyaNova server has been put into an [alternative state](ops-server-state.md) +- `Seed database`: user has requested that the AyaNova database be overwritten with sample data for [evaluation](ay-evaluate.md) +- `Erase all data`: user has requested that the AyaNova database be erased and all data removed +- `Backup downloaded`: user has downloaded a copy of the [AyaNova backup](ops-form-backup.md) files + +### What happens when I delete an object? + +When an object is deleted, AyaNova will automatically remove all previous events for that object in the event log and insert one single final `Business object deleted` entry for that object indicating the User who deleted it and the date of deletion. + +### how long is data retained? + +Currently AyaNova keeps the global event log perpetually, it never gets pruned or deleted. A planned upcoming feature will allow for pruning the history log by date range on demand. diff --git a/docs/8.0/ayanova/docs/adm-import.md b/docs/8.0/ayanova/docs/adm-import.md index c25f91e1..627818a1 100644 --- a/docs/8.0/ayanova/docs/adm-import.md +++ b/docs/8.0/ayanova/docs/adm-import.md @@ -1,20 +1,24 @@ # Import +![import form](img/adm-import.png) + +![import form ready](img/adm-import-ready.png) + The Import form is used to import new records _or_ update existing records in AyaNova from a local import file. More advanced import or synchronization requirements are supported through the [AyaNova developers API](api-intro.md). ## Authorization Roles required -Many roles can *select* this object on other records where approriate. Editing or viewing this object in detail is only available to Users with the following [roles](ay-biz-admin-roles.md): +Many roles can _select_ this object on other records where approriate. Editing or viewing this object in detail is only available to Users with the following [roles](ay-biz-admin-roles.md): Full access -- Business administration +- Business administration Read only access -- Business administration - restricted +- Business administration - restricted ## How to access Import @@ -38,9 +42,9 @@ If no errors are found then the record is saved into the database and a success If errors are found during validation no save is made and the error message is added to the results list displayed in the Import form once import has completed. -When import has completed the *import* result list will show any errors or imported records and "Process completed". +When import has completed the _import_ result list will show any errors or imported records and "Process completed". -Records not imported due to already being present will not show in the *import* result list. +Records not imported due to already being present will not show in the _import_ result list. ### Import items are automatically tagged @@ -74,9 +78,9 @@ The key (usually `Name`) field can not be updated as it's used to match records. Unlike the import process, updated records are _not_ automatically tagged (the only way to undo an update is to [restore from backup](ops-restore.md)) however you can still see which records were updated if necessary by viewing the [User history](ay-history.md) of the User who ran the update. -When update has completed the *update* result list will show any errors or updated records and "Process completed". +When update has completed the _update_ result list will show any errors or updated records and "Process completed". -Records not updated due to not matching an existing record will not show in the *update* result list. +Records not updated due to not matching an existing record will not show in the _update_ result list. ### Partial record updates @@ -194,29 +198,29 @@ Types not listed may be added in future; for needs beyond what is provided with Each object type listed below links to a page showing the specific format required for the import file and special notes about importing that specific object: -- ##### [Customers](adm-import-customer.md) -- ##### [Head offices](adm-import-headoffice.md) -- ##### [Parts](adm-import-part.md) -- ##### [Part assemblies](adm-import-part-assembly.md) -- ##### [Part inventory](adm-import-inventory.md) -- ##### [Part warhouses](adm-import-warehouse.md) -- ##### [Projects](adm-import-project.md) -- ##### [Service rates](adm-import-service-rate.md) -- ##### [Task groups](adm-import-task-group.md) -- ##### [Travel rates](adm-import-travel-rate.md) -- ##### [Units](adm-import-unit.md) -- ##### [Unit models](adm-import-unit-model.md) -- ##### [Vendors](adm-import-vendor.md) +- ##### [Customers](adm-import-customer.md) +- ##### [Head offices](adm-import-headoffice.md) +- ##### [Parts](adm-import-part.md) +- ##### [Part assemblies](adm-import-part-assembly.md) +- ##### [Part inventory](adm-import-inventory.md) +- ##### [Part warhouses](adm-import-warehouse.md) +- ##### [Projects](adm-import-project.md) +- ##### [Service rates](adm-import-service-rate.md) +- ##### [Task groups](adm-import-task-group.md) +- ##### [Travel rates](adm-import-travel-rate.md) +- ##### [Units](adm-import-unit.md) +- ##### [Unit models](adm-import-unit-model.md) +- ##### [Vendors](adm-import-vendor.md) ## Import order when starting with a new AyaNova database If you are getting started with AyaNova and importing your own data from other sources, several of the objects require other objects to already be present in the AyaNova database first. -- import Vendors before importing Parts, Unit Models or Units -- import Unit Models before importing Units -- import Part Warehouses before importing Part Inventory Transactions -- import Parts before importing Part Inventory Transactions or Part Assemblies -- import Head Offices before importing Customers +- import Vendors before importing Parts, Unit Models or Units +- import Unit Models before importing Units +- import Part Warehouses before importing Part Inventory Transactions +- import Parts before importing Part Inventory Transactions or Part Assemblies +- import Head Offices before importing Customers ## Import form diff --git a/docs/8.0/ayanova/docs/adm-license.md b/docs/8.0/ayanova/docs/adm-license.md index 51ce282b..6406884c 100644 --- a/docs/8.0/ayanova/docs/adm-license.md +++ b/docs/8.0/ayanova/docs/adm-license.md @@ -6,21 +6,21 @@ The AyaNova license is stored inside the database so as long as you have a backu ## Trying out AyaNova -If you are trying out AyaNova for the first time this is the form to request an evaluation license key. +If you are trying out AyaNova for the first time this form will automatically prompt you to request an evaluation license. -See the [Trying out AyaNova](ay-evaluate.md) page for details. +See the [Trying out AyaNova](ay-evaluate.md) documentation page for more details about evaluating AyaNova. ## Authorization Roles required -Many roles can *select* this object on other records where approriate. Editing or viewing this object in detail is only available to Users with the following [roles](ay-biz-admin-roles.md): +Many roles can _select_ this object on other records where approriate. Editing or viewing this object in detail is only available to Users with the following [roles](ay-biz-admin-roles.md): Full access -- Business administration +- Business administration Read only access -- Business administration - restricted +- Business administration - restricted ## How to access License @@ -36,11 +36,13 @@ If the server can't find a license in the database then links are shown to begin #### Start trial evaluation -An evaluation trial license is required to try out AyaNova: +An evaluation trial license is required to try out AyaNova and you will be prompted with the following form if no license is installed: ![request evaluation license](img/adm-license-unlicensed-request-evaluation.png) -Enter you details here and click on Send Request. An automated email will be sent within 5 minutes to the address you provided to verify your email address. Check the inbox for the address provided and when you receive the email verification message click on the link contained within to verify your email. +Login to AyaNova and if it has not yet been licensed you will automatically be taken to the license request form pictured above so you can enter your details and request a license. + +Once your details have been entered Click on Send Request. An automated email will be sent within 5 minutes to the address you provided to verify your email address. Check the inbox for the address provided and when you receive the email verification message click on the link contained within to verify your email. Note that we will only contact the address you provide for licensing or support purposes. @@ -120,7 +122,7 @@ The `Purchase a license` button is provided as a direct link to the license purc ### Install button -The `Install license` button will trigger the AyaNova server to contact the license server and check for a new replacement license, if found it will automatically be installed. +The `Install license` button will trigger the AyaNova server to contact the license server and check for a new replacement license, if found it will automatically be installed. AyaNova will automatically check for replacement licenses on a regular schedule (if connected to the internet), this button just speeds up the process but is not necessary if a new license has been automatically issued when a purchase was made or a temporary license renewed. @@ -138,24 +140,24 @@ This is a duplicate of the functionality of the `Install license` button. This option is provided to permanently erase _most_ user entered data in the AyaNova database. -You will be prompted twice to make sure you really want to do this. +You will be prompted twice to make sure you really want to do this. -***Erase database can only be reversed by [restoring](ops-restore.md) from [backup](ops-form-backup.md).*** +**_Erase database can only be reversed by [restoring](ops-restore.md) from [backup](ops-form-backup.md)._** Everything entered in AyaNova will be erased **except** the following items: -- Global settings -- Operations backup settings -- Operations notification settings -- Business logos -- Reports (any missing, by name, stock report templates will be re-installed) -- Tax codes +- Global settings +- Operations backup settings +- Operations notification settings +- Business logos +- Reports (any missing, by name, stock report templates will be re-installed) +- Tax codes These items are kept as this feature is typically used when people are evaluating AyaNova and are ready to start using it for real but want to keep the non business data settings and reports to save having to re-enter them again. ## Downgrading a license -If a replacement license is installed that has fewer service technicians that the prior license and the administrator has not disabled the extra service techncians first, AyaNova will automatically disable any excess service techs / scheduleable Users by setting their `Active` property to false in order to remain with the purchased license count. +If a replacement license is installed that has fewer service technicians that the prior license and the administrator has not disabled the extra service techncians first, AyaNova will automatically disable any excess service techs / scheduleable Users by setting their `Active` property to false in order to remain with the purchased license count. AyaNova tries to do this in the least disruptive way possible by favoring disabling in this order: @@ -165,7 +167,7 @@ AyaNova tries to do this in the least disruptive way possible by favoring disabl This attempts to not disable current active service technicians. -We recommend the administrator disable the excess service techs before downgrading the license to avoid any potential disruption. +We recommend the administrator disable the excess service techs before downgrading the license to avoid any potential disruption. If a tech was automatically disabled to remain within the licensed limit that shouldn't be, you can set another tech inactive and then set the de-activated tech back to active so they can continue working. diff --git a/docs/8.0/ayanova/docs/ay-evaluate.md b/docs/8.0/ayanova/docs/ay-evaluate.md index d3ed1b90..1c42ce30 100644 --- a/docs/8.0/ayanova/docs/ay-evaluate.md +++ b/docs/8.0/ayanova/docs/ay-evaluate.md @@ -1,12 +1,12 @@ # Trying out AyaNova -The evaluation form is provided to generate sample data in order to be able to quickly try out features. +## Install AyaNova first -The sample data is randomly generated and will differ each time it is created. Any resemblance to real world data is unintentional and purely co-incidental. +If you are trying out AyaNova the first step is to [install AyaNova](ops-install.md). -In addition there is a link to receive technical support while evaluating AyaNova and get answers to any questions that are not covered in this manual. +The second step is to request a [trial license](#requesting-a-trial-license). -### Default SuperUser login +## Default SuperUser login The default login for the AyaNova SuperUser account is user name: `superuser` password: `l3tm3in`. @@ -16,7 +16,7 @@ AyaNova will prompt you to change it if it discovers a login using the default s ## Requesting a trial license -If this is your first time starting AyaNova and it has no database set up yet, the first step is to install an [evaluation trial license](adm-license.md#start-trial-evaluation). +If this is your first time starting AyaNova and it has no database set up yet, the next step is to install an [evaluation trial license](adm-license.md#start-trial-evaluation). ## How the trial license works @@ -34,17 +34,19 @@ When you request a new trial key and AyaNova already has a trial key installed, ![generate dialog](img/evaluate-generate.png) +After you have [installed AyaNova](ops-install.md) and [requested an evaluation license](adm-license.md#start-trial-evaluation) you can generate some sample data to get started with AyaNova. + The _Generate sample data_ button in the evaluate page opens a dialog to select the quantity of sample data you wish to generate and set the time zone desired for the sample data to be generated within and optionally set _every_ generated object with an email address to the same specific address for testing notification features. ### Database will be erased Seeding will trigger erasure of **all** data in AyaNova in order to return it to a clean state with the following exceptions. -- Global settings -- Operations backup settings -- Operations notification settings -- Business logos -- Reports (any missing stock report templates will be re-installed) +- Global settings +- Operations backup settings +- Operations notification settings +- Business logos +- Reports (any missing stock report templates will be re-installed) ### Seed level diff --git a/docs/8.0/ayanova/docs/img/adm-global-autocomplete-templates.png b/docs/8.0/ayanova/docs/img/adm-global-autocomplete-templates.png new file mode 100644 index 00000000..c4298db8 Binary files /dev/null and b/docs/8.0/ayanova/docs/img/adm-global-autocomplete-templates.png differ diff --git a/docs/8.0/ayanova/docs/img/adm-history.png b/docs/8.0/ayanova/docs/img/adm-history.png new file mode 100644 index 00000000..153a5d68 Binary files /dev/null and b/docs/8.0/ayanova/docs/img/adm-history.png differ diff --git a/docs/8.0/ayanova/docs/img/adm-import-ready.png b/docs/8.0/ayanova/docs/img/adm-import-ready.png new file mode 100644 index 00000000..249cb695 Binary files /dev/null and b/docs/8.0/ayanova/docs/img/adm-import-ready.png differ diff --git a/docs/8.0/ayanova/docs/img/adm-import.png b/docs/8.0/ayanova/docs/img/adm-import.png new file mode 100644 index 00000000..515b94f6 Binary files /dev/null and b/docs/8.0/ayanova/docs/img/adm-import.png differ diff --git a/docs/8.0/ayanova/docs/svc-projects.md b/docs/8.0/ayanova/docs/svc-projects.md index 0ab24cab..00d6c119 100644 --- a/docs/8.0/ayanova/docs/svc-projects.md +++ b/docs/8.0/ayanova/docs/svc-projects.md @@ -44,13 +44,13 @@ Projects are accessed in the following ways: ## Projects data table -![projects table](img/svc-projects.png) +![table](img/svc-projects.png) The Projects [data table](ay-start-form-data-tables.md) lists all the Projects that are entered in AyaNova and provides access to common [data table menu options](ay-start-form-data-tables.md#common-menu-options). ## Project edit form -![Project edit form](img/svc-project-edit-form.png) +![edit form](img/svc-project-edit-form.png) The Project edit form provides all the [standard edit form](ay-start-edit-forms.md) functionality and the following fields: diff --git a/server/AyaNova/biz/JobsBiz.cs b/server/AyaNova/biz/JobsBiz.cs index 0073e9a3..37f47445 100644 --- a/server/AyaNova/biz/JobsBiz.cs +++ b/server/AyaNova/biz/JobsBiz.cs @@ -185,7 +185,7 @@ namespace AyaNova.Biz //log.LogTrace("ProcessJobs called but actively processing other jobs so returning"); return; } - if (!KeepOnWorking()) return; + ActivelyProcessing = true; log.LogTrace("Processing internal jobs"); try @@ -198,8 +198,7 @@ namespace AyaNova.Biz //METRICS CoreJobMetricsSnapshot.DoWork(); - //### Server state dependent jobs - ApiServerState serverState = ServiceProviderProvider.ServerState; + //## JOBS that will not run in a license or import mode or other system lock scenario from here down if (!KeepOnWorking()) return; log.LogTrace("Processing level 2 internal jobs"); @@ -266,6 +265,9 @@ namespace AyaNova.Biz } } + //### Server state dependent jobs + ApiServerState serverState = ServiceProviderProvider.ServerState; + //### API Open only jobs if (!serverState.IsOpen) {