[oform] Add correction of a field master array

Also, return the number of role fields that are used in the document
This commit is contained in:
KirillovIlya
2022-12-07 11:08:56 +03:00
parent 2994a431a1
commit c903b45178
4 changed files with 63 additions and 2 deletions

View File

@ -369,6 +369,15 @@
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldMaster(this, fieldMaster.GetId(), false)); AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldMaster(this, fieldMaster.GetId(), false));
this.FieldMasters.splice(index, 1); this.FieldMasters.splice(index, 1);
}; };
CDocument.prototype.removeFieldMasterByIndex = function(index)
{
if (index < 0 || index >= this.FieldMasters.length)
return;
let fieldMaster = this.FieldMasters[index];
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldMaster(this, fieldMaster.GetId(), false));
this.FieldMasters.splice(index, 1);
};
CDocument.prototype.getFieldMasterCount = function() CDocument.prototype.getFieldMasterCount = function()
{ {
return this.FieldMasters.length; return this.FieldMasters.length;
@ -437,6 +446,39 @@
this.OForm.onChangeRoles(); this.OForm.onChangeRoles();
}; };
CDocument.prototype.correctFieldMasters = function(logicDocument)
{
if (!logicDocument)
return;
let formManager = logicDocument.GetFormsManager();
let allForms = formManager.GetAllForms();
for (let index = 0, count = allForms.length; index < count; ++index)
{
let form = allForms[index];
let fieldMaster = form.GetFieldMaster();
if (!fieldMaster)
{
// TODO: Мы не можем здесь генерировать id, т.к. данная функция вызывается на открытии
// и тогда у разных клиентов будут разные id. Поэтому, пока лучше вообще такие поля будут без id
fieldMaster = new AscOForm.CFieldMaster(false);
this.addFieldMaster(fieldMaster);
fieldMaster.addUser(this.getDefaultUserMaster());
form.SetFieldMaster(fieldMaster);
}
fieldMaster.setLogicField(form);
}
for (let fieldIndex = this.FieldMasters.length - 1; fieldIndex >= 0; --fieldIndex)
{
let fieldMaster = this.FieldMasters[fieldIndex];
let form = fieldMaster.getLogicField();
if (!form || form.GetFieldMaster() !== fieldMaster)
this.removeFieldMasterByIndex(fieldIndex);
}
};
//--------------------------------------------------------export---------------------------------------------------- //--------------------------------------------------------export----------------------------------------------------
AscOForm.CDocument = CDocument; AscOForm.CDocument = CDocument;

View File

@ -130,7 +130,13 @@
}; };
CFieldGroup.prototype.getAllFields = function() CFieldGroup.prototype.getAllFields = function()
{ {
let fields = this.Fields.slice(); let fields = [];
for (let fieldIndex = 0, fieldCount = this.Fields.length; fieldIndex < fieldCount; ++fieldIndex)
{
if (this.Fields[index].isUseInDocument())
fields.push(this.Fields[index]);
}
if (this.Users.length && this.Parent) if (this.Users.length && this.Parent)
{ {
for (let index = 0, count = this.Users.length; index < count; ++index) for (let index = 0, count = this.Users.length; index < count; ++index)
@ -138,7 +144,7 @@
let userFields = this.Parent.getAllFieldsByUserMaster(this.Users[index]); let userFields = this.Parent.getAllFieldsByUserMaster(this.Users[index]);
for (let fieldIndex = 0, fieldCount = userFields.length; fieldIndex < fieldCount; ++fieldIndex) for (let fieldIndex = 0, fieldCount = userFields.length; fieldIndex < fieldCount; ++fieldIndex)
{ {
if (-1 === fields.indexOf(userFields[fieldIndex])) if (-1 === fields.indexOf(userFields[fieldIndex]) && userFields[fieldIndex].isUseInDocument())
fields.push(userFields[fieldIndex]); fields.push(userFields[fieldIndex]);
} }
} }

View File

@ -55,6 +55,10 @@
{ {
this.Field = logicField; this.Field = logicField;
}; };
CFieldMaster.prototype.getLogicField = function()
{
return this.Field;
};
CFieldMaster.prototype.clone = function() CFieldMaster.prototype.clone = function()
{ {
let fm = new CFieldMaster(true); let fm = new CFieldMaster(true);
@ -138,6 +142,13 @@
return false; return false;
}; };
CFieldMaster.prototype.isUseInDocument = function()
{
return true;
return (this.Field
&& this.Field.IsUseInDocument()
&& this === this.Field.GetFieldMaster());
};
CFieldMaster.prototype.readAttrXml = function(name, reader) CFieldMaster.prototype.readAttrXml = function(name, reader)
{ {
switch (name) switch (name)

View File

@ -462,6 +462,7 @@
OForm.prototype.onEndLoad = function() OForm.prototype.onEndLoad = function()
{ {
this.NeedUpdateRoles = true; this.NeedUpdateRoles = true;
this.Format.correctFieldMasters(this.getDocument());
this.correctFieldGroups(); this.correctFieldGroups();
this.updateRoles(); this.updateRoles();
}; };
@ -495,6 +496,7 @@
if (!logicDocument) if (!logicDocument)
return; return;
this.Format.correctFieldMasters(this.getDocument());
this.correctFieldGroups(); this.correctFieldGroups();
this.updateRoles(); this.updateRoles();