/*
* This file is part of LibrePlan
*
* Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e
* Desenvolvemento Tecnolóxico de Galicia
* Copyright (C) 2010-2011 Igalia, S.L.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.libreplan.web.orders;
import java.util.List;
import org.libreplan.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException;
import org.libreplan.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException;
import org.libreplan.business.orders.entities.OrderElement;
import org.libreplan.business.qualityforms.entities.QualityForm;
import org.libreplan.business.qualityforms.entities.QualityFormItem;
import org.libreplan.business.qualityforms.entities.TaskQualityForm;
import org.libreplan.business.qualityforms.entities.TaskQualityFormItem;
/**
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
* @author Vova Perebykivskyi <vova@libreplan-enterprise.com>
*/
public interface IAssignedTaskQualityFormsToOrderElementModel {
/**
* Assigns {@link TaskQualityForm} to {@link OrderElement}.
* @param @ QualityForm}
*/
void assignTaskQualityForm(QualityForm qualityForm);
/**
* Delete {@link TaskQualityForm}.
* @param taskQualityForm
*/
void deleteTaskQualityForm(TaskQualityForm taskQualityForm);
/**
* Gets all {@link TaskQualityForm} assigned to the current {@link OrderElement}.
* @return {@link List<TaskQualityForm>}
*/
List<TaskQualityForm> getTaskQualityForms();
/**
* Returns all the unallocated {@link QualityForm} to the current {@link OrderElement}.
* @return {@link List<QualityForm>}
*/
List<QualityForm> getNotAssignedQualityForms();
/**
* Returns all the allocated {@link QualityForm} needed for gathering usage statistics.
*/
List<QualityForm> getAssignedQualityForms();
/**
* @return {@link OrderElement}
*/
OrderElement getOrderElement();
void init(OrderElement orderElement);
/**
* Check whether {@link QualityForm} has been already assigned to {@link OrderElement} or not.
* @param qualityForm
*/
boolean isAssigned(QualityForm qualityForm);
/**
* Set {@link OrderElement}.
* @param orderElement
*/
void setOrderElement(OrderElement orderElement);
/**
* @param orderModel
*/
void setOrderModel(IOrderModel orderModel);
/**
* Update the date and the property passed of all the {@link TaskQualityFormItem} of the {@link TaskQualityForm}.
* @param taskQualityForm
*/
void updatePassedTaskQualityFormItems(TaskQualityForm taskQualityForm);
/**
* Check whether {@link QualityFormItem} the property passed must be disabled.
* @param taskQualityForm, item
*/
boolean isDisabledPassedItem(TaskQualityForm taskQualityForm, TaskQualityFormItem item);
/**
* Check whether {@link QualityFormItem} date must be disabled.
* @param taskQualityForm, item
*/
boolean isDisabledDateItem(TaskQualityForm taskQualityForm, TaskQualityFormItem item);
/**
* Check whether {@link QualityFormItem} date is consecutive.
* @param taskQualityForm, item
*/
boolean isCorrectConsecutiveDate(TaskQualityForm taskQualityForm, TaskQualityFormItem item);
/**
* Check whether all {@link QualityForm} and its {@link QualityFormItem} are valid.
*/
void validate();
void addAdvanceAssignmentIfNeeded(TaskQualityForm taskQualityForm)
throws DuplicateValueTrueReportGlobalAdvanceException, DuplicateAdvanceAssignmentForOrderElementException;
void removeAdvanceAssignmentIfNeeded(TaskQualityForm taskQualityForm);
void updateAdvancesIfNeeded();
}