ItEr46S16CUCalculoAvancesConFormularioCalidadeItEr45S22: Reporting advances from quality forms.

This commit is contained in:
Manuel Rego Casasnovas 2010-02-03 20:56:57 +01:00 committed by Javier Moran Rua
parent 208b6b0c71
commit f85fc260af
18 changed files with 335 additions and 39 deletions

View file

@ -29,19 +29,24 @@ import org.navalplanner.business.common.Registry;
public enum PredefinedAdvancedTypes {
CHILDREN(_("children"), new BigDecimal(100), new BigDecimal(0.01), true), PERCENTAGE(
_("percentage"), new BigDecimal(100), new BigDecimal(0.01), true), UNITS(
_("units"), new BigDecimal(Integer.MAX_VALUE), new BigDecimal(1),
false), SUBCONTRACTOR(_("subcontractor"), new BigDecimal(100),
new BigDecimal(0.01), true);
CHILDREN(_("children"), new BigDecimal(100), new BigDecimal(0.01), true,
false),
PERCENTAGE(_("percentage"), new BigDecimal(100),
new BigDecimal(0.01), true, false),
UNITS(_("units"),
new BigDecimal(Integer.MAX_VALUE), new BigDecimal(1), false, false),
SUBCONTRACTOR(
_("subcontractor"), new BigDecimal(100), new BigDecimal(0.01),
true, false);
private PredefinedAdvancedTypes(String name, BigDecimal defaultMaxValue,
BigDecimal precision, boolean percentage) {
BigDecimal precision, boolean percentage, boolean qualityForm) {
this.name = name;
this.defaultMaxValue = defaultMaxValue.setScale(4,
BigDecimal.ROUND_HALF_UP);
this.unitPrecision = precision.setScale(4, BigDecimal.ROUND_HALF_UP);
this.percentage = percentage;
this.qualityForm = qualityForm;
}
private final String name;
@ -52,9 +57,11 @@ public enum PredefinedAdvancedTypes {
private final boolean percentage;
private final boolean qualityForm;
public AdvanceType createType() {
return AdvanceType.create(name, defaultMaxValue, false, unitPrecision,
true, percentage);
true, percentage, qualityForm);
}
public String getTypeName() {

View file

@ -20,8 +20,12 @@
package org.navalplanner.business.advance.entities;
import static org.navalplanner.business.i18n.I18nHelper._;
import java.math.BigDecimal;
import org.apache.commons.lang.BooleanUtils;
import org.hibernate.validator.AssertTrue;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.navalplanner.business.common.BaseEntity;
@ -42,10 +46,16 @@ public class AdvanceType extends BaseEntity {
public static AdvanceType create(String unitName,
BigDecimal defaultMaxValue, boolean updatable,
BigDecimal unitPrecision, boolean active, boolean percentage) {
AdvanceType advanceType = new AdvanceType(unitName, defaultMaxValue, updatable,
unitPrecision, active, percentage);
advanceType.setNewObject(true);
return advanceType;
return create(unitName, defaultMaxValue, updatable, unitPrecision,
active, percentage, false);
}
public static AdvanceType create(String unitName,
BigDecimal defaultMaxValue, boolean updatable,
BigDecimal unitPrecision, boolean active, boolean percentage,
boolean qualityForm) {
return create(new AdvanceType(unitName, defaultMaxValue, updatable,
unitPrecision, active, percentage, qualityForm));
}
@NotEmpty
@ -66,6 +76,8 @@ public class AdvanceType extends BaseEntity {
@NotNull
private boolean percentage = false;
private Boolean qualityForm = false;
/**
* Constructor for hibernate. Do not use!
*/
@ -75,7 +87,7 @@ public class AdvanceType extends BaseEntity {
private AdvanceType(String unitName, BigDecimal defaultMaxValue,
boolean updatable, BigDecimal unitPrecision, boolean active,
boolean percentage) {
boolean percentage, boolean qualityForm) {
this.unitName = unitName;
this.percentage = percentage;
setDefaultMaxValue(defaultMaxValue);
@ -84,6 +96,7 @@ public class AdvanceType extends BaseEntity {
this.unitPrecision = unitPrecision;
this.unitPrecision.setScale(4, BigDecimal.ROUND_HALF_UP);
this.active = active;
this.qualityForm = qualityForm;
}
public void setUnitName(String unitName) {
@ -140,9 +153,12 @@ public class AdvanceType extends BaseEntity {
public String getType() {
if (isUpdatable()) {
return "De Usuario";
return _("User");
}
return "Predefinido";
if (isQualityForm()) {
return _("Quality form");
}
return _("Predefined");
}
public void doPropagateAdvaceToParent(OrderElement orderElement) {
@ -185,4 +201,23 @@ public class AdvanceType extends BaseEntity {
return percentage;
}
@NotNull(message = "quality form not specified")
public Boolean isQualityForm() {
return BooleanUtils.toBoolean(qualityForm);
}
public void setQualityForm(Boolean qualityForm) {
this.qualityForm = BooleanUtils.toBoolean(qualityForm);
}
@AssertTrue(message = "advance type marked as quality form but is updatable")
public boolean checkConstraintIfIsQualityFormIsNotUpdatable() {
if (isQualityForm()) {
if (isUpdatable()) {
return false;
}
}
return true;
}
}

View file

@ -348,6 +348,16 @@ public abstract class OrderElement extends BaseEntity implements
public abstract DirectAdvanceAssignment getAdvanceAssignmentByType(AdvanceType type);
public DirectAdvanceAssignment getDirectAdvanceAssignmentByType(
AdvanceType advanceType) {
for (DirectAdvanceAssignment directAdvanceAssignment : getDirectAdvanceAssignments()) {
if (directAdvanceAssignment.getAdvanceType().equals(advanceType)) {
return directAdvanceAssignment;
}
}
return null;
}
public Set<DirectAdvanceAssignment> getDirectAdvanceAssignments() {
return Collections.unmodifiableSet(directAdvanceAssignments);
}
@ -1035,4 +1045,5 @@ public abstract class OrderElement extends BaseEntity implements
.multiply(new BigDecimal(100)));
return (measuredProgress.compareTo(new BigDecimal(100)) == 0);
}
}

View file

@ -505,12 +505,7 @@ public class OrderLine extends OrderElement {
@Override
public DirectAdvanceAssignment getAdvanceAssignmentByType(AdvanceType type) {
for (DirectAdvanceAssignment directAdvanceAssignment : getDirectAdvanceAssignments()) {
if (directAdvanceAssignment.getAdvanceType().equals(type)) {
return directAdvanceAssignment;
}
}
return null;
return getDirectAdvanceAssignmentByType(type);
}
public void incrementLastHoursGroupSequenceCode() {

View file

@ -755,10 +755,9 @@ public class OrderLineGroup extends OrderElement implements
}
public DirectAdvanceAssignment getAdvanceAssignmentByType(AdvanceType type) {
for (DirectAdvanceAssignment each : getDirectAdvanceAssignments()) {
if (type != null && each.getAdvanceType().getId().equals(type.getId())) {
return each;
}
DirectAdvanceAssignment result = getDirectAdvanceAssignmentByType(type);
if (result != null) {
return result;
}
for (IndirectAdvanceAssignment each : getIndirectAdvanceAssignments()) {

View file

@ -20,16 +20,21 @@
package org.navalplanner.business.qualityforms.daos;
import java.math.BigDecimal;
import java.util.List;
import org.apache.commons.lang.Validate;
import org.hibernate.Criteria;
import org.hibernate.NonUniqueResultException;
import org.hibernate.criterion.Restrictions;
import org.navalplanner.business.advance.daos.IAdvanceTypeDAO;
import org.navalplanner.business.advance.entities.AdvanceType;
import org.navalplanner.business.common.daos.GenericDAOHibernate;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.qualityforms.entities.QualityForm;
import org.navalplanner.business.qualityforms.entities.QualityFormType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
@ -46,6 +51,9 @@ import org.springframework.transaction.annotation.Transactional;
public class QualityFormDAO extends GenericDAOHibernate<QualityForm, Long>
implements IQualityFormDAO {
@Autowired
private IAdvanceTypeDAO advanceTypeDAO;
@Override
public List<QualityForm> getAll() {
return list(QualityForm.class);
@ -120,4 +128,25 @@ public class QualityFormDAO extends GenericDAOHibernate<QualityForm, Long>
return existsOtherWorkReportTypeByName(qualityForm);
}
@Override
public void save(QualityForm entity) throws ValidationException {
if (entity.isReportAdvance()) {
String name = QualityForm.ADVANCE_TYPE_PREFIX + entity.getName();
AdvanceType advanceType = entity.getAdvanceType();
if (advanceType != null) {
advanceTypeDAO.save(advanceType);
advanceType.setUnitName(name);
} else {
advanceType = AdvanceType.create(name, new BigDecimal(100),
false, new BigDecimal(0.01), true, true, true);
advanceTypeDAO.save(advanceType);
entity.setAdvanceType(advanceType);
}
}
super.save(entity);
}
}

View file

@ -28,12 +28,14 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.Validate;
import org.hibernate.NonUniqueResultException;
import org.hibernate.validator.AssertTrue;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Valid;
import org.navalplanner.business.advance.entities.AdvanceType;
import org.navalplanner.business.common.BaseEntity;
import org.navalplanner.business.common.Registry;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
@ -41,6 +43,8 @@ import org.navalplanner.business.qualityforms.daos.IQualityFormDAO;
public class QualityForm extends BaseEntity {
public static final String ADVANCE_TYPE_PREFIX = "QF: ";
public static QualityForm create() {
QualityForm qualityForm = new QualityForm();
qualityForm.setNewObject(true);
@ -70,6 +74,10 @@ public class QualityForm extends BaseEntity {
private List<QualityFormItem> qualityFormItems = new ArrayList<QualityFormItem>();
private Boolean reportAdvance = false;
private AdvanceType advanceType;
@NotEmpty(message = "quality form name not specified")
public String getName() {
return name;
@ -375,4 +383,30 @@ public class QualityForm extends BaseEntity {
return (position >= 0 && position < qualityFormItems.size());
}
@NotNull(message = "report advance not specified")
public Boolean isReportAdvance() {
return BooleanUtils.toBoolean(reportAdvance);
}
public void setReportAdvance(Boolean reportAdvance) {
this.reportAdvance = BooleanUtils.toBoolean(reportAdvance);
}
public AdvanceType getAdvanceType() {
return advanceType;
}
public void setAdvanceType(AdvanceType advanceType) {
this.advanceType = advanceType;
}
@AssertTrue(message = "advance type should not be null if report advance")
public boolean checkConstraintAdvanceTypeIsNotNullIfReportAdvance() {
if (advanceType == null) {
return !isReportAdvance();
} else {
return isReportAdvance();
}
}
}

View file

@ -5,6 +5,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.Validate;
import org.hibernate.validator.AssertTrue;
import org.hibernate.validator.NotNull;
@ -16,10 +17,7 @@ public class TaskQualityForm extends BaseEntity {
public static TaskQualityForm create(OrderElement orderElement,
QualityForm qualityForm) {
TaskQualityForm taskQualityForm = new TaskQualityForm(orderElement,
qualityForm);
taskQualityForm.setNewObject(true);
return taskQualityForm;
return create(new TaskQualityForm(orderElement, qualityForm));
}
protected TaskQualityForm() {
@ -38,6 +36,8 @@ public class TaskQualityForm extends BaseEntity {
private List<TaskQualityFormItem> taskQualityFormItems = new ArrayList<TaskQualityFormItem>();
private Boolean reportAdvance = false;
@Valid
public List<TaskQualityFormItem> getTaskQualityFormItems() {
return Collections.unmodifiableList(taskQualityFormItems);
@ -146,4 +146,14 @@ public class TaskQualityForm extends BaseEntity {
}
return true;
}
@NotNull(message = "report advance not specified")
public Boolean isReportAdvance() {
return BooleanUtils.toBoolean(reportAdvance);
}
public void setReportAdvance(Boolean reportAdvance) {
this.reportAdvance = BooleanUtils.toBoolean(reportAdvance);
}
}

View file

@ -17,6 +17,8 @@
<property name="unitPrecision" access="field" scale="4"/>
<property name="active" access="field"/>
<property name="percentage" access="field"/>
<property name="qualityForm" access="field"/>
</class>
<!-- AdvanceAssignment -->

View file

@ -29,6 +29,12 @@
<property name="position" access="field"/>
</composite-element>
</list>
<property name="reportAdvance" access="field" />
<many-to-one name="advanceType" column="ADVANCE_TYPE_ID"
class="org.navalplanner.business.advance.entities.AdvanceType" />
</class>
<!-- TaskQualityForm -->
@ -55,6 +61,9 @@
<property name="date" access="field"/>
</composite-element>
</list>
<property name="reportAdvance" access="field" />
</class>
</hibernate-mapping>

View file

@ -27,6 +27,8 @@ import java.util.List;
import org.apache.commons.logging.LogFactory;
import org.hibernate.validator.InvalidValue;
import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException;
import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.qualityforms.entities.QualityForm;
@ -266,8 +268,50 @@ public class AssignedTaskQualityFormsToOrderElementController extends
appendNewLabel(row, taskQualityForm.getQualityForm().getName());
appendNewLabel(row, taskQualityForm.getQualityForm()
.getQualityFormType().toString());
appendCheckboxReportAdvance(row, taskQualityForm);
appendOperations(row);
}
private void appendCheckboxReportAdvance(Row row,
final TaskQualityForm taskQualityForm) {
final Checkbox tmpCheckbox = new Checkbox();
Checkbox checkbox = Util.bind(tmpCheckbox,
new Util.Getter<Boolean>() {
@Override
public Boolean get() {
return taskQualityForm.isReportAdvance();
}
}, new Util.Setter<Boolean>() {
@Override
public void set(Boolean value) {
try {
if (value) {
assignedTaskQualityFormsToOrderElementModel
.addAdvanceAssignmentIfNeeded(taskQualityForm);
} else {
assignedTaskQualityFormsToOrderElementModel
.removeAdvanceAssignmentIfNeeded(taskQualityForm);
}
taskQualityForm.setReportAdvance(value);
} catch (DuplicateValueTrueReportGlobalAdvanceException e) {
throw new RuntimeException(e);
} catch (DuplicateAdvanceAssignmentForOrderElementException e) {
messages
.showMessage(
Level.ERROR,
_("Another order element in the same branch is already reporting advance for this quality form"));
tmpCheckbox.setChecked(false);
}
}
});
if (!taskQualityForm.getQualityForm().isReportAdvance()) {
checkbox.setDisabled(true);
}
row.appendChild(checkbox);
}
}
private void appendDetails(Row row, TaskQualityForm taskQualityForm) {
@ -477,6 +521,7 @@ public class AssignedTaskQualityFormsToOrderElementController extends
// Operations to confirm and validate
public boolean confirm() {
assignedTaskQualityFormsToOrderElementModel.updateAdvancesIfNeeded();
validateConstraints();
return validate();
}

View file

@ -22,11 +22,20 @@ package org.navalplanner.web.orders;
import static org.navalplanner.web.I18nHelper._;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.hibernate.validator.InvalidValue;
import org.joda.time.LocalDate;
import org.navalplanner.business.advance.daos.IAdvanceTypeDAO;
import org.navalplanner.business.advance.entities.AdvanceAssignment;
import org.navalplanner.business.advance.entities.AdvanceMeasurement;
import org.navalplanner.business.advance.entities.AdvanceType;
import org.navalplanner.business.advance.entities.DirectAdvanceAssignment;
import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException;
import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.orders.daos.IOrderElementDAO;
import org.navalplanner.business.orders.entities.OrderElement;
@ -58,6 +67,9 @@ public class AssignedTaskQualityFormsToOrderElementModel implements
private IOrderModel orderModel;
@Autowired
private IAdvanceTypeDAO advanceTypeDAO;
@Override
public OrderElement getOrderElement() {
return orderElement;
@ -257,4 +269,71 @@ public class AssignedTaskQualityFormsToOrderElementModel implements
}
}
@Override
@Transactional(readOnly = true)
public void addAdvanceAssignmentIfNeeded(TaskQualityForm taskQualityForm)
throws DuplicateValueTrueReportGlobalAdvanceException,
DuplicateAdvanceAssignmentForOrderElementException {
AdvanceType advanceType = taskQualityForm.getQualityForm()
.getAdvanceType();
advanceTypeDAO.reattach(advanceType);
AdvanceAssignment advanceAssignment = taskQualityForm.getOrderElement()
.getDirectAdvanceAssignmentByType(advanceType);
if (advanceAssignment == null) {
DirectAdvanceAssignment newAdvanceAssignment = DirectAdvanceAssignment
.create(false, new BigDecimal(100));
newAdvanceAssignment.setAdvanceType(advanceType);
taskQualityForm.getOrderElement().addAdvanceAssignment(
newAdvanceAssignment);
addAdvanceMeasurements(taskQualityForm, newAdvanceAssignment);
}
}
private void addAdvanceMeasurements(TaskQualityForm taskQualityForm,
DirectAdvanceAssignment newAdvanceAssignment) {
for (TaskQualityFormItem taskQualityFormItem : taskQualityForm
.getTaskQualityFormItems()) {
if (taskQualityFormItem.getPassed()
&& (taskQualityFormItem.getDate() != null)) {
LocalDate date = LocalDate
.fromDateFields(taskQualityFormItem.getDate());
BigDecimal value = taskQualityFormItem.getPercentage();
newAdvanceAssignment
.addAdvanceMeasurements(AdvanceMeasurement
.create(date, value));
}
}
}
@Override
@Transactional(readOnly = true)
public void removeAdvanceAssignmentIfNeeded(TaskQualityForm taskQualityForm) {
AdvanceType advanceType = taskQualityForm.getQualityForm()
.getAdvanceType();
advanceTypeDAO.reattach(advanceType);
AdvanceAssignment advanceAssignment = taskQualityForm.getOrderElement()
.getDirectAdvanceAssignmentByType(advanceType);
if (advanceAssignment != null) {
taskQualityForm.getOrderElement().removeAdvanceAssignment(
advanceAssignment);
}
}
@Override
public void updateAdvancesIfNeeded() {
if (orderElement != null) {
for (TaskQualityForm taskQualityForm : getTaskQualityForms()) {
if (taskQualityForm.isReportAdvance()) {
DirectAdvanceAssignment advanceAssignment = orderElement
.getAdvanceAssignmentByType(taskQualityForm
.getQualityForm().getAdvanceType());
advanceAssignment.getAdvanceMeasurements().clear();
addAdvanceMeasurements(taskQualityForm, advanceAssignment);
}
}
}
}
}

View file

@ -22,6 +22,8 @@ package org.navalplanner.web.orders;
import java.util.List;
import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException;
import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.qualityforms.entities.QualityForm;
import org.navalplanner.business.qualityforms.entities.QualityFormItem;
@ -123,4 +125,13 @@ public interface IAssignedTaskQualityFormsToOrderElementModel {
* @param
*/
void validate();
void addAdvanceAssignmentIfNeeded(TaskQualityForm taskQualityForm)
throws DuplicateValueTrueReportGlobalAdvanceException,
DuplicateAdvanceAssignmentForOrderElementException;
void removeAdvanceAssignmentIfNeeded(TaskQualityForm taskQualityForm);
void updateAdvancesIfNeeded();
}

View file

@ -96,4 +96,6 @@ public interface IManageOrderElementAdvancesModel {
public void refreshChangesFromOrderElement();
public boolean isQualityForm(AdvanceAssignment advance);
}

View file

@ -237,14 +237,21 @@ public class ManageOrderElementAdvancesController extends
listItem.setDraggable("true");
listItem.setDroppable("true");
boolean isQualityForm = false;
if (advance.getAdvanceType() != null) {
isQualityForm = manageOrderElementAdvancesModel
.isQualityForm(advance);
}
if ((advance instanceof DirectAdvanceAssignment)
&& ((DirectAdvanceAssignment) advance)
.getAdvanceMeasurements().isEmpty()) {
.getAdvanceMeasurements().isEmpty()
&& !isQualityForm) {
appendComboboxAdvancType(listItem);
} else {
appendLabelAdvanceType(listItem);
}
appendDecimalBoxMaxValue(listItem);
appendDecimalBoxMaxValue(listItem, isQualityForm);
appendDecimalBoxValue(listItem);
appendLabelPercentage(listItem);
appendDateBoxDate(listItem);
@ -263,7 +270,8 @@ public class ManageOrderElementAdvancesController extends
.getPossibleAdvanceTypes(advance);
for(AdvanceType advanceType : listAdvanceType){
if (!advanceType.getUnitName().equals(
PredefinedAdvancedTypes.CHILDREN.getTypeName())) {
PredefinedAdvancedTypes.CHILDREN.getTypeName())
&& !advanceType.isQualityForm()) {
Comboitem comboItem = new Comboitem();
comboItem.setValue(advanceType);
comboItem.setLabel(advanceType.getUnitName());
@ -324,15 +332,19 @@ public class ManageOrderElementAdvancesController extends
listItem.appendChild(listCell);
}
private void appendDecimalBoxMaxValue(final Listitem listItem){
private void appendDecimalBoxMaxValue(final Listitem listItem,
boolean isQualityForm) {
AdvanceAssignment advanceAssignment = (AdvanceAssignment) listItem
.getValue();
Decimalbox maxValue = new Decimalbox();
maxValue.setScale(2);
final DirectAdvanceAssignment directAdvanceAssignment;
if (advanceAssignment instanceof IndirectAdvanceAssignment) {
if ((advanceAssignment instanceof IndirectAdvanceAssignment)
|| isQualityForm) {
maxValue.setDisabled(true);
}
if (advanceAssignment instanceof IndirectAdvanceAssignment) {
directAdvanceAssignment = manageOrderElementAdvancesModel
.calculateFakeDirectAdvanceAssignment((IndirectAdvanceAssignment) advanceAssignment);
} else {

View file

@ -136,12 +136,7 @@ public class ManageOrderElementAdvancesModel implements
@Override
public void refreshChangesFromOrderElement() {
for (IndirectAdvanceAssignment each : orderElement
.getIndirectAdvanceAssignments()) {
if (!listAdvanceAssignments.contains(each)) {
listAdvanceAssignments.add(each);
}
}
fillVariables();
}
@Override
@ -288,6 +283,14 @@ public class ManageOrderElementAdvancesModel implements
if (this.advanceAssignment == null) {
return true;
}
AdvanceType advanceType = this.advanceAssignment.getAdvanceType();
if (advanceType != null) {
if (advanceType.isQualityForm()) {
return true;
}
}
return this.isIndirectAdvanceAssignment;
}
@ -551,4 +554,12 @@ public class ManageOrderElementAdvancesModel implements
return xymodel;
}
@Override
@Transactional(readOnly = true)
public boolean isQualityForm(AdvanceAssignment advance) {
AdvanceType advanceType = advance.getAdvanceType();
advanceTypeDAO.reattach(advanceType);
return advanceType.isQualityForm();
}
}

View file

@ -45,6 +45,7 @@
<column width="25px"/>
<column label="${i18n:_('Task quality form name')}" sort="auto(qualityForm.name)" sortDirection="descending"/>
<column label="${i18n:_('Type')}" />
<column label="${i18n:_('Report advance')}" />
<column label="${i18n:_('Operations')}" />
</columns>
</grid>

View file

@ -55,6 +55,10 @@
onSelect="controller.changeQualityFormType();"
selectedItem="@{controller.qualityForm.qualityFormType}"/>
</row>
<row>
<label value="${i18n:_('Report advance')}" />
<checkbox checked="@{controller.qualityForm.reportAdvance}" />
</row>
</rows>
</grid>
</vbox>