This commit is contained in:
2021-02-22 21:06:17 +00:00
parent 98d33c010a
commit b259584b85
3 changed files with 14 additions and 9 deletions

View File

@@ -56,7 +56,10 @@ todo: child collection items error / rule / customization handling
where ParentCollectionName is exactly the same as the Model collection property name and
FieldName is exactly the same as the child collection objects Model property name
Update RequiredFieldsValidator to look for these period seperated items and navigate through teh collection by name / reflection to step through children and flag errors to include parent
e.g in validation error field name would be "poitems.vendorpartnumber" to indicate poitems collection vendorpartnumber field and set childitems index property (new) to 3 to indicate 4th row (0based)
e.g in purchase order record, validation error for not entering required Ordered quantity
"target" field name would be "items[0].quantityOrdered" to indicate poitems collection quantityOrdered field and items[0] indicates the first record in the collection
Note that this is how the built in validation for Model Required rules operates and that's useful so mirroring it even though it's a little harder to parse it saves a lot of dev time
as data annotations will be supported as is
Update ValidationError.cs class, add index property and use it for above
Update BizObject.cs add error methods that include index for use with indexed collection item errors
Update client gzform.cs server errors handler to handle indexed child collection like that and report error on row and in popup edit form

View File

@@ -83,7 +83,7 @@ function getControlLabel(ctrl) {
// Get errors for a particular field
// from server error collection
//
function getErrorsForField(vm, ref) {
function getErrorsForField(vm, ref, index) {
//Note: to debug this on forms just put {{ formState.serverError }}
//on the form to see what is actually stored there and should be showing
let ret = [];
@@ -143,9 +143,7 @@ export default {
if (vm.formState.loading) {
return true;
}
// if (ref == "Items.PartId") {
// debugger;
// }
let ctrl = getControl(vm, ref);
if (typeof ctrl == "undefined") {
// console.log("gzform:required rule - bailing due to undefined", ref);
@@ -683,8 +681,6 @@ export default {
// NOTE: that in a form this should only be used with non stock-required fields, if they are already required they cannot be hidden
//
showMe(vm, formCustomTemplateFieldName) {
//TODO: CHILD COLLECTION MOD handle dot notation path indexed collection etc
// possibly it will just work since the key will match but double check
//special check for wiki field
//if read only then can't add any content and if no content then no reason to show it at all
if (formCustomTemplateFieldName == "wiki") {
@@ -748,7 +744,6 @@ export default {
// This is required so that server errors can be cleared when input is changed
// formReference is an optional string name of the form ref property if alternative named form
fieldValueChanged(vm, ref, formReference) {
//TODO: CHILD COLLECTION MOD add error version for indexed child
let that = this;
let formControl = null;
if (formReference == undefined) {
@@ -759,7 +754,7 @@ export default {
//dev error on form?
if (!formControl) {
throw `gzform::fieldVAlueChanged formControl is not found ref:${ref}, formReferences:${formReference} `;
throw `gzform::fieldValueChanged formControl is not found ref:${ref}, formReferences:${formReference} `;
}
//this is currently required to ensure that this method runs after all the broken rule checks have settled

View File

@@ -359,6 +359,12 @@
:label="$ay.t('PurchaseOrderItemQuantityReceived')"
ref="Items.QuantityReceived"
data-cy="Items.QuantityReceived"
:error-messages="
form().serverErrors(
this,
`Items[${editPoItemIndex}].QuantityReceived`
)
"
:rules="[
form().decimalValid(this, 'Items.QuantityReceived'),
form().required(this, 'Items.QuantityReceived')
@@ -452,6 +458,7 @@
></v-text-field>
</v-col>
</v-row>
{{ formState.serverError }}
<!-- {{ obj.items[editPoItemIndex] }} -->
</v-card-text>
<v-card-actions>