This commit is contained in:
2021-03-19 17:01:40 +00:00
parent ae68ec0695
commit ef8279ec9f
27 changed files with 156 additions and 70 deletions

View File

@@ -58,20 +58,107 @@ todo: v8 migrate additions
## CLIENT MISC ITEMS
todo: Reviews are showing for all users for all users
sb superuser can see all and biz admin can see all but anyone else just sees their own???
but supervisor shoudl be able to see any reviews related to their areas??
hmm... what was it in v7??
..........................................................................................................
* todo JC misc list:
****************
User Settings
****************
(italic is mine original message, your original response in []. The **** is my reply to yours)
How will the user know what "language code" to enter - gives only one example "en-US" but when start typing in, nothing comes up to select?
[this is intended as an override for what their browser defaults to already which should be correct 99.99% of the time and should almost never need to be changed. Maybe I could include a link to the codes on a wikipedia page or something, they change from time to time and it wouldn't bre practical to include a list preset]
****yes a tooltip or URL link next to/under the label or the entry field would help by leading users to that info (in the URL) if they need.
****I'd also like to suggest "Override language code" as the label, to indicate that it OVERRIDES something existing.
(italic is mine original message, your original response in []. The **** is my reply to yours)
How will the user know what "Time zone" to enter - gives only one example "America/Vancouver" but when start typing in, nothing comes up to select?
[same issue as language code above]
****yes a tooltip or URL link next to/under the label or the entry field would help by leading users to that info (in the URL) if they need.
****I'd also like to suggest "Override Time Zone" as the label, to indicate that it OVERRIDES something existing.
(italic is mine original message, your original response in []. The **** is my reply to yours)
I see "under" the "Map URL template" dropdown list where can select Google, Bing etc. Is the idea that a user will "know" what this is used for if they use it?
[yes, if they have a particular mapping site they prefer they can select it here otherwise defaults to google maps.]
****if the Google url template is the default, can it show preselected? Cause right now nothing shows as selected, which to me as a user would indicate that "nothing" is set/default. OR if I have misunderstood and the default is not in the list, then the label to say "Override MAP URL template" to indicate selection overrides a default that is already set elsewhere.
******************
Tags
*****************
(italic is mine original message, your original response in []. The **** is my reply to yours)
How do I "see" ALL possible tags so I as an end-user can pick an existing tag OR so I can see the format of how tags are entered in my company (i.e. my company might use a prefix PC for a Part Cateogry or a DZ for a dispatch zone, or enter dispatch zone names by main street instead of east/north etc - and a supervisor won't want to have to manually sit with each staff and tell them what to do, thinking it should be intuitive...)
[not a feature currently. What are your thoughts on what is should look like and where it would go?]
Where can I as an end-user see ALL tags? what if I wanted/needed to remove/edit the same tag everywhere can't I do so from a list of available used tags - i.e. tag "blue" no longer used, want it removed from everything?
[not a feature currently. What are your thoughts on what is should look like and where it would go?]
****When I click to enter a tag (but have not yet typed anything), I'd expect/like to see a list of ALL existing tags drop down that I can then scroll down and select(doesn't do this as of right now March 15 2021 alpha-104). Whereas if I instead start typing a letter, then I would expect to see a dropdown list of tags that start with that letter (does this already!)
**************************
PO
*************************
(italic is mine original message, your original response in []. The **** is my reply to yours)
Is this as expected? Statuses don't automatically change at ANY point .... I take it that the status is FULLY up to the user. And the default appears to be Open - On Order UNLESS the end-user themselves actually changes it.
[Yes, completely up to user how they choose to use it. It's so different in how it works I struggled to find a system that woudl work automatically and not get in the way. The status before was tied to how it worked but it doesn't work that way anymore and technically users could just hide it if they don't use it. If you have any suggestions on something different I can look into it, just couldn't think of a clean automatic system at the time]
***OK no further suggestions at this time
(italic is mine original message, your original response in []. The **** is my reply to yours)
ISSUE **PO numbers duplicating:
the last generated PO # was 22. I edited an existing PO 17 to use PO 24, saved, all good. Created another po while testing stuff it used 23. And then I created another PO and I expected this PO to jump 24 and instead be labeled 25 BUT it TOO automatically set itself to number 24. So now I have TWO pos with number 24 (yes yes me as enduser can go in and change, so is this expected that numbers WILL ALWAYS be whatever raven decides and never actually follow +1 from the last biggest number?)
[Yes this is still a work in progress. I thought originally it might be a cool idea to make it editable or at least in case there was an issue or something but how you saw it working is how it works, it doesn't take into account existing records and needs a command to the db to reset the seed number separately. I could make some code that checks on save if the PO serial has been overridden and tries to force the serial number seed value to change but saw all kinds of potential issues around that too. (performance issues, could mess up another user also saving a new PO at the same time; user could accidentally enter a huge number and then it's stuck dishing out more huge numbers automatically etc). I was thinking maybe make it read only except for the superuser account only who could login to make changes and separately reset the next serial seed number in Global settings to avoid the issue you found with duplicate numbers. What are your thoughts on this?]
***taking into account what you wrote and what has been experienced:
- I too believe that users WONT want Raven to automatically find the highest number and force the next PO to +1 of the highest - for example: a company could have some fucked up numbers in the high millions due to previous SQL issues but wants to restart going forward from the number 1000.
- Based on what you wrote above, I take it that the db maintains its own "seed" number that updates internally somewhere as a new PO number is saved/assigned to a PO object.
- My suggestion: have a field area in the Global Settings for a setting labeled "Next PO Number"
(Preferred display) IF this seed # is easily obtainable, then prepopulate this field"Next PO Number" with the next expected "seed" # .
If user wants the "seed" number to be higher or lower then what are on existing POs to date, they totally can edit this field, save and the "seed" number gets changed.
Then use similarly for Workorder numbers, Quote numbers, PM numbers
******************
Receiving PO ITems:
******************
(italic is mine original message, your original response in []. The **** is my reply to yours)
Is this as expected? - Click on the Edit, opens to the editing of PO. if enter in a specific number to receive (i.e. ordered 5 received 2), didn't realize that clicking Receive causes ALL to be received.
I understadn that majority clicking on Receive works best - AND if want to receive partially, need to click ONLY on Save. BUT did want to point out that it is not obvious. Then again, don't want it to be overly with info and user can see AND can edit...
[I could change the translation text to "receive all" or put the "ordered" amount to the right of the Receive text so it says "Receive 3" for example? What are you thoughts on that?]
****I'd say to have the action button text changed to "RECEIVE ALL" - the ALL will make MUCH more obvious what expects to happen when click on, without having to .
******************
Filter Manager / filtering on list (this was NOT previously sent to you)
******************
***When select "-" in the Filter Manager, I expect that no filtering/sort order etc, will be applied. I expect that selecting "-" resets all back to nothing.
BUT when I select the "-" in Filter Manager, the last filtering/sorting that was used on the grid REMAINS. Wanted to bring this to your attention in case there to confirm this is as expected?
Scenario: Filter on one or two columns. Sort on one or two columns. Via Filter Manager save this as a filter view. Now select "-" in the Filter Manager (at which point I expect that selecting "_" would remove the filtering and sorting and reset the datatable back to no filtering/sorting.
***************
Taxes*
***************
You added additional decimal places as I requested. BUT I believe I was mistaken to request because I was once again still getting the the wrong impression what the format is.
REMOVE THE extra decimal place - make it so max of two decimal places so if have a 6.25% tax would enter in 6.25; if 16.75% would enter in 16.75 I know of no known tax rate that has more than 2 decimal places.
Taxes won't let me change an existing Name if previously selected on any other record. Scenario: A change happens to a tax %. and Admin needs to keep using the old tax for some things BUT wants users NOT to select this "old" tax for other stuff.
Taxes won't let me change the existing Active status if previously selected on any other record. Scenario: This is the most common use - there is a change to a tax %. So they want to set a tax to inactive so no one selects it anymore. BUT as of right now Raven won't allow editing of a tax, even just the Active field, if that tax has been linked (selected) with any other record.
*Name and Active for taxes brought to your attention in a previous email. Including it here so all together in one doc.
...................................................................................................................................................................
todo: reportClientMetaData in gzapi has DefaultLocale property in it which is just part of the language, can it be removed?
it might be buggy if there is no dash in the language? Is that a thing?
check at server how it's used
todo: confirm erase database should reset all id values if they aren't reset already so that future data doesn't result in a new PO starting at 29000 due to huge db trial seed prior
todo: Popup notes now AlertNotes - a whole section of important notes at the top that shows *all* notes combined like customer popup and contract notes
that shows all the time in the workorder UI with an option to minimize maybe or something
@@ -85,16 +172,7 @@ todo: datatable single select mode, is this even a thing?
if not then I should remove that code, it's just taking up space and complicating shit for no reason
todo: many stock reports could be made now for most objects
todo: inconsistent use of browser language and browser languages
getBrowserLanguages() <--- more often used vs getBrowserFirstLanguage() <-- fewer times used
some things are using the default first language
and some are using the entire array
In some cases array will work, in others it requires single
need to check into this and be consistent or understand what's happening
I'm guessing I favor languages as it seems to be accepted by whatever is using it and it will work better if the first one is unsupported
todo: locale.js look into this:
// also for sake of future proofing and edge cases need to have it be manually settable as well
// ############### TODO: modify all of these to put the user's manual override first in line (if there is one)
todo: it's a bit hard to click on a single digit or character link in a data table
e.g. serial number 1 of a po
can the region be expanded with invisible text or something?

View File

@@ -675,13 +675,11 @@ export default {
Authorization: "Bearer " + window.$gz.store.state.apiToken, //api token for using api methods as current user viewing report
DownloadToken: window.$gz.store.state.downloadToken,
TimeZoneName: window.$gz.locale.getResolvedTimeZoneName(),
LanguageName: window.$gz.locale.getBrowserLanguages(),
LanguageName: window.$gz.locale.getResolvedLanguage(),
Hour12: window.$gz.locale.getHour12(),
CurrencyName: window.$gz.locale.getCurrencyName(),
LanguageName: window.$gz.locale.getBrowserFirstLanguage(),
DefaultLocale: window.$gz.locale
.getBrowserFirstLanguage()
.split("-", 1)[0]
LanguageName: window.$gz.locale.getResolvedLanguage(),
DefaultLocale: window.$gz.locale.getResolvedLanguage().split("-", 1)[0]//kind of suspect, maybe it can be removed
};
},
///////////////////////////////////

View File

@@ -730,16 +730,18 @@ async function getUserOptions() {
mapUrlTemplate: null
};
//removed this block, locale already attempts this fully and this should really only set the user persisted value, not guess it here
//get language to use, try user set override first, if empty then browser set, if empty then default to en-us
l.languageOverride =
res.data.languageOverride ||
window.$gz.locale.getBrowserFirstLanguage() ||
"en-US";
// l.languageOverride =
// res.data.languageOverride || window.navigator.languages[0] || "en-US";
l.timeZoneOverride =
res.data.timeZoneOverride ||
window.$gz.locale.getResolvedTimeZoneName() ||
"America/New_York";
// l.timeZoneOverride =
// res.data.timeZoneOverride ||
// window.$gz.locale.getResolvedTimeZoneName() ||
// "America/New_York";
l.languageOverride = res.data.languageOverride;
l.timeZoneOverride = res.data.timeZoneOverride;
//No browser setting for this so meh
l.currencyName = res.data.currencyName || "USD";

View File

@@ -16,14 +16,21 @@ export default {
// only how the user expects to see the page itself
//
// also for sake of future proofing and edge cases need to have it be manually settable as well
// ############### TODO: modify all of these to put the user's manual override first in line (if there is one)
//
//https://appmakers.dev/bcp-47-language-codes-list/
getBrowserLanguages() {
return window.navigator.languages;
},
getBrowserFirstLanguage() {
return window.navigator.languages[0];
///////////////////////////////////////////
// Get users default language code
// first check if overriden in useroptions
// if not then use browsers own setting
getResolvedLanguage() {
let ov = window.$gz.store.state.userOptions.languageOverride;
if (!window.$gz.util.stringIsNullOrEmpty(ov)) {
return window.$gz.store.state.userOptions.languageOverride;
} else {
return window.navigator.languages[0];
}
},
///////////////////////////////////////////
// Get users default time zone
// first check if overriden in useroptions
@@ -68,7 +75,7 @@ export default {
timeZoneName = this.getResolvedTimeZoneName();
}
if (!languageName) {
languageName = this.getBrowserLanguages();
languageName = this.getResolvedLanguage();
}
if (!hour12) {
@@ -101,7 +108,7 @@ export default {
timeZoneName = this.getResolvedTimeZoneName();
}
if (!languageName) {
languageName = this.getBrowserLanguages();
languageName = this.getResolvedLanguage();
}
//parse the date which is identified as utc ("2020-02-06T18:18:49.148011Z")
@@ -128,7 +135,7 @@ export default {
timeZoneName = this.getResolvedTimeZoneName();
}
if (!languageName) {
languageName = this.getBrowserLanguages();
languageName = this.getResolvedLanguage();
}
if (!hour12) {
@@ -278,7 +285,7 @@ export default {
currencyLocalized(value, languageName, currencyName) {
if (value == null) return "";
if (!languageName) {
languageName = this.getBrowserLanguages();
languageName = this.getResolvedLanguage();
}
if (!currencyName) {
currencyName = this.getCurrencyName();
@@ -296,7 +303,7 @@ export default {
decimalLocalized(value, languageName) {
if (value == null) return "";
if (!languageName) {
languageName = this.getBrowserLanguages();
languageName = this.getResolvedLanguage();
}
//This forces 2 digits after the decimal
// return new Intl.NumberFormat(languageName, {

View File

@@ -275,7 +275,7 @@ export default {
}
let timeZoneName = window.$gz.locale.getResolvedTimeZoneName();
let languageName = window.$gz.locale.getBrowserLanguages();
let languageName = window.$gz.locale.getResolvedLanguage();
let hour12 = window.$gz.store.state.userOptions.hour12;
let ret = [];
for (let i = 0; i < data.length; i++) {

View File

@@ -29,7 +29,7 @@ export default {
data() {
return {
currencyName: window.$gz.locale.getCurrencyName(),
languageName: window.$gz.locale.getBrowserFirstLanguage()
languageName: window.$gz.locale.getResolvedLanguage()
};
},
props: {

View File

@@ -33,7 +33,7 @@ export default {
data() {
return {
events: [],
languageName: window.$gz.locale.getBrowserFirstLanguage()
languageName: window.$gz.locale.getResolvedLanguage()
};
},
props: {},

View File

@@ -42,7 +42,7 @@ export default {
return {
obj: [],
currencyName: window.$gz.locale.getCurrencyName(),
languageName: window.$gz.locale.getBrowserFirstLanguage()
languageName: window.$gz.locale.getResolvedLanguage()
};
},
props: {

View File

@@ -919,7 +919,7 @@ function buildRecords(listData, columndefinitions, ridColumnOpenable) {
//cache display format stuff
let timeZoneName = window.$gz.locale.getResolvedTimeZoneName();
let languageName = window.$gz.locale.getBrowserLanguages();
let languageName = window.$gz.locale.getResolvedLanguage();
let hour12 = window.$gz.store.state.userOptions.hour12;
let currencyName = window.$gz.store.state.userOptions.currencyName;

View File

@@ -20,7 +20,7 @@
<v-date-picker
:value="dateValue"
@input="updateDateValue"
:locale="defaultLocale"
:locale="languageName"
:data-cy="'dpick:' + testId"
>
<v-btn text color="primary" @click="$emit('input', null)">{{
@@ -60,8 +60,8 @@ export default {
dlgdate: false,
//cache display format stuff
timeZoneName: window.$gz.locale.getResolvedTimeZoneName(),
languageName: window.$gz.locale.getBrowserLanguages(),
defaultLocale: window.$gz.locale.getBrowserFirstLanguage().split("-", 1)[0]
languageName: window.$gz.locale.getResolvedLanguage()
// defaultLocale: window.$gz.locale.get BrowserFirstLanguage().split("-", 1)[0]
}),
props: {
label: { type: String, default: null },

View File

@@ -21,7 +21,7 @@
<v-date-picker
:value="dateValue"
@input="updateDateValue"
:locale="defaultLocale"
:locale="languageName"
:data-cy="'dpick:' + testId"
>
<v-btn text color="primary" @click="$emit('input', null)">{{
@@ -98,9 +98,9 @@ export default {
dlgtime: false,
//cache display format stuff
timeZoneName: window.$gz.locale.getResolvedTimeZoneName(),
languageName: window.$gz.locale.getBrowserLanguages(),
languageName: window.$gz.locale.getResolvedLanguage(),
hour12: window.$gz.locale.getHour12(),
defaultLocale: window.$gz.locale.getBrowserFirstLanguage().split("-", 1)[0]
//defaultLocale: window.$gz.locale.ge tBrowserFirstLanguage().split("-", 1)[0]
}),
props: {
label: { type: String, default: null },

View File

@@ -28,8 +28,7 @@ import { setValue, parseCurrency } from "vue-currency-input";
export default {
data() {
return {
// currencyName: window.$gz.locale.getCurrencyName(),
languageName: window.$gz.locale.getBrowserFirstLanguage()
languageName: window.$gz.locale.getResolvedLanguage()
};
},
props: {

View File

@@ -66,7 +66,7 @@ export default {
errorObj: [],
//cache display format stuff
timeZoneName: window.$gz.locale.getResolvedTimeZoneName(),
languageName: window.$gz.locale.getBrowserLanguages(),
languageName: window.$gz.locale.getResolvedLanguage(),
hour12: window.$gz.locale.getHour12()
}),
methods: {

View File

@@ -29,7 +29,7 @@ import { setValue, parseCurrency } from "vue-currency-input";
export default {
data() {
return {
languageName: window.$gz.locale.getBrowserFirstLanguage()
languageName: window.$gz.locale.getResolvedLanguage()
};
},
props: {

View File

@@ -65,9 +65,9 @@ export default {
dlgtime: false,
//cache display format stuff
timeZoneName: window.$gz.locale.getResolvedTimeZoneName(),
languageName: window.$gz.locale.getBrowserLanguages(),
hour12: window.$gz.locale.getHour12(),
defaultLocale: window.$gz.locale.getBrowserFirstLanguage().split("-", 1)[0]
languageName: window.$gz.locale.getResolvedLanguage(),
hour12: window.$gz.locale.getHour12()
// defaultLocale: window.$gz.locale.g etBrowserFirstLanguage().split("-", 1)[0]
}),
props: {
label: { type: String, default: null },

View File

@@ -337,7 +337,7 @@
<v-col cols="12" sm="6" lg="4" xl="3">
<v-text-field
v-model="optionsObj.languageOverride"
:placeholder="locale().getBrowserFirstLanguage()"
:placeholder="locale().getResolvedLanguage()"
:readonly="formState.readOnly"
:label="$ay.t('LanguageCode')"
:error-messages="

View File

@@ -29,7 +29,7 @@
<div>
<span class="ml-6 body-1">{{ $ay.t("LanguageCode") }}: </span>
<span class="body-2">{{ locale().getBrowserFirstLanguage() }}</span>
<span class="body-2">{{ locale().getResolvedLanguage() }}</span>
</div>
<div>

View File

@@ -293,7 +293,7 @@ export default {
let temp = res.data.events;
let currentEventCount = vm.obj.length;
let timeZoneName = window.$gz.locale.getResolvedTimeZoneName();
let languageName = window.$gz.locale.getBrowserLanguages();
let languageName = window.$gz.locale.getResolvedLanguage();
let hour12 = window.$gz.store.state.userOptions.hour12;
for (let i = 0; i < temp.length; i++) {
temp[i].date = window.$gz.locale.utcDateToShortDateAndTimeLocalized(

View File

@@ -877,7 +877,7 @@ export default {
selected: [],
availableRoles: [],
timeZoneName: window.$gz.locale.getResolvedTimeZoneName(),
languageName: window.$gz.locale.getBrowserLanguages(),
languageName: window.$gz.locale.getResolvedLanguage(),
hour12: window.$gz.locale.getHour12()
};
},

View File

@@ -781,7 +781,7 @@ export default {
selected: [],
availableRoles: [],
timeZoneName: window.$gz.locale.getResolvedTimeZoneName(),
languageName: window.$gz.locale.getBrowserLanguages(),
languageName: window.$gz.locale.getResolvedLanguage(),
hour12: window.$gz.locale.getHour12()
};
},

View File

@@ -327,7 +327,7 @@
<v-col cols="12" sm="6" lg="4" xl="3">
<v-text-field
v-model="optionsObj.languageOverride"
:placeholder="locale().getBrowserFirstLanguage()"
:placeholder="locale().getResolvedLanguage()"
:readonly="formState.readOnly"
:label="$ay.t('LanguageCode')"
:error-messages="

View File

@@ -168,7 +168,7 @@ export default {
// let dtPrecipice = dtToday.plus({ days: -85 }).toUTC();
let timeZoneName = window.$gz.locale.getResolvedTimeZoneName();
let languageName = window.$gz.locale.getBrowserLanguages();
let languageName = window.$gz.locale.getResolvedLanguage();
let hour12 = window.$gz.store.state.userOptions.hour12;
for (let i = 0; i < temp.length; i++) {
temp[

View File

@@ -128,24 +128,26 @@
<v-col cols="12" sm="6" lg="4" xl="3">
<v-text-field
v-model="obj.languageOverride"
:placeholder="locale().getBrowserFirstLanguage()"
:readonly="formState.readOnly"
:label="$ay.t('LanguageCode')"
:error-messages="form().serverErrors(this, 'languageOverride')"
ref="languageOverride"
@input="fieldValueChanged('languageOverride')"
:hint="locale().getResolvedLanguage()"
persistent-hint
></v-text-field>
</v-col>
<v-col cols="12" sm="6" lg="4" xl="3">
<v-text-field
v-model="obj.timeZoneOverride"
:placeholder="locale().getResolvedTimeZoneName()"
:readonly="formState.readOnly"
:label="$ay.t('TimeZone')"
:error-messages="form().serverErrors(this, 'timeZoneOverride')"
ref="timeZoneOverride"
@input="fieldValueChanged('timeZoneOverride')"
:hint="locale().getResolvedTimeZoneName()"
persistent-hint
></v-text-field>
</v-col>

View File

@@ -949,7 +949,7 @@ export default {
ayaType: window.$gz.type.PurchaseOrder,
currencyName: window.$gz.locale.getCurrencyName(),
timeZoneName: window.$gz.locale.getResolvedTimeZoneName(),
languageName: window.$gz.locale.getBrowserLanguages(),
languageName: window.$gz.locale.getResolvedLanguage(),
hour12: window.$gz.locale.getHour12()
};
},

View File

@@ -159,7 +159,7 @@ export default {
rights: window.$gz.role.fullRightsObject(),
//cache display format stuff
timeZoneName: window.$gz.locale.getResolvedTimeZoneName(),
languageName: window.$gz.locale.getBrowserLanguages(),
languageName: window.$gz.locale.getResolvedLanguage(),
hour12: window.$gz.locale.getHour12()
};
},

View File

@@ -66,7 +66,7 @@ export default {
rights: window.$gz.role.defaultRightsObject(),
//cache display format stuff
timeZoneName: window.$gz.locale.getResolvedTimeZoneName(),
languageName: window.$gz.locale.getBrowserLanguages(),
languageName: window.$gz.locale.getResolvedLanguage(),
hour12: window.$gz.locale.getHour12()
};
},

View File

@@ -69,7 +69,7 @@ export default {
//cache display format stuff
timeZoneName: window.$gz.locale.getResolvedTimeZoneName(),
languageName: window.$gz.locale.getBrowserLanguages(),
languageName: window.$gz.locale.getResolvedLanguage(),
hour12: window.$gz.locale.getHour12()
};
},