From b0340bf8a163033ec84fd4ffd920b49cf086fccc Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Thu, 27 Oct 2011 11:18:27 +0200 Subject: [PATCH 01/88] Create the entity CustomerComunication, the dao CustomerComunicationDAO, the test CustomerComunicationDAOTest and add the changes of the database in a new file db.changelog-1.2.xml FEA: ItEr75S28CustomerIncommingCommunicationsLists --- .../daos/CustomerComunicationDAO.java | 56 +++++++ .../daos/ICustomerComunicationDAO.java | 41 +++++ .../entities/ComunicationType.java | 31 ++++ .../entities/CustomerComunication.java | 130 ++++++++++++++++ .../src/main/resources/db.changelog-1.2.xml | 21 +++ .../src/main/resources/db.changelog.xml | 2 +- .../entities/ExternalCompanies.hbm.xml | 22 +++ .../daos/CustomerComunicationDAOTest.java | 145 ++++++++++++++++++ 8 files changed, 447 insertions(+), 1 deletion(-) create mode 100644 libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/CustomerComunicationDAO.java create mode 100644 libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/ICustomerComunicationDAO.java create mode 100644 libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java create mode 100644 libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java create mode 100644 libreplan-business/src/main/resources/db.changelog-1.2.xml create mode 100644 libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerComunicationDAOTest.java diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/CustomerComunicationDAO.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/CustomerComunicationDAO.java new file mode 100644 index 000000000..52499a67b --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/CustomerComunicationDAO.java @@ -0,0 +1,56 @@ +/* + * This file is part of NavalPlan + * + * 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 . + */ + +package org.libreplan.business.externalcompanies.daos; + +import java.util.List; + +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; +import org.libreplan.business.common.daos.GenericDAOHibernate; +import org.libreplan.business.externalcompanies.entities.CustomerComunication; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Repository; + +/** + * Hibernate DAO for {@link CustomerComunication} + * + * @author Susana Montes Pedreira + */ +@Repository +@Scope(BeanDefinition.SCOPE_SINGLETON) +public class CustomerComunicationDAO extends GenericDAOHibernate +implements ICustomerComunicationDAO { + + @Override + public List getAll(){ + return list(CustomerComunication.class); + } + + @Override + public List getAllNotReviewed(){ + Criteria c = getSession().createCriteria(CustomerComunication.class); + c.add(Restrictions.eq("reviewed", false)); + return c.list(); + } + +} diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/ICustomerComunicationDAO.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/ICustomerComunicationDAO.java new file mode 100644 index 000000000..5d6c1b270 --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/ICustomerComunicationDAO.java @@ -0,0 +1,41 @@ +/* + * This file is part of NavalPlan + * + * 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 . + */ + +package org.libreplan.business.externalcompanies.daos; + +import java.util.List; + +import org.libreplan.business.common.daos.IGenericDAO; +import org.libreplan.business.externalcompanies.entities.CustomerComunication; + + +/** + * Interface of the DAO for {@link CustomerComunication} + * + * @author Susana Montes Pedreira + */ +public interface ICustomerComunicationDAO extends IGenericDAO { + + List getAll(); + + List getAllNotReviewed(); + +} \ No newline at end of file diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java new file mode 100644 index 000000000..ff95d30e6 --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java @@ -0,0 +1,31 @@ +/* + * This file is part of NavalPlan + * + * 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 . + */ + +package org.libreplan.business.externalcompanies.entities; + +/** + * Enum for specified the type of {@link CustomerComunication} + * + * @author Susana Montes Pedreira + */ +public enum ComunicationType { + New_Project +} diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java new file mode 100644 index 000000000..3f884dcf1 --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java @@ -0,0 +1,130 @@ +/* + * This file is part of NavalPlan + * + * 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 . + */ + +package org.libreplan.business.externalcompanies.entities; + +import java.util.Date; + +import org.hibernate.validator.NotEmpty; +import org.hibernate.validator.NotNull; +import org.libreplan.business.common.BaseEntity; +import org.libreplan.business.orders.entities.Order; + +/** + * Entity CustomerComunication + * + * @author Susana Montes Pedreira + */ +public class CustomerComunication extends BaseEntity{ + + private Date deadline; + + private ComunicationType comunicationType; + + private Date comunicationDate; + + private Boolean reviewed = false; + + private Order order; + + public CustomerComunication() { + this.setComunicationDate(new Date()); + } + + public static CustomerComunication create() { + return (CustomerComunication) create(new CustomerComunication()); + } + + public CustomerComunication(Date deadline) { + this.setDeadline(deadline); + this.setComunicationDate(new Date()); + } + + public static CustomerComunication createToday(Date deadline) { + return (CustomerComunication) create(new CustomerComunication(deadline)); + } + + public static CustomerComunication createTodayNewProject(Date deadline) { + return (CustomerComunication) create(new CustomerComunication(deadline, new Date(), ComunicationType.New_Project)); + } + + protected CustomerComunication(Date deadline, Date comunicationDate, ComunicationType comunicationType) { + this.setDeadline(deadline); + this.setComunicationDate(comunicationDate); + this.setComunicationType(comunicationType); + } + + protected CustomerComunication(Date deadline, Date comunicationDate, ComunicationType comunicationType, Order order) { + this.setDeadline(deadline); + this.setComunicationDate(comunicationDate); + this.setComunicationType(comunicationType); + this.setOrder(order); + } + + public static CustomerComunication create(Date deadline, Date comunicationDate, ComunicationType comunicationType) { + return (CustomerComunication) create(new CustomerComunication(deadline, comunicationDate, comunicationType)); + } + + public static CustomerComunication create(Date deadline, Date comunicationDate, ComunicationType comunicationType, Order order) { + return (CustomerComunication) create(new CustomerComunication(deadline, comunicationDate, comunicationType, order)); + } + + public void setDeadline(Date deadline) { + this.deadline = deadline; + } + + public Date getDeadline() { + return deadline; + } + + public void setComunicationType(ComunicationType comunicationType) { + this.comunicationType = comunicationType; + } + + public ComunicationType getComunicationType() { + return comunicationType; + } + + public void setComunicationDate(Date comunicationDate) { + this.comunicationDate = comunicationDate; + } + + public Date getComunicationDate() { + return comunicationDate; + } + + public void setReviewed(Boolean reviewed) { + this.reviewed = reviewed; + } + + public Boolean getReviewed() { + return reviewed; + } + + public void setOrder(Order order) { + this.order = order; + } + + @NotNull(message = "order not specified") + public Order getOrder() { + return order; + } +} diff --git a/libreplan-business/src/main/resources/db.changelog-1.2.xml b/libreplan-business/src/main/resources/db.changelog-1.2.xml new file mode 100644 index 000000000..ecb610e1b --- /dev/null +++ b/libreplan-business/src/main/resources/db.changelog-1.2.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libreplan-business/src/main/resources/db.changelog.xml b/libreplan-business/src/main/resources/db.changelog.xml index d74b91d48..7cff8e9f7 100644 --- a/libreplan-business/src/main/resources/db.changelog.xml +++ b/libreplan-business/src/main/resources/db.changelog.xml @@ -9,5 +9,5 @@ - + diff --git a/libreplan-business/src/main/resources/org/libreplan/business/externalcompanies/entities/ExternalCompanies.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/externalcompanies/entities/ExternalCompanies.hbm.xml index bf8cf5a86..cff1bd4fa 100644 --- a/libreplan-business/src/main/resources/org/libreplan/business/externalcompanies/entities/ExternalCompanies.hbm.xml +++ b/libreplan-business/src/main/resources/org/libreplan/business/externalcompanies/entities/ExternalCompanies.hbm.xml @@ -33,4 +33,26 @@ column="company_user" /> + + + + + 100 + + + + + + + + + org.libreplan.business.externalcompanies.entities.ComunicationType + + + + + + + + diff --git a/libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerComunicationDAOTest.java b/libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerComunicationDAOTest.java new file mode 100644 index 000000000..59237cdec --- /dev/null +++ b/libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerComunicationDAOTest.java @@ -0,0 +1,145 @@ +/* + * This file is part of NavalPlan + * + * 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 . + */ + +package org.libreplan.business.test.externalcompanies.daos; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNotNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.fail; +import static org.libreplan.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE; +import static org.libreplan.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE; + +import java.util.Date; +import java.util.List; +import java.util.UUID; + +import org.joda.time.LocalDate; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.libreplan.business.calendars.daos.IBaseCalendarDAO; +import org.libreplan.business.calendars.entities.BaseCalendar; +import org.libreplan.business.common.IAdHocTransactionService; +import org.libreplan.business.common.IOnTransaction; +import org.libreplan.business.common.exceptions.InstanceNotFoundException; +import org.libreplan.business.common.exceptions.ValidationException; +import org.libreplan.business.externalcompanies.daos.ICustomerComunicationDAO; +import org.libreplan.business.externalcompanies.entities.CustomerComunication; +import org.libreplan.business.externalcompanies.entities.ExternalCompany; +import org.libreplan.business.orders.daos.IOrderDAO; +import org.libreplan.business.orders.entities.Order; +import org.libreplan.business.scenarios.IScenarioManager; +import org.libreplan.business.test.calendars.entities.BaseCalendarTest; +import org.libreplan.business.workreports.entities.WorkReportLine; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; +import static org.junit.Assert.assertTrue; + +/** + * Tests for {@link CustomerComunication} + * + * @author Susana Montes Pedreira + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE, + BUSINESS_SPRING_CONFIG_TEST_FILE }) +@Transactional +public class CustomerComunicationDAOTest { + + @Autowired + ICustomerComunicationDAO customerComunicationDAO; + + @Autowired + IOrderDAO orderDAO; + + @Autowired + private IBaseCalendarDAO calendarDAO; + + public Order createValidOrder(String name) { + Order order = Order.create(); + order.setName(name); + order.setCode(UUID.randomUUID().toString()); + order.setInitDate(new Date()); + BaseCalendar basicCalendar = BaseCalendarTest.createBasicCalendar(); + calendarDAO.save(basicCalendar); + order.setCalendar(basicCalendar); + orderDAO.save(order); + return order; + } + + private Date givenDeadLine(int months) { + LocalDate date = new LocalDate(); + date.plusMonths(months); + return date.toDateTimeAtStartOfDay().toDate(); + } + + public CustomerComunication createValidCustomerComunication() { + Order order = createValidOrder("Order A"); + CustomerComunication customerComunication = CustomerComunication + .createTodayNewProject(givenDeadLine(2)); + customerComunication.setOrder(order); + return customerComunication; + } + + @Test + public void testOrderDAOInSpringContainer() { + assertNotNull(orderDAO); + } + + @Test + public void testCustomerComunicationDAOInSpringContainer() { + assertNotNull(customerComunicationDAO); + } + + @Test + public void testSaveCustomerComunication() { + CustomerComunication customerComunication = createValidCustomerComunication(); + customerComunicationDAO.save(customerComunication); + assertTrue(customerComunication.getId() != null); + } + + @Test + public void testRemoveCustomerComunication() + throws InstanceNotFoundException { + CustomerComunication customerComunication = createValidCustomerComunication(); + customerComunicationDAO.save(customerComunication); + assertTrue(customerComunication.getId() != null); + customerComunicationDAO.remove(customerComunication.getId()); + assertFalse(customerComunicationDAO + .exists(customerComunication.getId())); + } + + @Test + public void testSaveCustomerComunicationWithoutOrder() + throws InstanceNotFoundException { + CustomerComunication customerComunication = createValidCustomerComunication(); + customerComunication.setOrder(null); + try { + customerComunicationDAO.save(customerComunication); + fail("It should throw an exception"); + } catch (ValidationException e) { + // Ok + } + } + +} From e6a0d470785981c777adc56b3ddf50913ce6ab4c Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Fri, 4 Nov 2011 12:22:29 +0100 Subject: [PATCH 02/88] Create a list of incoming projects accepted by customers and contracted with the company FEA: ItEr75S28CustomerIncommingCommunicationsLists --- .../web/common/CustomMenuController.java | 3 +- .../CustomerComunicationCRUDController.java | 196 ++++++++++++++++++ .../CustomerComunicationModel.java | 63 ++++++ .../FilterCustomerComunicationEnum.java | 54 +++++ .../ICustomerComunicationModel.java | 19 ++ .../subcontract/customerComunications.zul | 62 ++++++ 6 files changed, 396 insertions(+), 1 deletion(-) create mode 100644 libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java create mode 100644 libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java create mode 100644 libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterCustomerComunicationEnum.java create mode 100644 libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java create mode 100644 libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java index af9ad7954..646c4e6a4 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java @@ -297,7 +297,8 @@ public class CustomMenuController extends Div implements IMenuItemsRegister { } resourcesItems.add(subItem(_("Subcontracting"), "/subcontract/subcontractedTasks.zul", "", subItem(_("Subcontracted Tasks"), "/subcontract/subcontractedTasks.zul", ""), - subItem(_("Report Progress"), "/subcontract/reportAdvances.zul", ""))); + subItem(_("Report Progress"), "/subcontract/reportAdvances.zul", ""), + subItem(_("Customer subcontracted projects communications"), "/subcontract/customerComunications.zul",""))); topItem(_("Resources"), "/resources/worker/worker.zul", "", resourcesItems); if (isScenariosVisible()) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java new file mode 100644 index 000000000..74688fe94 --- /dev/null +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java @@ -0,0 +1,196 @@ +/* + * This file is part of NavalPlan + * + * 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 . + */ + +package org.libreplan.web.subcontract; + +import static org.libreplan.web.I18nHelper._; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import javax.annotation.Resource; + +import org.apache.commons.logging.LogFactory; +import org.libreplan.business.common.exceptions.ValidationException; +import org.libreplan.business.externalcompanies.entities.CustomerComunication; +import org.libreplan.business.materials.entities.MaterialStatusEnum; +import org.libreplan.business.orders.entities.Order; +import org.libreplan.business.workreports.entities.PositionInWorkReportEnum; +import org.libreplan.web.common.IMessagesForUser; +import org.libreplan.web.common.MessagesForUser; +import org.libreplan.web.planner.tabs.IGlobalViewEntryPoints; +import org.zkoss.ganttz.timetracker.zoom.ZoomLevel; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Button; +import org.zkoss.zul.Checkbox; +import org.zkoss.zul.Grid; +import org.zkoss.zul.Label; +import org.zkoss.zul.ListModel; +import org.zkoss.zul.Listbox; +import org.zkoss.zul.Row; +import org.zkoss.zul.RowRenderer; +import org.zkoss.zul.SimpleListModel; + +/** + * Controller for CRUD actions over a {@link CustomerComunication} + * + * @author Susana Montes Pedreira + */ +@SuppressWarnings("serial") +public class CustomerComunicationCRUDController extends GenericForwardComposer { + + private static final org.apache.commons.logging.Log LOG = LogFactory + .getLog(CustomerComunicationCRUDController.class); + + private ICustomerComunicationModel customerComunicationModel; + + private CustomerComunicationRenderer customerComunicationRenderer = new CustomerComunicationRenderer();; + + protected IMessagesForUser messagesForUser; + + private Component messagesContainer; + + private Grid listing; + + @Resource + private IGlobalViewEntryPoints globalView; + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + comp.setAttribute("controller", this); + messagesForUser = new MessagesForUser(messagesContainer); + } + + public void goToEdit(CustomerComunication customerComunication) { + if(customerComunication != null && customerComunication.getOrder() != null){ + Order order = customerComunication.getOrder(); + globalView.goToOrderDetails(order); + } + } + + public FilterCustomerComunicationEnum[] getFilterItems(){ + return FilterCustomerComunicationEnum.values(); + } + + public FilterCustomerComunicationEnum getCurrentFilterItem() { + return customerComunicationModel.getCurrentFilter(); + } + + public void setCurrentFilterItem(FilterCustomerComunicationEnum selected) { + customerComunicationModel.setCurrentFilter(selected); + + // update the customer comunication list + listing.setModel(new SimpleListModel(getCustomerComunications())); + listing.invalidate(); + } + + protected void save(CustomerComunication customerComunication) + throws ValidationException { + customerComunicationModel.confirmSave(customerComunication); + } + + public List getCustomerComunications() { + FilterCustomerComunicationEnum currentFilter = customerComunicationModel.getCurrentFilter(); + switch(currentFilter){ + case ALL: return customerComunicationModel.getCustomerAllComunications(); + case NOT_REVIEWED: return customerComunicationModel.getCustomerComunicationWithoutReviewed(); + default: return customerComunicationModel.getCustomerAllComunications(); + } + } + + public CustomerComunicationRenderer getCustomerComunicationRenderer() { + return customerComunicationRenderer; + } + + private class CustomerComunicationRenderer implements + RowRenderer { + + @Override + public void render(Row row, Object data) { + CustomerComunication customerComunication = (CustomerComunication) data; + row.setValue(customerComunication); + + appendLabel(row, customerComunication.getComunicationType() + .toString()); + appendLabel(row, customerComunication.getOrder().getName()); + appendLabel(row, toString(customerComunication.getDeadline())); + appendLabel(row, customerComunication.getOrder().getCode()); + appendLabel(row, customerComunication.getOrder() + .getCustomerReference()); + appendLabel(row, + toString(customerComunication.getComunicationDate())); + appendCheckbox(row, customerComunication); + appendOperations(row, customerComunication); + } + + private String toString(Date date) { + if (date == null) { + return ""; + } + + return new SimpleDateFormat("dd/MM/yyyy HH:mm").format(date); + } + + private void appendLabel(Row row, String label) { + row.appendChild(new Label(label)); + } + + private void appendCheckbox(Row row, + final CustomerComunication customerComunication) { + final Checkbox checkBoxReviewed = new Checkbox(); + checkBoxReviewed.setChecked(customerComunication.getReviewed()); + + checkBoxReviewed.addEventListener(Events.ON_CHECK, + new EventListener() { + + @Override + public void onEvent(Event arg0) throws Exception { + customerComunication.setReviewed(checkBoxReviewed.isChecked()); + save(customerComunication); + } + + }); + + row.appendChild(checkBoxReviewed); + } + + private void appendOperations(Row row, + final CustomerComunication customerComunication) { + Button buttonEdit = new Button(_("edit")); + buttonEdit.addEventListener(Events.ON_CLICK, new EventListener() { + + @Override + public void onEvent(Event arg0) throws Exception { + goToEdit(customerComunication); + } + + }); + row.appendChild(buttonEdit); + } + } + +} \ No newline at end of file diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java new file mode 100644 index 000000000..bc8f6ede9 --- /dev/null +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java @@ -0,0 +1,63 @@ +package org.libreplan.web.subcontract; + +import java.util.List; + +import org.libreplan.business.externalcompanies.daos.ICustomerComunicationDAO; +import org.libreplan.business.externalcompanies.entities.CustomerComunication; +import org.libreplan.web.common.concurrentdetection.OnConcurrentModification; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Scope(BeanDefinition.SCOPE_PROTOTYPE) +@OnConcurrentModification(goToPage = "/subcontract/customerComunication.zul") +public class CustomerComunicationModel implements ICustomerComunicationModel{ + + @Autowired + private ICustomerComunicationDAO customerComunicationDAO; + + private FilterCustomerComunicationEnum currentFilter = FilterCustomerComunicationEnum.NOT_REVIEWED; + + @Override + @Transactional + public void confirmSave(CustomerComunication customerComunication){ + customerComunicationDAO.save(customerComunication); + } + + @Override + @Transactional + public List getCustomerAllComunications(){ + List list = customerComunicationDAO.getAll(); + forceLoadAssociatedOrder(list); + return list; + } + + @Override + @Transactional + public List getCustomerComunicationWithoutReviewed(){ + List list = customerComunicationDAO.getAllNotReviewed(); + forceLoadAssociatedOrder(list); + return list; + } + + private void forceLoadAssociatedOrder(List customerComunicationList){ + if (customerComunicationList != null) { + for (CustomerComunication customerComunication : customerComunicationList) { + customerComunication.getOrder().getName(); + } + } + } + + @Override + public void setCurrentFilter(FilterCustomerComunicationEnum currentFilter) { + this.currentFilter = currentFilter; + } + + @Override + public FilterCustomerComunicationEnum getCurrentFilter() { + return currentFilter; + } +} diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterCustomerComunicationEnum.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterCustomerComunicationEnum.java new file mode 100644 index 000000000..89681f5fe --- /dev/null +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterCustomerComunicationEnum.java @@ -0,0 +1,54 @@ +/* + * This file is part of NavalPlan + * + * 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 . + */ + +package org.libreplan.web.subcontract; + +/** + * Enum to filter the {@link CustomerComunication} list. + * + * @author Susana Montes Pedreira + */ + public enum FilterCustomerComunicationEnum { + ALL(_("All")), + NOT_REVIEWED(_("Not Reviewed")); + + /** + * Forces to mark the string as needing translation + */ + private static String _(String string) { + return string; + } + + private String displayName; + + private FilterCustomerComunicationEnum(String displayName) { + this.displayName = displayName; + } + + public static FilterCustomerComunicationEnum getDefault() { + return ALL; + } + + @Override + public String toString() { + return displayName; + } + } \ No newline at end of file diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java new file mode 100644 index 000000000..a80cdbf20 --- /dev/null +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java @@ -0,0 +1,19 @@ +package org.libreplan.web.subcontract; + +import java.util.List; + +import org.libreplan.business.externalcompanies.entities.CustomerComunication; + +public interface ICustomerComunicationModel { + + void confirmSave(CustomerComunication customerComunication); + + List getCustomerComunicationWithoutReviewed(); + + List getCustomerAllComunications(); + + void setCurrentFilter(FilterCustomerComunicationEnum currentFilter); + + FilterCustomerComunicationEnum getCurrentFilter(); + +} diff --git a/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul b/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul new file mode 100644 index 000000000..2faca2e88 --- /dev/null +++ b/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + +
+
\ No newline at end of file From 37175f68114e5f3965df222059cf2477076467fc Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Fri, 4 Nov 2011 12:24:10 +0100 Subject: [PATCH 03/88] Add the external code when a whole order is imported as subcontrated task. Although this operation is not permit by the interfaz, this one give us clarity on the code. All subcontrated task have got the external code filled. FEA: ItEr75S28CustomerIncommingCommunicationsLists --- .../libreplan/ws/subcontract/impl/SubcontractServiceREST.java | 1 + 1 file changed, 1 insertion(+) diff --git a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java index 33dccfa3d..e16bb175b 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java +++ b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java @@ -195,6 +195,7 @@ public class SubcontractServiceREST implements ISubcontractService { order = (Order) orderElement; order.setVersionForScenario(current, version); order.useSchedulingDataFor(version); + order.setExternalCode(order.getCode()); } else { order = wrapInOrder(current, version, orderElement); From f5980498ecd7bcd7a7f332de49085747a97dd79b Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Fri, 4 Nov 2011 12:29:54 +0100 Subject: [PATCH 04/88] Create a customer comunication when a subcontractor receives the communication of a new project to be developed. FEA: ItEr75S28CustomerIncommingCommunicationsLists --- .../impl/SubcontractServiceREST.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java index e16bb175b..c7791d84c 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java +++ b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java @@ -24,6 +24,7 @@ package org.libreplan.ws.subcontract.impl; import static org.libreplan.web.I18nHelper._; import java.util.Arrays; +import java.util.Date; import java.util.List; import javax.ws.rs.Consumes; @@ -44,7 +45,10 @@ import org.libreplan.business.common.entities.EntityNameEnum; import org.libreplan.business.common.entities.EntitySequence; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.common.exceptions.ValidationException; +import org.libreplan.business.externalcompanies.daos.ICustomerComunicationDAO; import org.libreplan.business.externalcompanies.daos.IExternalCompanyDAO; +import org.libreplan.business.externalcompanies.entities.ComunicationType; +import org.libreplan.business.externalcompanies.entities.CustomerComunication; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.orders.daos.IOrderElementDAO; import org.libreplan.business.orders.entities.Order; @@ -96,6 +100,9 @@ public class SubcontractServiceREST implements ISubcontractService { @Autowired private IScenarioDAO scenarioDAO; + @Autowired + private ICustomerComunicationDAO customerComunicationDAO; + @Autowired private ITaskSourceDAO taskSourceDAO; @@ -228,6 +235,13 @@ public class SubcontractServiceREST implements ISubcontractService { order.validate(); orderElementDAO.save(order); + + /* + * create the customer comunication to a new subcontrating project. + */ + if(!StringUtils.isBlank(order.getExternalCode())){ + createCustomerComunication(order); + } } private void synchronizeWithSchedule(OrderElement orderElement, @@ -306,4 +320,12 @@ public class SubcontractServiceREST implements ISubcontractService { Util.generateInstanceId(1, code), message); } + private void createCustomerComunication(Order order){ + Date deadline = order.getDeadline(); + Date comunicationDate = new Date(); + CustomerComunication customerComunication = CustomerComunication + .create(deadline, comunicationDate, + ComunicationType.New_Project, order); + customerComunicationDAO.save(customerComunication); + } } From 7843c2789a5575a588833a47b2d467ab746d1e7e Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Fri, 4 Nov 2011 12:33:22 +0100 Subject: [PATCH 05/88] Add the relationship from order entity with its customer comunications. the relationship is used to delete all the comunications if the associated order is removed. FEA: ItEr75S28CustomerIncommingCommunicationsLists --- .../org/libreplan/business/orders/entities/Order.java | 11 +++++++++++ .../libreplan/business/orders/entities/Orders.hbm.xml | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java index 759067af7..6f702959a 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java +++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java @@ -41,6 +41,7 @@ import org.libreplan.business.calendars.entities.BaseCalendar; import org.libreplan.business.common.Registry; import org.libreplan.business.common.entities.EntitySequence; import org.libreplan.business.common.exceptions.InstanceNotFoundException; +import org.libreplan.business.externalcompanies.entities.CustomerComunication; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.planner.entities.DayAssignment; @@ -104,6 +105,8 @@ public class Order extends OrderLineGroup implements Comparable { private CurrentVersionInfo currentVersionInfo; + private Set customerComunications = new HashSet(); + public enum SchedulingMode { FORWARD, BACKWARDS; } @@ -565,4 +568,12 @@ public class Order extends OrderLineGroup implements Comparable { return this.getName().compareToIgnoreCase(((Order) o).getName()); } + public void setCustomerComunications(Set customerComunications) { + this.customerComunications = customerComunications; + } + + public Set getCustomerComunications() { + return customerComunications; + } + } diff --git a/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml index 197874d11..883361db8 100644 --- a/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml +++ b/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml @@ -145,6 +145,11 @@ + + + + + From c99807c08c5cb31d64b86f79c769c2ce9e124cf2 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Fri, 4 Nov 2011 13:45:39 +0100 Subject: [PATCH 06/88] Update the routing of the css with libreplan. FEA: ItEr75S28CustomerIncommingCommunicationsLists --- .../src/main/webapp/subcontract/customerComunications.zul | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul b/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul index 2faca2e88..79c08b6c7 100644 --- a/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul +++ b/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul @@ -21,8 +21,8 @@ - - + + From c0a3ec1392e093adee0a14b235a035678b6f9a51 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Fri, 4 Nov 2011 13:49:11 +0100 Subject: [PATCH 07/88] Improve ComunicationType enum and include the translate method. FEA: ItEr75S28CustomerIncommingCommunicationsLists --- .../entities/ComunicationType.java | 19 ++++++++++++++++++- .../entities/CustomerComunication.java | 3 ++- .../CustomerComunicationCRUDController.java | 11 ++++------- .../impl/SubcontractServiceREST.java | 2 +- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java index ff95d30e6..f53bb5fb4 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java @@ -21,11 +21,28 @@ package org.libreplan.business.externalcompanies.entities; +import static org.libreplan.business.i18n.I18nHelper._; + /** * Enum for specified the type of {@link CustomerComunication} * * @author Susana Montes Pedreira */ public enum ComunicationType { - New_Project + + NEW_PROJECT(_("New project")); + + private String description; + + private ComunicationType(String description) { + this.description = description; + } + + public String toString() { + return this.description; + } + + public static ComunicationType getDefault() { + return NEW_PROJECT; + } } diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java index 3f884dcf1..ee598dbbb 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java @@ -63,7 +63,8 @@ public class CustomerComunication extends BaseEntity{ } public static CustomerComunication createTodayNewProject(Date deadline) { - return (CustomerComunication) create(new CustomerComunication(deadline, new Date(), ComunicationType.New_Project)); + return (CustomerComunication) create(new CustomerComunication(deadline, + new Date(), ComunicationType.NEW_PROJECT)); } protected CustomerComunication(Date deadline, Date comunicationDate, ComunicationType comunicationType) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java index 74688fe94..1f5331211 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java @@ -31,14 +31,12 @@ import javax.annotation.Resource; import org.apache.commons.logging.LogFactory; import org.libreplan.business.common.exceptions.ValidationException; +import org.libreplan.business.externalcompanies.entities.ComunicationType; import org.libreplan.business.externalcompanies.entities.CustomerComunication; -import org.libreplan.business.materials.entities.MaterialStatusEnum; import org.libreplan.business.orders.entities.Order; -import org.libreplan.business.workreports.entities.PositionInWorkReportEnum; import org.libreplan.web.common.IMessagesForUser; import org.libreplan.web.common.MessagesForUser; import org.libreplan.web.planner.tabs.IGlobalViewEntryPoints; -import org.zkoss.ganttz.timetracker.zoom.ZoomLevel; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; @@ -48,8 +46,6 @@ import org.zkoss.zul.Button; import org.zkoss.zul.Checkbox; import org.zkoss.zul.Grid; import org.zkoss.zul.Label; -import org.zkoss.zul.ListModel; -import org.zkoss.zul.Listbox; import org.zkoss.zul.Row; import org.zkoss.zul.RowRenderer; import org.zkoss.zul.SimpleListModel; @@ -134,8 +130,9 @@ public class CustomerComunicationCRUDController extends GenericForwardComposer { CustomerComunication customerComunication = (CustomerComunication) data; row.setValue(customerComunication); - appendLabel(row, customerComunication.getComunicationType() - .toString()); + final ComunicationType type = customerComunication.getComunicationType(); + appendLabel(row, type.toString()); + appendLabel(row, customerComunication.getOrder().getName()); appendLabel(row, toString(customerComunication.getDeadline())); appendLabel(row, customerComunication.getOrder().getCode()); diff --git a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java index c7791d84c..f724a4a77 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java +++ b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java @@ -325,7 +325,7 @@ public class SubcontractServiceREST implements ISubcontractService { Date comunicationDate = new Date(); CustomerComunication customerComunication = CustomerComunication .create(deadline, comunicationDate, - ComunicationType.New_Project, order); + ComunicationType.NEW_PROJECT, order); customerComunicationDAO.save(customerComunication); } } From d9d482bdeb3890e485b142ca43e7d66ed1e361ca Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Tue, 15 Nov 2011 09:50:17 +0100 Subject: [PATCH 08/88] Create the entity SubcontractorComunication, the dao SubcontractorComunicationDAO, the test SubcontractorComunicationDAOTest and add the changes of the database in a new file db.changelog-1.2.xml FEA: ItEr75S30SubcontractorIncommingCommunicationsLists --- .../daos/ISubcontractorComunicationDAO.java | 34 +++ .../daos/SubcontractorComunicationDAO.java | 55 ++++ .../entities/SubcontractorComunication.java | 127 +++++++++ .../SubcontractorComunicationValue.java | 111 ++++++++ .../src/main/resources/db.changelog-1.2.xml | 27 ++ .../libreplan-business-spring-config.xml | 3 + .../SubcontractorComunication.hbm.xml | 34 +++ .../SubcontractorComunicationDAOTest.java | 254 ++++++++++++++++++ .../libreplan-business-spring-config-test.xml | 3 + .../libreplan-webapp-spring-config-test.xml | 3 + 10 files changed, 651 insertions(+) create mode 100644 libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractorComunicationDAO.java create mode 100644 libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractorComunicationDAO.java create mode 100644 libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java create mode 100644 libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java create mode 100644 libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorComunication.hbm.xml create mode 100644 libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractorComunicationDAO.java b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractorComunicationDAO.java new file mode 100644 index 000000000..e00763f3a --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractorComunicationDAO.java @@ -0,0 +1,34 @@ +/* + * 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 . + */ + +package org.libreplan.business.planner.daos; + +import java.util.List; + +import org.libreplan.business.common.daos.IGenericDAO; +import org.libreplan.business.planner.entities.SubcontractorComunication; + +public interface ISubcontractorComunicationDAO extends IGenericDAO { + + List getAll(); + + List getAllNotReviewed(); +} diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractorComunicationDAO.java b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractorComunicationDAO.java new file mode 100644 index 000000000..929fc032c --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractorComunicationDAO.java @@ -0,0 +1,55 @@ +/* + * 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 . + */ + +package org.libreplan.business.planner.daos; + +import java.util.List; + +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; +import org.libreplan.business.common.daos.GenericDAOHibernate; +import org.libreplan.business.planner.entities.SubcontractorComunication; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Repository; + +/** + * DAO for {@link SubcontractorComunication} + * @author Susana Montes Pedreira + */ + +@Repository +@Scope(BeanDefinition.SCOPE_SINGLETON) +public class SubcontractorComunicationDAO extends GenericDAOHibernate + implements ISubcontractorComunicationDAO { + + @Override + public List getAll() { + return list(SubcontractorComunication.class); + } + + @Override + public List getAllNotReviewed(){ + Criteria c = getSession().createCriteria(SubcontractorComunication.class); + c.add(Restrictions.eq("reviewed", false)); + return c.list(); + } +} diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java new file mode 100644 index 000000000..495b28228 --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java @@ -0,0 +1,127 @@ +/* + * 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 . + */ + +package org.libreplan.business.planner.entities; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.hibernate.validator.NotNull; +import org.libreplan.business.common.BaseEntity; +import org.libreplan.business.externalcompanies.entities.ComunicationType; +import org.libreplan.business.qualityforms.entities.QualityFormItem; + +/** + * Entity {@link SubcontractorComunication}. + * + * @author Susana Montes Pedreira + */ +public class SubcontractorComunication extends BaseEntity { + + private SubcontractedTaskData subcontractedTaskData; + + private ComunicationType comunicationType; + + private Date comunicationDate; + + private Boolean reviewed = false; + + private List subcontratorComunicationValues = new ArrayList(); + + // Default constructor, needed by Hibernate + protected SubcontractorComunication() { + + } + + private SubcontractorComunication ( SubcontractedTaskData subcontractedTaskData, ComunicationType comunicationType, Date comunicationDate, Boolean reviewed){ + this.setSubcontractedTaskData(subcontractedTaskData); + this.setComunicationType(comunicationType); + this.setComunicationDate(comunicationDate); + this.setReviewed(reviewed); + } + + public static SubcontractorComunication create( + SubcontractedTaskData subcontractedTaskData, + ComunicationType comunicationType, Date comunicationDate, + Boolean reviewed) { + return new SubcontractorComunication(subcontractedTaskData, + comunicationType, comunicationDate, reviewed); + } + + public static SubcontractorComunication create() { + return new SubcontractorComunication(); + } + + public void setSubcontractedTaskData(SubcontractedTaskData subcontractedTaskData) { + this.subcontractedTaskData = subcontractedTaskData; + } + + @NotNull(message="subcontrated task data not specified") + public SubcontractedTaskData getSubcontractedTaskData() { + return subcontractedTaskData; + } + + public void setComunicationType(ComunicationType comunicationType) { + this.comunicationType = comunicationType; + } + + public ComunicationType getComunicationType() { + return comunicationType; + } + + public void setComunicationDate(Date comunicationDate) { + this.comunicationDate = comunicationDate; + } + + public Date getComunicationDate() { + return comunicationDate; + } + + public void setReviewed(Boolean reviewed) { + this.reviewed = reviewed; + } + + public Boolean getReviewed() { + return reviewed; + } + + public void setSubcontratorComunicationValues( + List subcontratorComunicationValues) { + this.subcontratorComunicationValues = subcontratorComunicationValues; + } + + public List getSubcontratorComunicationValues() { + return subcontratorComunicationValues; + } + + public SubcontractorComunicationValue getLastSubcontratorComunicationValues(){ + if (subcontratorComunicationValues.isEmpty()){ + return null; + } + return subcontratorComunicationValues.get(subcontratorComunicationValues.size()-1); + } + + public Date getLastSubcontratorComunicationValueDate(){ + SubcontractorComunicationValue value = getLastSubcontratorComunicationValues(); + return (value == null) ? null : value.getDate(); + } +} \ No newline at end of file diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java new file mode 100644 index 000000000..6b5f88b80 --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java @@ -0,0 +1,111 @@ +/* + * This file is part of NavalPlan + * + * 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 . + */ + +package org.libreplan.business.planner.entities; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.hibernate.validator.AssertTrue; +import org.libreplan.business.INewObject; + +/** + * Entity to represent each {@SubcontractorComunicationValue}. + * + * @author Susana Montes Pedreira + */ +public class SubcontractorComunicationValue implements INewObject { + + public final static String propertyDate = "date"; + + public final static String propertyProgress = "progress"; + + public static SubcontractorComunicationValue create() { + SubcontractorComunicationValue subcontractorComunicationValue = new SubcontractorComunicationValue(); + subcontractorComunicationValue.setNewObject(true); + return subcontractorComunicationValue; + } + + public static SubcontractorComunicationValue create(Date date, + BigDecimal progress) { + SubcontractorComunicationValue subcontractorComunicationValue = new SubcontractorComunicationValue( + date, progress); + subcontractorComunicationValue.setNewObject(true); + return subcontractorComunicationValue; + } + + public SubcontractorComunicationValue() { + + } + + public SubcontractorComunicationValue(Date date, BigDecimal progress) { + this.setDate(date); + this.setProgress(progress); + } + + private boolean newObject = false; + + private Date date; + + private BigDecimal progress; + + public boolean isNewObject() { + return newObject; + } + + private void setNewObject(boolean newObject) { + this.newObject = newObject; + } + + @SuppressWarnings("unused") + @AssertTrue(message = "progress should be greater than 0% and less than 100%") + public boolean checkConstraintQualityFormItemPercentage() { + if (getProgress() == null) { + return true; + } + return ((getProgress().compareTo(new BigDecimal(100).setScale(2)) <= 0) && (getProgress() + .compareTo(new BigDecimal(0).setScale(2)) > 0)); + } + + public void setDate(Date date) { + this.date = date; + } + + public Date getDate() { + return date; + } + + public void setProgress(BigDecimal progress) { + this.progress = progress; + } + + public BigDecimal getProgress() { + return progress; + } + + @Override + public String toString() { + String datetime = (date == null) ? "" : new SimpleDateFormat( + "dd/MM/yyyy HH:mm").format(date); + return progress.toString() + " - " + datetime; + } +} diff --git a/libreplan-business/src/main/resources/db.changelog-1.2.xml b/libreplan-business/src/main/resources/db.changelog-1.2.xml index ecb610e1b..99ea424a4 100644 --- a/libreplan-business/src/main/resources/db.changelog-1.2.xml +++ b/libreplan-business/src/main/resources/db.changelog-1.2.xml @@ -18,4 +18,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libreplan-business/src/main/resources/libreplan-business-spring-config.xml b/libreplan-business/src/main/resources/libreplan-business-spring-config.xml index b3f6ee43a..4fc2488df 100644 --- a/libreplan-business/src/main/resources/libreplan-business-spring-config.xml +++ b/libreplan-business/src/main/resources/libreplan-business-spring-config.xml @@ -81,6 +81,9 @@ org/libreplan/business/planner/entities/AdvanceConsolidations.hbm.xml + + org/libreplan/business/planner/entities/SubcontractorComunication.hbm.xml + org/libreplan/business/scenarios/entities/Scenarios.hbm.xml diff --git a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorComunication.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorComunication.hbm.xml new file mode 100644 index 000000000..015eb723e --- /dev/null +++ b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorComunication.hbm.xml @@ -0,0 +1,34 @@ + + + + + + + + + 100 + + + + + + + org.libreplan.business.externalcompanies.entities.ComunicationType + + + + + + + + + + + + + + + + + + diff --git a/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java b/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java new file mode 100644 index 000000000..5f95c4372 --- /dev/null +++ b/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java @@ -0,0 +1,254 @@ +/* + * This file is part of NavalPlan + * + * 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 . + */ + +package org.libreplan.business.test.planner.daos; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNotNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.fail; +import static org.libreplan.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE; +import static org.libreplan.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.UUID; + +import org.hibernate.SessionFactory; +import org.joda.time.LocalDate; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.libreplan.business.calendars.daos.IBaseCalendarDAO; +import org.libreplan.business.calendars.entities.BaseCalendar; +import org.libreplan.business.common.IAdHocTransactionService; +import org.libreplan.business.common.IOnTransaction; +import org.libreplan.business.common.daos.IConfigurationDAO; +import org.libreplan.business.common.exceptions.InstanceNotFoundException; +import org.libreplan.business.common.exceptions.ValidationException; +import org.libreplan.business.externalcompanies.daos.ICustomerComunicationDAO; +import org.libreplan.business.externalcompanies.daos.IExternalCompanyDAO; +import org.libreplan.business.externalcompanies.entities.ComunicationType; +import org.libreplan.business.externalcompanies.entities.CustomerComunication; +import org.libreplan.business.externalcompanies.entities.ExternalCompany; +import org.libreplan.business.orders.daos.IOrderDAO; +import org.libreplan.business.orders.entities.HoursGroup; +import org.libreplan.business.orders.entities.Order; +import org.libreplan.business.orders.entities.OrderLine; +import org.libreplan.business.orders.entities.SchedulingDataForVersion; +import org.libreplan.business.orders.entities.TaskSource; +import org.libreplan.business.orders.entities.TaskSource.TaskSourceSynchronization; +import org.libreplan.business.planner.daos.ISubcontractedTaskDataDAO; +import org.libreplan.business.planner.daos.ISubcontractorComunicationDAO; +import org.libreplan.business.planner.daos.ITaskElementDAO; +import org.libreplan.business.planner.daos.ITaskSourceDAO; +import org.libreplan.business.planner.entities.SubcontractedTaskData; +import org.libreplan.business.planner.entities.SubcontractorComunication; +import org.libreplan.business.planner.entities.Task; +import org.libreplan.business.scenarios.IScenarioManager; +import org.libreplan.business.scenarios.bootstrap.IScenariosBootstrap; +import org.libreplan.business.scenarios.entities.OrderVersion; +import org.libreplan.business.test.calendars.entities.BaseCalendarTest; +import org.libreplan.business.test.externalcompanies.daos.ExternalCompanyDAOTest; +import org.libreplan.business.workreports.entities.WorkReportLine; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; +import static org.junit.Assert.assertTrue; + +/** + * Tests for {@link SubcontractorComunication} + * + * @author Susana Montes Pedreira + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE, + BUSINESS_SPRING_CONFIG_TEST_FILE }) +@Transactional +public class SubcontractorComunicationDAOTest { + + @Autowired + ISubcontractorComunicationDAO subcontractorComunicationDAO; + + @Autowired + ISubcontractedTaskDataDAO subcontractedTaskDataDAO; + + @Autowired + IExternalCompanyDAO externalCompanyDAO; + + @Autowired + private ITaskElementDAO taskElementDAO; + + @Autowired + private IOrderDAO orderDAO; + + @Autowired + private ITaskSourceDAO taskSourceDAO; + + @Autowired + private SessionFactory sessionFactory; + + @Autowired + private IConfigurationDAO configurationDAO; + + @Autowired + private IScenarioManager scenarioManager; + + @Autowired + private IBaseCalendarDAO calendarDAO; + + @Autowired + private IScenariosBootstrap scenariosBootstrap; + + @Before + public void loadRequiredData() { + scenariosBootstrap.loadRequiredData(); + } + + private HoursGroup associatedHoursGroup; + + private ExternalCompany getSubcontractorExternalCompanySaved() { + ExternalCompany externalCompany = ExternalCompanyDAOTest + .createValidExternalCompany(); + externalCompany.setSubcontractor(true); + + externalCompanyDAO.save(externalCompany); + externalCompanyDAO.flush(); + sessionFactory.getCurrentSession().evict(externalCompany); + + externalCompany.dontPoseAsTransientObjectAnymore(); + + return externalCompany; + } + + private OrderLine createOrderLine() { + OrderLine orderLine = OrderLine.create(); + orderLine.setName("bla"); + orderLine.setCode("code-" + UUID.randomUUID()); + HoursGroup hoursGroup = new HoursGroup(); + hoursGroup.setCode("hours-group-code-" + UUID.randomUUID()); + orderLine.addHoursGroup(hoursGroup); + Order order = Order.create(); + OrderVersion orderVersion = ResourceAllocationDAOTest + .setupVersionUsing(scenarioManager, order); + order.setName("bla-" + UUID.randomUUID()); + order.setInitDate(new Date()); + order.setCode("code-" + UUID.randomUUID()); + order.useSchedulingDataFor(orderVersion); + order.add(orderLine); + + //add a basic calendar + BaseCalendar basicCalendar = BaseCalendarTest.createBasicCalendar(); + calendarDAO.save(basicCalendar); + order.setCalendar(basicCalendar); + + try { + orderDAO.save(order); + sessionFactory.getCurrentSession().flush(); + } catch (ValidationException e) { + throw new RuntimeException(e); + } + return orderLine; + } + + private Task createValidTask() { + associatedHoursGroup = new HoursGroup(); + associatedHoursGroup.setCode("hours-group-code-" + UUID.randomUUID()); + OrderLine orderLine = createOrderLine(); + orderLine.addHoursGroup(associatedHoursGroup); + OrderVersion orderVersion = ResourceAllocationDAOTest + .setupVersionUsing(scenarioManager, + orderLine.getOrder()); + orderLine.useSchedulingDataFor(orderVersion); + SchedulingDataForVersion schedulingDataForVersion = orderLine + .getCurrentSchedulingDataForVersion(); + TaskSource taskSource = TaskSource.create(schedulingDataForVersion, + Arrays.asList(associatedHoursGroup)); + TaskSourceSynchronization mustAdd = TaskSource.mustAdd(taskSource); + mustAdd.apply(TaskSource.persistTaskSources(taskSourceDAO)); + Task task = (Task) taskSource.getTask(); + return task; + } + + public SubcontractedTaskData createValidSubcontractedTaskData(String name) { + Task task = createValidTask(); + SubcontractedTaskData subcontractedTaskData = SubcontractedTaskData + .create(task); + subcontractedTaskData.setExternalCompany(getSubcontractorExternalCompanySaved()); + + task.setSubcontractedTaskData(subcontractedTaskData); + taskElementDAO.save(task); + taskElementDAO.flush(); + sessionFactory.getCurrentSession().evict(task); + sessionFactory.getCurrentSession().evict(subcontractedTaskData); + + subcontractedTaskDataDAO.save(subcontractedTaskData); + return subcontractedTaskData; + } + + public SubcontractorComunication createValidSubcontractorComunication(){ + SubcontractedTaskData subcontractedTaskData = createValidSubcontractedTaskData("Task A"); + Date comunicationDate = new Date(); + SubcontractorComunication subcontractorComunication = SubcontractorComunication + .create(subcontractedTaskData, ComunicationType.NEW_PROJECT, + comunicationDate, false); + return subcontractorComunication; + } + + @Test + public void testSubcontractorComunicationDAOInSpringContainer() { + assertNotNull(subcontractorComunicationDAO); + } + + @Test + public void testSaveCustomerComunication() { + SubcontractorComunication subcontractorComunication = createValidSubcontractorComunication(); + subcontractorComunicationDAO.save(subcontractorComunication); + assertTrue(subcontractorComunication.getId() != null); + } + + @Test + public void testRemoveCustomerComunication() + throws InstanceNotFoundException { + SubcontractorComunication customerComunication = createValidSubcontractorComunication(); + subcontractorComunicationDAO.save(customerComunication); + assertTrue(customerComunication.getId() != null); + subcontractorComunicationDAO.remove(customerComunication.getId()); + assertFalse(subcontractorComunicationDAO + .exists(customerComunication.getId())); + } + + @Test + public void testSaveCustomerComunicationWithoutSubcontratedTaskData() + throws InstanceNotFoundException { + SubcontractorComunication subcontractorComunication = createValidSubcontractorComunication(); + subcontractorComunication.setSubcontractedTaskData(null); + try { + subcontractorComunicationDAO.save(subcontractorComunication); + fail("It should throw an exception"); + } catch (ValidationException e) { + // Ok + } + } + +} \ No newline at end of file diff --git a/libreplan-business/src/test/resources/libreplan-business-spring-config-test.xml b/libreplan-business/src/test/resources/libreplan-business-spring-config-test.xml index c6ad39bd0..ca7a4fd12 100644 --- a/libreplan-business/src/test/resources/libreplan-business-spring-config-test.xml +++ b/libreplan-business/src/test/resources/libreplan-business-spring-config-test.xml @@ -87,6 +87,9 @@ org/libreplan/business/planner/entities/AdvanceConsolidations.hbm.xml + + org/libreplan/business/planner/entities/SubcontractorComunication.hbm.xml + org/libreplan/business/scenarios/entities/Scenarios.hbm.xml diff --git a/libreplan-webapp/src/test/resources/libreplan-webapp-spring-config-test.xml b/libreplan-webapp/src/test/resources/libreplan-webapp-spring-config-test.xml index 1072a2bcb..d440fb211 100644 --- a/libreplan-webapp/src/test/resources/libreplan-webapp-spring-config-test.xml +++ b/libreplan-webapp/src/test/resources/libreplan-webapp-spring-config-test.xml @@ -84,6 +84,9 @@ org/libreplan/business/planner/entities/AdvanceConsolidations.hbm.xml + + org/libreplan/business/planner/entities/SubcontractorComunication.hbm.xml + org/libreplan/business/scenarios/entities/Scenarios.hbm.xml From 7c6a16259bef1c03bcf5b9934593bc3556c20519 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Tue, 15 Nov 2011 09:52:29 +0100 Subject: [PATCH 09/88] use private visibility in constructors. --- .../entities/CustomerComunication.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java index ee598dbbb..030b52c3a 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java @@ -45,7 +45,12 @@ public class CustomerComunication extends BaseEntity{ private Order order; - public CustomerComunication() { + protected CustomerComunication() { + this.setComunicationDate(new Date()); + } + + private CustomerComunication(Date deadline) { + this.setDeadline(deadline); this.setComunicationDate(new Date()); } @@ -53,11 +58,6 @@ public class CustomerComunication extends BaseEntity{ return (CustomerComunication) create(new CustomerComunication()); } - public CustomerComunication(Date deadline) { - this.setDeadline(deadline); - this.setComunicationDate(new Date()); - } - public static CustomerComunication createToday(Date deadline) { return (CustomerComunication) create(new CustomerComunication(deadline)); } From 3329e856d73c434f90cf35820b38ef377201cc37 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Tue, 15 Nov 2011 10:02:31 +0100 Subject: [PATCH 10/88] renamed file FilterCustomerComunicationEnum to ICustomerComunicationModel FEA: ItEr75S30SubcontractorIncommingCommunicationsLists --- .../CustomerComunicationCRUDController.java | 10 +++--- .../CustomerComunicationModel.java | 33 +++++++++++++++---- ...nEnum.java => FilterComunicationEnum.java} | 6 ++-- .../ICustomerComunicationModel.java | 25 ++++++++++++-- 4 files changed, 58 insertions(+), 16 deletions(-) rename libreplan-webapp/src/main/java/org/libreplan/web/subcontract/{FilterCustomerComunicationEnum.java => FilterComunicationEnum.java} (88%) diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java index 1f5331211..ceab87024 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java @@ -88,15 +88,15 @@ public class CustomerComunicationCRUDController extends GenericForwardComposer { } } - public FilterCustomerComunicationEnum[] getFilterItems(){ - return FilterCustomerComunicationEnum.values(); + public FilterComunicationEnum[] getFilterItems(){ + return FilterComunicationEnum.values(); } - public FilterCustomerComunicationEnum getCurrentFilterItem() { + public FilterComunicationEnum getCurrentFilterItem() { return customerComunicationModel.getCurrentFilter(); } - public void setCurrentFilterItem(FilterCustomerComunicationEnum selected) { + public void setCurrentFilterItem(FilterComunicationEnum selected) { customerComunicationModel.setCurrentFilter(selected); // update the customer comunication list @@ -110,7 +110,7 @@ public class CustomerComunicationCRUDController extends GenericForwardComposer { } public List getCustomerComunications() { - FilterCustomerComunicationEnum currentFilter = customerComunicationModel.getCurrentFilter(); + FilterComunicationEnum currentFilter = customerComunicationModel.getCurrentFilter(); switch(currentFilter){ case ALL: return customerComunicationModel.getCustomerAllComunications(); case NOT_REVIEWED: return customerComunicationModel.getCustomerComunicationWithoutReviewed(); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java index bc8f6ede9..c0423d6a2 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java @@ -1,3 +1,24 @@ +/* + * 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 . + */ + package org.libreplan.web.subcontract; import java.util.List; @@ -19,7 +40,7 @@ public class CustomerComunicationModel implements ICustomerComunicationModel{ @Autowired private ICustomerComunicationDAO customerComunicationDAO; - private FilterCustomerComunicationEnum currentFilter = FilterCustomerComunicationEnum.NOT_REVIEWED; + private FilterComunicationEnum currentFilter = FilterComunicationEnum.NOT_REVIEWED; @Override @Transactional @@ -31,7 +52,7 @@ public class CustomerComunicationModel implements ICustomerComunicationModel{ @Transactional public List getCustomerAllComunications(){ List list = customerComunicationDAO.getAll(); - forceLoadAssociatedOrder(list); + forceLoadAssociatedData(list); return list; } @@ -39,11 +60,11 @@ public class CustomerComunicationModel implements ICustomerComunicationModel{ @Transactional public List getCustomerComunicationWithoutReviewed(){ List list = customerComunicationDAO.getAllNotReviewed(); - forceLoadAssociatedOrder(list); + forceLoadAssociatedData(list); return list; } - private void forceLoadAssociatedOrder(List customerComunicationList){ + private void forceLoadAssociatedData(List customerComunicationList){ if (customerComunicationList != null) { for (CustomerComunication customerComunication : customerComunicationList) { customerComunication.getOrder().getName(); @@ -52,12 +73,12 @@ public class CustomerComunicationModel implements ICustomerComunicationModel{ } @Override - public void setCurrentFilter(FilterCustomerComunicationEnum currentFilter) { + public void setCurrentFilter(FilterComunicationEnum currentFilter) { this.currentFilter = currentFilter; } @Override - public FilterCustomerComunicationEnum getCurrentFilter() { + public FilterComunicationEnum getCurrentFilter() { return currentFilter; } } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterCustomerComunicationEnum.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterComunicationEnum.java similarity index 88% rename from libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterCustomerComunicationEnum.java rename to libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterComunicationEnum.java index 89681f5fe..cdd323696 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterCustomerComunicationEnum.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterComunicationEnum.java @@ -26,7 +26,7 @@ package org.libreplan.web.subcontract; * * @author Susana Montes Pedreira */ - public enum FilterCustomerComunicationEnum { + public enum FilterComunicationEnum { ALL(_("All")), NOT_REVIEWED(_("Not Reviewed")); @@ -39,11 +39,11 @@ package org.libreplan.web.subcontract; private String displayName; - private FilterCustomerComunicationEnum(String displayName) { + private FilterComunicationEnum(String displayName) { this.displayName = displayName; } - public static FilterCustomerComunicationEnum getDefault() { + public static FilterComunicationEnum getDefault() { return ALL; } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java index a80cdbf20..a6ecdd3d0 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java @@ -1,3 +1,24 @@ +/* + * 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 . + */ + package org.libreplan.web.subcontract; import java.util.List; @@ -12,8 +33,8 @@ public interface ICustomerComunicationModel { List getCustomerAllComunications(); - void setCurrentFilter(FilterCustomerComunicationEnum currentFilter); + void setCurrentFilter(FilterComunicationEnum currentFilter); - FilterCustomerComunicationEnum getCurrentFilter(); + FilterComunicationEnum getCurrentFilter(); } From 1e214e328daf1a706c4d4c9b5805e9fa68eac124 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Tue, 15 Nov 2011 10:04:13 +0100 Subject: [PATCH 11/88] add new communication type 'Report advance' FEA: ItEr75S30SubcontractorIncommingCommunicationsLists --- .../business/externalcompanies/entities/ComunicationType.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java index f53bb5fb4..d94038ca6 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java @@ -30,7 +30,8 @@ import static org.libreplan.business.i18n.I18nHelper._; */ public enum ComunicationType { - NEW_PROJECT(_("New project")); + NEW_PROJECT(_("New project")), + REPORT_ADVANCE(_("Report advance")); private String description; From c92de60de2656cc47a34607072ef5e14a7e0a5c2 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Tue, 15 Nov 2011 10:13:02 +0100 Subject: [PATCH 12/88] Create a list with all the communications received from subcontractors FEA: ItEr75S30SubcontractorIncommingCommunicationsLists --- .../daos/ISubcontractedTaskDataDAO.java | 4 + .../daos/SubcontractedTaskDataDAO.java | 17 ++ .../web/common/CustomMenuController.java | 1 + .../web/common/converters/TaskConverter.java | 69 +++++ .../converters/TaskElementConverter.java | 68 +++++ .../AdvanceAssignmentPlanningController.java | 3 +- .../order/OrderPlanningController.java | 26 +- .../planner/tabs/IGlobalViewEntryPoints.java | 5 + .../tabs/MultipleTabsPlannerController.java | 10 + .../taskedition/EditTaskController.java | 1 - .../ISubcontractorComunicationModel.java | 49 ++++ ...bcontractorComunicationCRUDController.java | 239 ++++++++++++++++++ .../SubcontractorComunicationModel.java | 128 ++++++++++ .../impl/ReportAdvancesServiceREST.java | 60 +++++ .../subcontract/customerComunications.zul | 2 +- .../subcontractorComunications.zul | 79 ++++++ .../ReportAdvancesServiceTest.java | 147 ++++++++++- 17 files changed, 897 insertions(+), 11 deletions(-) create mode 100644 libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskConverter.java create mode 100644 libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskElementConverter.java create mode 100644 libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorComunicationModel.java create mode 100644 libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java create mode 100644 libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java create mode 100644 libreplan-webapp/src/main/webapp/subcontract/subcontractorComunications.zul diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractedTaskDataDAO.java b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractedTaskDataDAO.java index 265d77030..86da35b8a 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractedTaskDataDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractedTaskDataDAO.java @@ -24,6 +24,8 @@ package org.libreplan.business.planner.daos; import java.util.List; import org.libreplan.business.common.daos.IGenericDAO; +import org.libreplan.business.common.exceptions.InstanceNotFoundException; +import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.planner.entities.SubcontractedTaskData; /** @@ -42,4 +44,6 @@ public interface ISubcontractedTaskDataDAO extends List getAllForMasterScenario(); + SubcontractedTaskData getSubcontratedTaskDataByOrderElement( + OrderElement orderElement) throws InstanceNotFoundException; } \ No newline at end of file diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractedTaskDataDAO.java b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractedTaskDataDAO.java index 757960f71..61b53651c 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractedTaskDataDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractedTaskDataDAO.java @@ -24,10 +24,13 @@ package org.libreplan.business.planner.daos; import java.util.ArrayList; import java.util.List; +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.libreplan.business.common.daos.GenericDAOHibernate; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.orders.entities.Order; import org.libreplan.business.orders.entities.OrderElement; +import org.libreplan.business.orders.entities.TaskSource; import org.libreplan.business.planner.entities.SubcontractedTaskData; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.planner.entities.TaskElement; @@ -99,4 +102,18 @@ public class SubcontractedTaskDataDAO extends return result; } + @Override + @Transactional(readOnly = true) + public SubcontractedTaskData getSubcontratedTaskDataByOrderElement( + OrderElement orderElement) throws InstanceNotFoundException { + Criteria c = getSession().createCriteria(TaskElement.class) + .createCriteria("taskSource","ts") + .createCriteria("schedulingData","data") + .add(Restrictions.eq("data.orderElement",orderElement)); + + TaskElement taskElement = (TaskElement) c.uniqueResult(); + return (taskElement != null && taskElement.isSubcontracted()) ? ((Task) taskElement) + .getSubcontractedTaskData() : null; + } + } \ No newline at end of file diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java index 646c4e6a4..b7fcc8020 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java @@ -297,6 +297,7 @@ public class CustomMenuController extends Div implements IMenuItemsRegister { } resourcesItems.add(subItem(_("Subcontracting"), "/subcontract/subcontractedTasks.zul", "", subItem(_("Subcontracted Tasks"), "/subcontract/subcontractedTasks.zul", ""), + subItem(_("Incoming communications from subcontractors"), "/subcontract/subcontractorComunications.zul",""), subItem(_("Report Progress"), "/subcontract/reportAdvances.zul", ""), subItem(_("Customer subcontracted projects communications"), "/subcontract/customerComunications.zul",""))); topItem(_("Resources"), "/resources/worker/worker.zul", "", resourcesItems); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskConverter.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskConverter.java new file mode 100644 index 000000000..b8996cff7 --- /dev/null +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskConverter.java @@ -0,0 +1,69 @@ +/* + * 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 . + */ + +package org.libreplan.web.common.converters; + +import org.libreplan.business.common.exceptions.InstanceNotFoundException; +import org.libreplan.business.planner.daos.ITaskElementDAO; +import org.libreplan.business.planner.entities.Task; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * A {@link IConverter} for {@link Task}
+ * @author Susana Montes Pedreira + */ +@Component +@Scope(BeanDefinition.SCOPE_SINGLETON) +public class TaskConverter implements IConverter { + + @Autowired + private ITaskElementDAO taskDAO; + + @Override + @Transactional(readOnly = true) + public Task asObject(String stringRepresentation) { + try { + return (Task) taskDAO.find(Long.parseLong(stringRepresentation)); + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + + @Override + public String asString(Task entity) { + return entity.getId() + ""; + } + + @Override + public String asStringUngeneric(Object entity) { + return asString((Task) entity); + } + + @Override + public Class getType() { + return Task.class; + } + +} diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskElementConverter.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskElementConverter.java new file mode 100644 index 000000000..8cbf74f7c --- /dev/null +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskElementConverter.java @@ -0,0 +1,68 @@ +/* + * This file is part of LibrePlan + * + * Copyright (C) 2010-2011 Wireless Galicia, 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 . + */ + +package org.libreplan.web.common.converters; + +import org.libreplan.business.common.exceptions.InstanceNotFoundException; +import org.libreplan.business.planner.daos.ITaskElementDAO; +import org.libreplan.business.planner.entities.TaskElement; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * A {@link IConverter} for {@link TaskElement}
+ * @author Susana Montes Pedreira + */ + +@Component +@Scope(BeanDefinition.SCOPE_SINGLETON) +public class TaskElementConverter implements IConverter { + + @Autowired + private ITaskElementDAO taskElementDAO; + + @Override + public String asString(TaskElement entity) { + return entity.getId() + ""; + } + + @Override + public Class getType() { + return TaskElement.class; + } + + @Override + public String asStringUngeneric(Object entity) { + return asString((TaskElement) entity); + } + + @Override + @Transactional(readOnly = true) + public TaskElement asObject(String stringRepresentation) { + long id = Long.parseLong(stringRepresentation); + try { + return taskElementDAO.find(id); + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + } \ No newline at end of file diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/advances/AdvanceAssignmentPlanningController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/advances/AdvanceAssignmentPlanningController.java index 3ae28ea5b..fee5a0410 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/advances/AdvanceAssignmentPlanningController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/advances/AdvanceAssignmentPlanningController.java @@ -75,7 +75,6 @@ public class AdvanceAssignmentPlanningController extends GenericForwardComposer public void showWindow(IContextWithPlannerTask context, TaskElement task, PlanningState planningState) { - this.context = context; advanceAssignmentPlanningModel.initAdvancesFor(task, context, planningState); @@ -84,7 +83,7 @@ public class AdvanceAssignmentPlanningController extends GenericForwardComposer try { window.setTitle(getTitle()); Util.reloadBindings(window); - this.window.doModal(); + this.window.setMode("modal"); } catch (SuspendNotAllowedException e) { throw new RuntimeException(e); } catch (InterruptedException e) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java index 089cbfa0f..f061776ad 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java @@ -63,6 +63,7 @@ import org.zkoss.ganttz.util.ProfilingLogFactory; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.WrongValueException; import org.zkoss.zk.ui.util.Composer; +import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Checkbox; import org.zkoss.zul.Constraint; import org.zkoss.zul.Datebox; @@ -108,6 +109,8 @@ public class OrderPlanningController implements Composer { @Autowired private OrderCRUDController orderCRUDController; + private GenericForwardComposer currentControllerToShow; + private Order order; private TaskElement task; @@ -214,6 +217,7 @@ public class OrderPlanningController implements Composer { + (System.currentTimeMillis() - time) + " ms"); planner.updateSelectedZoomLevel(); showResorceAllocationIfIsNeeded(); + } } @@ -362,9 +366,17 @@ public class OrderPlanningController implements Composer { if ((foundTask != null) && (foundTaskElement != null)) { IContextWithPlannerTask contextTask = ContextWithPlannerTask .create(context, foundTask); - this.editTaskController - .showEditFormResourceAllocation(contextTask, - foundTaskElement, model.getPlanningState()); + if (this.getCurrentControllerToShow().equals( + getEditTaskController())) { + this.editTaskController.showEditFormResourceAllocation( + contextTask, foundTaskElement, + model.getPlanningState()); + } else if (this.getCurrentControllerToShow().equals( + this.getAdvanceAssignmentPlanningController())) { + getAdvanceAssignmentPlanningController().showWindow( + contextTask, foundTaskElement, + model.getPlanningState()); + } } } } @@ -377,4 +389,12 @@ public class OrderPlanningController implements Composer { return advanceAssignmentPlanningController; } + public void setCurrentControllerToShow(GenericForwardComposer currentControllerToShow) { + this.currentControllerToShow = currentControllerToShow; + } + + public GenericForwardComposer getCurrentControllerToShow() { + return currentControllerToShow; + } + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/IGlobalViewEntryPoints.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/IGlobalViewEntryPoints.java index 7fe51aa39..3e8ea69cc 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/IGlobalViewEntryPoints.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/IGlobalViewEntryPoints.java @@ -22,6 +22,8 @@ package org.libreplan.web.planner.tabs; import org.libreplan.business.orders.entities.Order; import org.libreplan.business.orders.entities.OrderElement; +import org.libreplan.business.planner.entities.Task; +import org.libreplan.business.planner.entities.TaskElement; import org.libreplan.business.templates.entities.OrderTemplate; import org.libreplan.web.common.entrypoints.EntryPoint; import org.libreplan.web.common.entrypoints.EntryPoints; @@ -65,4 +67,7 @@ public interface IGlobalViewEntryPoints { @EntryPoint("create_order_from_template") void goToCreateotherOrderFromTemplate(OrderTemplate template); + + @EntryPoint({"order","task"}) + void goToAdvanceTask(Order order,TaskElement task); } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/MultipleTabsPlannerController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/MultipleTabsPlannerController.java index b3874e698..78e4b80d2 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/MultipleTabsPlannerController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/MultipleTabsPlannerController.java @@ -216,6 +216,7 @@ public class MultipleTabsPlannerController implements Composer, public void goToTaskResourceAllocation(Order order, TaskElement task) { orderPlanningController.setShowedTask(task); + orderPlanningController.setCurrentControllerToShow(orderPlanningController.getEditTaskController()); getTabsRegistry() .show(planningTab, changeModeTo(order)); } @@ -438,6 +439,15 @@ public class MultipleTabsPlannerController implements Composer, orderCRUDController.showCreateFormFromTemplate(template); } + @Override + public void goToAdvanceTask(Order order,TaskElement task) { + orderPlanningController.setShowedTask(task); + orderPlanningController + .setCurrentControllerToShow(orderPlanningController + .getAdvanceAssignmentPlanningController()); + getTabsRegistry().show(planningTab, changeModeTo(order)); + } + private IBeforeShowAction changeModeTo(final Order order) { return new IBeforeShowAction() { @Override diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/taskedition/EditTaskController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/taskedition/EditTaskController.java index babf31491..0fc4d1c98 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/taskedition/EditTaskController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/taskedition/EditTaskController.java @@ -185,7 +185,6 @@ public class EditTaskController extends GenericForwardComposer { planningState, messagesForUser); showLimitingResourcesTab(); } - } private void showSubcontractTab() { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorComunicationModel.java new file mode 100644 index 000000000..a69ede783 --- /dev/null +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorComunicationModel.java @@ -0,0 +1,49 @@ +/* + * This file is part of NavalPlan + * + * 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 . + */ + +package org.libreplan.web.subcontract; + +import java.util.List; + +import org.libreplan.business.orders.entities.Order; +import org.libreplan.business.orders.entities.OrderElement; +import org.libreplan.business.planner.entities.SubcontractedTaskData; +import org.libreplan.business.planner.entities.SubcontractorComunication; + +public interface ISubcontractorComunicationModel { + + void confirmSave(SubcontractorComunication customerComunication); + + List getSubcontractorComunicationWithoutReviewed(); + + List getSubcontractorAllComunications(); + + void setCurrentFilter(FilterComunicationEnum currentFilter); + + FilterComunicationEnum getCurrentFilter(); + + String getOrderCode(SubcontractedTaskData subcontractedTaskData); + + String getOrderName(SubcontractedTaskData subcontractedTaskData); + + Order getOrder(OrderElement orderElement); + +} diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java new file mode 100644 index 000000000..0cf449f11 --- /dev/null +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java @@ -0,0 +1,239 @@ +/* + * This file is part of NavalPlan + * + * 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 . + */ + +package org.libreplan.web.subcontract; + +import static org.libreplan.web.I18nHelper._; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import javax.annotation.Resource; + +import org.apache.commons.logging.LogFactory; +import org.libreplan.business.common.exceptions.ValidationException; +import org.libreplan.business.externalcompanies.entities.ComunicationType; +import org.libreplan.business.orders.entities.Order; +import org.libreplan.business.orders.entities.OrderElement; +import org.libreplan.business.planner.entities.SubcontractedTaskData; +import org.libreplan.business.planner.entities.SubcontractorComunication; +import org.libreplan.business.planner.entities.SubcontractorComunicationValue; +import org.libreplan.business.planner.entities.Task; +import org.libreplan.business.planner.entities.TaskElement; +import org.libreplan.web.common.IMessagesForUser; +import org.libreplan.web.common.MessagesForUser; +import org.libreplan.web.common.Util; +import org.libreplan.web.planner.tabs.IGlobalViewEntryPoints; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Button; +import org.zkoss.zul.Checkbox; +import org.zkoss.zul.Grid; +import org.zkoss.zul.Label; +import org.zkoss.zul.Messagebox; +import org.zkoss.zul.Popup; +import org.zkoss.zul.Row; +import org.zkoss.zul.RowRenderer; +import org.zkoss.zul.SimpleListModel; + +/** + * Controller for CRUD actions over a {@link SubcontractorComunication} + * + * @author Susana Montes Pedreira + */ +@SuppressWarnings("serial") +public class SubcontractorComunicationCRUDController extends GenericForwardComposer { + + private static final org.apache.commons.logging.Log LOG = LogFactory + .getLog(SubcontractorComunicationCRUDController.class); + + private ISubcontractorComunicationModel subcontractorComunicationModel; + + private SubcontractorComunicationRenderer subcontractorComunicationRenderer = new SubcontractorComunicationRenderer();; + + protected IMessagesForUser messagesForUser; + + private Component messagesContainer; + + private Grid listing; + + private Grid listingValues; + + private Label labelValue; + + private Popup pp; + + @Resource + private IGlobalViewEntryPoints globalView; + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + comp.setAttribute("controller", this); + messagesForUser = new MessagesForUser(messagesContainer); + } + + public void goToEdit(SubcontractorComunication subcontractorComunication) { + if(subcontractorComunication != null){ + TaskElement task = subcontractorComunication.getSubcontractedTaskData().getTask(); + OrderElement orderElement = task.getOrderElement(); + Order order = subcontractorComunicationModel.getOrder(orderElement); + globalView.goToAdvanceTask(order,task); + } + } + + public FilterComunicationEnum[] getFilterItems(){ + return FilterComunicationEnum.values(); + } + + public FilterComunicationEnum getCurrentFilterItem() { + return subcontractorComunicationModel.getCurrentFilter(); + } + + public void setCurrentFilterItem(FilterComunicationEnum selected) { + subcontractorComunicationModel.setCurrentFilter(selected); + + // update the subcontractor comunication list + listing.setModel(new SimpleListModel(getSubcontractorComunications())); + listing.invalidate(); + } + + protected void save(SubcontractorComunication subcontractorComunication) + throws ValidationException { + subcontractorComunicationModel.confirmSave(subcontractorComunication); + } + + public List getSubcontractorComunications() { + FilterComunicationEnum currentFilter = subcontractorComunicationModel.getCurrentFilter(); + switch(currentFilter){ + case ALL: return subcontractorComunicationModel.getSubcontractorAllComunications(); + case NOT_REVIEWED: return subcontractorComunicationModel.getSubcontractorComunicationWithoutReviewed(); + default: return subcontractorComunicationModel.getSubcontractorAllComunications(); + } + } + + public SubcontractorComunicationRenderer getSubcontractorComunicationRenderer() { + return subcontractorComunicationRenderer; + } + + private class SubcontractorComunicationRenderer implements + RowRenderer { + + @Override + public void render(Row row, Object data) { + SubcontractorComunication subcontractorComunication = (SubcontractorComunication) data; + row.setValue(subcontractorComunication); + + appendLabel(row, subcontractorComunication.getComunicationType().toString()); + appendLabel(row, subcontractorComunication.getSubcontractedTaskData().getTask().getName()); + appendLabel(row, getOrderName(subcontractorComunication.getSubcontractedTaskData())); + appendLabel(row, getOrderCode(subcontractorComunication.getSubcontractedTaskData())); + appendLabel(row, subcontractorComunication.getSubcontractedTaskData().getExternalCompany().getName()); + appendLabel(row, toString(subcontractorComunication.getComunicationDate())); + appendLabelWitTooltip(row,subcontractorComunication); + appendCheckbox(row, subcontractorComunication); + appendOperations(row, subcontractorComunication); + } + + private String toString(Date date) { + if (date == null) { + return ""; + } + + return new SimpleDateFormat("dd/MM/yyyy HH:mm").format(date); + } + + private String getOrderCode(SubcontractedTaskData subcontractedTaskData) { + return subcontractorComunicationModel.getOrderCode(subcontractedTaskData); + } + + private String getOrderName(SubcontractedTaskData subcontractedTaskData) { + return subcontractorComunicationModel.getOrderName(subcontractedTaskData); + } + + private String getLastValue( + SubcontractorComunication subcontractorComunication) { + SubcontractorComunicationValue value = subcontractorComunication + .getLastSubcontratorComunicationValues(); + return (value != null) ? value.toString() : ""; + } + + private void appendLabel(Row row, String label) { + row.appendChild(new Label(label)); + } + + private void appendLabelWitTooltip(final Row row,final SubcontractorComunication subcontractorComunication) { + String lastValue = getLastValue(subcontractorComunication); + final Label compLabel = new Label(lastValue); + + compLabel.setTooltip(pp); + compLabel.addEventListener(Events.ON_MOUSE_OVER, + new EventListener() { + @Override + public void onEvent(Event arg0) throws Exception { + List model = subcontractorComunication + .getSubcontratorComunicationValues(); + listingValues.setModel(new SimpleListModel(model)); + listingValues.invalidate(); + } + }); + row.appendChild(compLabel); + } + + private void appendCheckbox(Row row, + final SubcontractorComunication subcontractorComunication) { + final Checkbox checkBoxReviewed = new Checkbox(); + checkBoxReviewed.setChecked(subcontractorComunication.getReviewed()); + + checkBoxReviewed.addEventListener(Events.ON_CHECK, + new EventListener() { + + @Override + public void onEvent(Event arg0) throws Exception { + subcontractorComunication.setReviewed(checkBoxReviewed.isChecked()); + save(subcontractorComunication); + } + + }); + + row.appendChild(checkBoxReviewed); + } + + private void appendOperations(Row row, + final SubcontractorComunication subcontractorComunication) { + Button buttonEdit = new Button(_("edit")); + buttonEdit.addEventListener(Events.ON_CLICK, new EventListener() { + + @Override + public void onEvent(Event arg0) throws Exception { + goToEdit(subcontractorComunication); + } + + }); + row.appendChild(buttonEdit); + } + } + +} \ No newline at end of file diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java new file mode 100644 index 000000000..ff62a0f60 --- /dev/null +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java @@ -0,0 +1,128 @@ +/* + * This file is part of NavalPlan + * + * 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 . + */ + +package org.libreplan.web.subcontract; + +import java.util.List; + +import org.libreplan.business.orders.daos.IOrderDAO; +import org.libreplan.business.orders.entities.Order; +import org.libreplan.business.orders.entities.OrderElement; +import org.libreplan.business.planner.daos.ISubcontractorComunicationDAO; +import org.libreplan.business.planner.entities.SubcontractedTaskData; +import org.libreplan.business.planner.entities.SubcontractorComunication; +import org.libreplan.business.planner.entities.SubcontractorComunicationValue; +import org.libreplan.business.planner.entities.Task; +import org.libreplan.web.common.concurrentdetection.OnConcurrentModification; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Scope(BeanDefinition.SCOPE_PROTOTYPE) +@OnConcurrentModification(goToPage = "/subcontract/subcontractorComunication.zul") +public class SubcontractorComunicationModel implements ISubcontractorComunicationModel{ + + @Autowired + private ISubcontractorComunicationDAO subcontractorComunicationDAO; + + @Autowired + IOrderDAO orderDAO; + + private FilterComunicationEnum currentFilter = FilterComunicationEnum.NOT_REVIEWED; + + @Override + @Transactional + public void confirmSave(SubcontractorComunication subcontractorComunication){ + subcontractorComunicationDAO.save(subcontractorComunication); + } + + @Override + @Transactional + public List getSubcontractorAllComunications(){ + List list = subcontractorComunicationDAO.getAll(); + forceLoadAssociatedData(list); + return list; + } + + @Override + @Transactional + public List getSubcontractorComunicationWithoutReviewed(){ + List list = subcontractorComunicationDAO.getAllNotReviewed(); + forceLoadAssociatedData(list); + return list; + } + + private void forceLoadAssociatedData(List subcontractorComunicationList){ + if (subcontractorComunicationList != null) { + for (SubcontractorComunication subcontractorComunication : subcontractorComunicationList) { + subcontractorComunication.getSubcontractedTaskData().getExternalCompany().getName(); + subcontractorComunication.getSubcontractedTaskData().getTask().getName(); + subcontractorComunication.getSubcontractedTaskData().getTask().getOrderElement().getName(); + subcontractorComunication.getLastSubcontratorComunicationValues().getDate(); + } + } + } + + private void forceLoadAssociatedDataValue(List subcontractorComunicationValueList){ + if (subcontractorComunicationValueList != null) { + for (SubcontractorComunicationValue value : subcontractorComunicationValueList) { + value.getDate(); + } + } + } + + @Override + @Transactional(readOnly = true) + public String getOrderCode(SubcontractedTaskData subcontractedTaskData) { + Task task = subcontractedTaskData.getTask(); + OrderElement orderElement = orderDAO.loadOrderAvoidingProxyFor(task + .getOrderElement()); + return orderElement.getOrder().getCode(); + } + + @Override + @Transactional(readOnly = true) + public String getOrderName(SubcontractedTaskData subcontractedTaskData) { + Task task = subcontractedTaskData.getTask(); + OrderElement orderElement = orderDAO.loadOrderAvoidingProxyFor(task + .getOrderElement()); + return orderElement.getOrder().getName(); + } + + @Override + public void setCurrentFilter(FilterComunicationEnum currentFilter) { + this.currentFilter = currentFilter; + } + + @Override + public FilterComunicationEnum getCurrentFilter() { + return currentFilter; + } + + @Override + @Transactional(readOnly = true) + public Order getOrder(OrderElement orderElement) { + return (orderDAO.loadOrderAvoidingProxyFor(orderElement)).getOrder(); + } +} \ No newline at end of file diff --git a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java index 030218bd9..7def9bab2 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java +++ b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java @@ -24,12 +24,15 @@ package org.libreplan.ws.subcontract.impl; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.List; +import java.util.Set; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; +import javax.xml.datatype.XMLGregorianCalendar; import org.apache.commons.lang.StringUtils; import org.libreplan.business.advance.bootstrap.PredefinedAdvancedTypes; @@ -41,11 +44,18 @@ import org.libreplan.business.advance.exceptions.DuplicateValueTrueReportGlobalA import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.common.exceptions.ValidationException; import org.libreplan.business.externalcompanies.daos.IExternalCompanyDAO; +import org.libreplan.business.externalcompanies.entities.ComunicationType; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.orders.daos.IOrderElementDAO; import org.libreplan.business.orders.entities.Order; import org.libreplan.business.orders.entities.OrderElement; +import org.libreplan.business.planner.daos.ISubcontractedTaskDataDAO; +import org.libreplan.business.planner.daos.ISubcontractorComunicationDAO; +import org.libreplan.business.planner.entities.SubcontractedTaskData; +import org.libreplan.business.planner.entities.SubcontractorComunication; +import org.libreplan.business.planner.entities.SubcontractorComunicationValue; +import org.libreplan.business.planner.entities.Task; import org.libreplan.business.scenarios.bootstrap.PredefinedScenarios; import org.libreplan.business.scenarios.entities.OrderVersion; import org.libreplan.business.scenarios.entities.Scenario; @@ -76,6 +86,12 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService { @Autowired private IOrderElementDAO orderElementDAO; + @Autowired + private ISubcontractedTaskDataDAO subcontractedTaskDataDAO; + + @Autowired + private ISubcontractorComunicationDAO subcontractorComunicationDAO; + @Autowired private IOrderDAO orderDAO; @@ -190,6 +206,17 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService { orderElement.validate(); orderElementDAO.save(orderElement); + + /* + * If the order element is subcontrated then create the + * subcontrated comunication for the subcontrated task data to + * which the order element belongs. + */ + createSubcontractorComunication( + orderElement, + orderElementWithAdvanceMeasurementsDTO.advanceMeasurements); + + } catch (ValidationException e) { instanceConstraintViolationsDTO = ConstraintViolationConverter .toDTO(Util.generateInstanceId(1, @@ -211,6 +238,39 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService { instanceConstraintViolationsList); } + public void createSubcontractorComunication(OrderElement orderElement, + Set advanceMeasurementDTOs) + throws InstanceNotFoundException { + if (orderElement != null + && orderElement.getTaskSource() != null + && orderElement.getTaskSource().getTask().isSubcontracted()){ + Task task = (Task) orderElement.getTaskSource().getTask(); + SubcontractedTaskData subcontractedTaskData = task + .getSubcontractedTaskData(); + if (subcontractedTaskData != null) { + SubcontractorComunication subcontractorComunication = SubcontractorComunication + .create(subcontractedTaskData, + ComunicationType.REPORT_ADVANCE, new Date(), + false); + + for (AdvanceMeasurementDTO advanceMeasurementDTO : advanceMeasurementDTOs) { + // add subcontractorComunicationValue + addSubcontractorComunicationValue(advanceMeasurementDTO, + subcontractorComunication); + } + subcontractorComunicationDAO.save(subcontractorComunication); + } + } + } + + private void addSubcontractorComunicationValue(AdvanceMeasurementDTO advanceMeasurementDTO, SubcontractorComunication subcontractorComunication ){ + Date dateValue = DateConverter.toDate(advanceMeasurementDTO.date); + SubcontractorComunicationValue value = SubcontractorComunicationValue + .create(dateValue, advanceMeasurementDTO.value); + subcontractorComunication.getSubcontratorComunicationValues() + .add(value); + } + private void updateAdvancePercentage(OrderVersion orderVersion, OrderElement orderElement) { orderElement.useSchedulingDataFor(orderVersion); diff --git a/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul b/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul index 79c08b6c7..df788525a 100644 --- a/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul +++ b/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul @@ -19,7 +19,7 @@ along with this program. If not, see . --> - + diff --git a/libreplan-webapp/src/main/webapp/subcontract/subcontractorComunications.zul b/libreplan-webapp/src/main/webapp/subcontract/subcontractorComunications.zul new file mode 100644 index 000000000..ea5aaa381 --- /dev/null +++ b/libreplan-webapp/src/main/webapp/subcontract/subcontractorComunications.zul @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java b/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java index 384d1ae1a..1838d8bdc 100644 --- a/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java +++ b/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java @@ -36,6 +36,7 @@ import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -54,13 +55,26 @@ import org.libreplan.business.advance.entities.DirectAdvanceAssignment; import org.libreplan.business.common.IAdHocTransactionService; import org.libreplan.business.common.IOnTransaction; import org.libreplan.business.common.daos.IConfigurationDAO; +import org.libreplan.business.common.daos.IGenericDAO; +import org.libreplan.business.common.entities.Configuration; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.externalcompanies.daos.IExternalCompanyDAO; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.orders.daos.IOrderDAO; +import org.libreplan.business.orders.daos.IOrderElementDAO; +import org.libreplan.business.orders.entities.HoursGroup; import org.libreplan.business.orders.entities.Order; import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.orders.entities.OrderLine; +import org.libreplan.business.orders.entities.SchedulingDataForVersion; +import org.libreplan.business.orders.entities.TaskSource; +import org.libreplan.business.orders.entities.TaskSource.TaskSourceSynchronization; +import org.libreplan.business.planner.daos.ISubcontractedTaskDataDAO; +import org.libreplan.business.planner.daos.ISubcontractorComunicationDAO; +import org.libreplan.business.planner.daos.ITaskElementDAO; +import org.libreplan.business.planner.daos.ITaskSourceDAO; +import org.libreplan.business.planner.entities.SubcontractedTaskData; +import org.libreplan.business.planner.entities.Task; import org.libreplan.business.scenarios.IScenarioManager; import org.libreplan.business.scenarios.entities.OrderVersion; import org.libreplan.web.orders.OrderModelTest; @@ -70,6 +84,7 @@ import org.libreplan.ws.subcontract.api.IReportAdvancesService; import org.libreplan.ws.subcontract.api.OrderElementWithAdvanceMeasurementsDTO; import org.libreplan.ws.subcontract.api.OrderElementWithAdvanceMeasurementsListDTO; import org.springframework.beans.factory.annotation.Autowired; +import org.libreplan.business.planner.entities.SubcontractorComunication; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; @@ -122,6 +137,9 @@ public class ReportAdvancesServiceTest { @Autowired private IOrderDAO orderDAO; + @Autowired + private IOrderElementDAO orderElementDAO; + @Autowired private IConfigurationDAO configurationDAO; @@ -134,8 +152,25 @@ public class ReportAdvancesServiceTest { @Autowired private IScenarioManager scenarioManager; - private ExternalCompany getSubcontractorExternalCompanySaved(String name, - String nif) { + @Autowired + private ISubcontractorComunicationDAO subcontractorComunicationDAO; + + @Autowired + private ISubcontractedTaskDataDAO subcontractorTaskDataDAO; + + private HoursGroup associatedHoursGroup; + + @Autowired + private ITaskSourceDAO taskSourceDAO; + + @Autowired + private ITaskElementDAO taskElementDAO; + + @Autowired + private ISubcontractedTaskDataDAO subcontractedTaskDataDAO; + + private ExternalCompany getExternalCompany(String name, + String nif){ ExternalCompany externalCompany = ExternalCompany.create(name, nif); externalCompany.setSubcontractor(true); @@ -148,6 +183,18 @@ public class ReportAdvancesServiceTest { return externalCompany; } + private ExternalCompany getSubcontractorExternalCompanySaved() { + return transactionService + .runOnAnotherTransaction(new IOnTransaction() { + @Override + public ExternalCompany execute() { + return getExternalCompany("Company" + + UUID.randomUUID().toString(), UUID + .randomUUID().toString()); + } + }); + } + @Test public void validAdvancesReport() { Order order = givenOrder(); @@ -184,6 +231,47 @@ public class ReportAdvancesServiceTest { } } + @Test + public void validAdvancesReportToSubcontratedOrderElement() { + int previousComunications = subcontractorComunicationDAO.getAll().size(); + OrderLine orderLine = createOrderLine(); + String orderElementCode = orderLine.getCode(); + + Map values = givenValidMapValues(1, 0, + BigDecimal.ZERO); + + OrderElementWithAdvanceMeasurementsListDTO orderElementWithAdvanceMeasurementsListDTO = givenOrderElementWithAdvanceMeasurementsListDTO( + orderElementCode, values); + SubcontractorComunication subcontractorComunication = SubcontractorComunication.create(); + reportAdvancesService + .updateAdvances(orderElementWithAdvanceMeasurementsListDTO); + + Order foundOrder = orderDAO.findExistingEntity(orderLine.getOrder().getId()); + assertNotNull(foundOrder); + assertThat(foundOrder.getChildren().size(), equalTo(1)); + + OrderElement orderElement = foundOrder.getChildren().get(0); + assertNotNull(orderElement); + + DirectAdvanceAssignment directAdvanceAssignmentSubcontractor = orderElement + .getDirectAdvanceAssignmentSubcontractor(); + assertNotNull(directAdvanceAssignmentSubcontractor); + assertTrue(directAdvanceAssignmentSubcontractor + .getReportGlobalAdvance()); + assertThat(directAdvanceAssignmentSubcontractor + .getAdvanceMeasurements().size(), equalTo(1)); + + for (Entry entry : values.entrySet()) { + AdvanceMeasurement advanceMeasurement = directAdvanceAssignmentSubcontractor + .getAdvanceMeasurements().first(); + assertThat(advanceMeasurement.getDate(), equalTo(entry.getKey())); + assertThat(advanceMeasurement.getValue(), equalTo(entry.getValue())); + } + + int currentComunications = subcontractorComunicationDAO.getAll().size(); + assertThat((previousComunications+1), equalTo(currentComunications)); + } + @Test public void validAdvancesReportWithSeveralDates() { Order order = givenOrder(); @@ -233,8 +321,7 @@ public class ReportAdvancesServiceTest { orderElementWithAdvanceMeasurementsDTO.advanceMeasurements = givenAdvanceMeasurementDTOs(values); - ExternalCompany externalCompany = getSubcontractorExternalCompanySaved( - "Company", "company-nif"); + ExternalCompany externalCompany = getSubcontractorExternalCompanySaved(); return new OrderElementWithAdvanceMeasurementsListDTO(externalCompany .getNif(), Arrays @@ -289,8 +376,10 @@ public class ReportAdvancesServiceTest { OrderVersion version = OrderModelTest.setupVersionUsing( scenarioManager, order); order.useSchedulingDataFor(version); + OrderLine orderLine = OrderLine .createOrderLineWithUnfixedPercentage(1000); + orderLine.useSchedulingDataFor(version); order.add(orderLine); orderLine.setCode(UUID.randomUUID().toString()); orderLine.setName("Order line name"); @@ -304,4 +393,54 @@ public class ReportAdvancesServiceTest { } } + private OrderLine createOrderLine(){ + return transactionService + .runOnAnotherTransaction(new IOnTransaction() { + @Override + public OrderLine execute() { + Order order = givenValidOrderAlreadyStored(); + OrderLine orderLine = (OrderLine) order.getChildren().get(0); + createValidSubcontractedTaskData("subcotrated_task_"+UUID.randomUUID().toString(), orderLine); + return orderLine; + } + }); + } + + private Task createValidTask(OrderLine orderLine) { + associatedHoursGroup = new HoursGroup(); + associatedHoursGroup.setCode("hours-group-code-" + UUID.randomUUID()); + + orderLine.addHoursGroup(associatedHoursGroup); + SchedulingDataForVersion schedulingDataForVersion = orderLine + .getCurrentSchedulingDataForVersion(); + + TaskSource taskSource = TaskSource.create(schedulingDataForVersion, + Arrays.asList(associatedHoursGroup)); + + orderLine.getCurrentSchedulingData().requestedCreationOf(taskSource); + + TaskSourceSynchronization mustAdd = TaskSource.mustAdd(taskSource); + mustAdd.apply(TaskSource.persistTaskSources(taskSourceDAO)); + + Task task = (Task) taskSource.getTask(); + return task; + } + + public SubcontractedTaskData createValidSubcontractedTaskData(final String name, final OrderLine orderLine) { + Task task = createValidTask(orderLine); + SubcontractedTaskData subcontractedTaskData = SubcontractedTaskData + .create(task); + subcontractedTaskData.setExternalCompany(getSubcontractorExternalCompanySaved()); + + task.setSubcontractedTaskData(subcontractedTaskData); + taskElementDAO.save(task); + task.dontPoseAsTransientObjectAnymore(); + taskElementDAO.flush(); + + sessionFactory.getCurrentSession().evict(task); + sessionFactory.getCurrentSession().evict(subcontractedTaskData); + + subcontractedTaskDataDAO.save(subcontractedTaskData); + return subcontractedTaskData; + } } From 767d2a87aa4b8abee7e4a56651f0946d46ebcacc Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Mon, 21 Nov 2011 09:26:51 +0100 Subject: [PATCH 13/88] it reduces the visibility of the constructor and uses the inherited method create [FEA] ItEr75S30SubcontractorIncommingCommunicationsLists --- .../externalcompanies/entities/CustomerComunication.java | 6 +++--- .../planner/entities/SubcontractorComunication.java | 6 +++--- .../planner/entities/SubcontractorComunicationValue.java | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java index 030b52c3a..02b908f84 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java @@ -55,15 +55,15 @@ public class CustomerComunication extends BaseEntity{ } public static CustomerComunication create() { - return (CustomerComunication) create(new CustomerComunication()); + return create(new CustomerComunication()); } public static CustomerComunication createToday(Date deadline) { - return (CustomerComunication) create(new CustomerComunication(deadline)); + return create(new CustomerComunication(deadline)); } public static CustomerComunication createTodayNewProject(Date deadline) { - return (CustomerComunication) create(new CustomerComunication(deadline, + return create(new CustomerComunication(deadline, new Date(), ComunicationType.NEW_PROJECT)); } diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java index 495b28228..36d971093 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java @@ -63,12 +63,12 @@ public class SubcontractorComunication extends BaseEntity { SubcontractedTaskData subcontractedTaskData, ComunicationType comunicationType, Date comunicationDate, Boolean reviewed) { - return new SubcontractorComunication(subcontractedTaskData, - comunicationType, comunicationDate, reviewed); + return create(new SubcontractorComunication(subcontractedTaskData, + comunicationType, comunicationDate, reviewed)); } public static SubcontractorComunication create() { - return new SubcontractorComunication(); + return create(new SubcontractorComunication()); } public void setSubcontractedTaskData(SubcontractedTaskData subcontractedTaskData) { diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java index 6b5f88b80..0a10247ff 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java @@ -53,11 +53,11 @@ public class SubcontractorComunicationValue implements INewObject { return subcontractorComunicationValue; } - public SubcontractorComunicationValue() { + protected SubcontractorComunicationValue() { } - public SubcontractorComunicationValue(Date date, BigDecimal progress) { + private SubcontractorComunicationValue(Date date, BigDecimal progress) { this.setDate(date); this.setProgress(progress); } From b4689b1cf45d690f3495a489fdf6a04638a47d56 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Mon, 21 Nov 2011 10:10:13 +0100 Subject: [PATCH 14/88] it removes trailing whitespaces. --- .../src/main/java/org/zkoss/ganttz/util/Emitter.java | 2 +- .../planner/daos/SubcontractedTaskDataDAO.java | 2 +- .../planner/entities/SubcontractorComunication.java | 2 +- .../entities/SubcontractorComunicationValue.java | 2 +- .../src/main/resources/db.changelog-1.2.xml | 2 +- .../planner/daos/SubcontractorComunicationDAOTest.java | 6 +++--- .../main/java/org/libreplan/web/orders/OrderModel.java | 2 +- .../web/planner/order/SaveCommandBuilder.java | 6 +++--- .../libreplan/web/resourceload/ResourceLoadModel.java | 8 ++++---- .../web/resourceload/ResourceLoadParameters.java | 4 ++-- .../web/subcontract/CustomerComunicationModel.java | 2 +- .../SubcontractorComunicationCRUDController.java | 6 +++--- .../subcontract/SubcontractorComunicationModel.java | 2 +- .../ws/subcontract/impl/ReportAdvancesServiceREST.java | 6 +++--- .../webapp/subcontract/subcontractorComunications.zul | 2 +- .../test/ws/subcontract/ReportAdvancesServiceTest.java | 10 +++++----- 16 files changed, 32 insertions(+), 32 deletions(-) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/util/Emitter.java b/ganttzk/src/main/java/org/zkoss/ganttz/util/Emitter.java index ffbda8aff..b671502f2 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/util/Emitter.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/util/Emitter.java @@ -23,7 +23,7 @@ import java.util.ArrayList; import java.util.List; /** - * + * * @author Óscar González Fernández */ public class Emitter { diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractedTaskDataDAO.java b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractedTaskDataDAO.java index 61b53651c..8699a5574 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractedTaskDataDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractedTaskDataDAO.java @@ -110,7 +110,7 @@ public class SubcontractedTaskDataDAO extends .createCriteria("taskSource","ts") .createCriteria("schedulingData","data") .add(Restrictions.eq("data.orderElement",orderElement)); - + TaskElement taskElement = (TaskElement) c.uniqueResult(); return (taskElement != null && taskElement.isSubcontracted()) ? ((Task) taskElement) .getSubcontractedTaskData() : null; diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java index 36d971093..d2fd52eb2 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java @@ -112,7 +112,7 @@ public class SubcontractorComunication extends BaseEntity { public List getSubcontratorComunicationValues() { return subcontratorComunicationValues; } - + public SubcontractorComunicationValue getLastSubcontratorComunicationValues(){ if (subcontratorComunicationValues.isEmpty()){ return null; diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java index 0a10247ff..66322cde6 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java @@ -30,7 +30,7 @@ import org.libreplan.business.INewObject; /** * Entity to represent each {@SubcontractorComunicationValue}. - * + * * @author Susana Montes Pedreira */ public class SubcontractorComunicationValue implements INewObject { diff --git a/libreplan-business/src/main/resources/db.changelog-1.2.xml b/libreplan-business/src/main/resources/db.changelog-1.2.xml index 99ea424a4..fcc2ccc2f 100644 --- a/libreplan-business/src/main/resources/db.changelog-1.2.xml +++ b/libreplan-business/src/main/resources/db.changelog-1.2.xml @@ -44,5 +44,5 @@
- + \ No newline at end of file diff --git a/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java b/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java index 5f95c4372..875a5fac4 100644 --- a/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java +++ b/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java @@ -156,12 +156,12 @@ public class SubcontractorComunicationDAOTest { order.setCode("code-" + UUID.randomUUID()); order.useSchedulingDataFor(orderVersion); order.add(orderLine); - + //add a basic calendar BaseCalendar basicCalendar = BaseCalendarTest.createBasicCalendar(); calendarDAO.save(basicCalendar); order.setCalendar(basicCalendar); - + try { orderDAO.save(order); sessionFactory.getCurrentSession().flush(); @@ -201,7 +201,7 @@ public class SubcontractorComunicationDAOTest { taskElementDAO.flush(); sessionFactory.getCurrentSession().evict(task); sessionFactory.getCurrentSession().evict(subcontractedTaskData); - + subcontractedTaskDataDAO.save(subcontractedTaskData); return subcontractedTaskData; } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderModel.java index 226f29cb6..1eda280f7 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderModel.java @@ -455,7 +455,7 @@ public class OrderModel extends IntegrationEntityModel implements IOrderModel { this.planningState.getSaveCommand().save(beforeSaveActions, null); } } - + private void reattachCalendar() { if (planningState.getOrder().getCalendar() == null) { return; diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SaveCommandBuilder.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SaveCommandBuilder.java index 22b2a5db2..7183b14db 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SaveCommandBuilder.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SaveCommandBuilder.java @@ -103,11 +103,11 @@ import org.zkoss.zul.Messagebox; /** * Builds a command that saves the changes in the taskElements. It can be * considered the final step in the conversation
- * + * * In the save operation it is also kept the consistency of the * LimitingResourceQueueDependencies with the Dependecies between the task of * the planning gantt. - * + * * @author Óscar González Fernández * @author Javier Moran Rua */ @@ -125,7 +125,7 @@ public class SaveCommandBuilder { "/planner/index.zul;company_scheduling", ISaveCommand.class, result); } - + public static void dontPoseAsTransientAndChildrenObjects( Collection> resourceAllocations) { for (ResourceAllocation each : resourceAllocations) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/resourceload/ResourceLoadModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/resourceload/ResourceLoadModel.java index c321f783a..2a247d995 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/resourceload/ResourceLoadModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/resourceload/ResourceLoadModel.java @@ -142,7 +142,7 @@ public class ResourceLoadModel implements IResourceLoadModel { allocationsFinder.lazilyGetResourcesIncluded(), allocationsFinder.lazilyGetAssignmentsShown()); } - + @Override @Transactional(readOnly = true) @@ -643,7 +643,7 @@ public class ResourceLoadModel implements IResourceLoadModel { } return result; } - + private LoadTimeLine buildTimeLine(Collection criterions, Task task, Resource resource, String type, List allocationsSortedByStartDate, @@ -1044,7 +1044,7 @@ class PeriodBuilderFactory { this.initDateFilter = initDateFilter; this.endDateFilter = endDateFilter; } - + public List build(LoadPeriodGeneratorFactory factory, List> sortedByStartDate){ if (initDateFilter == null && endDateFilter == null) { return PeriodsBuilder.build(factory, sortedByStartDate); @@ -1056,7 +1056,7 @@ class PeriodBuilderFactory { private Date asDate(LocalDate date) { return ResourceLoadModel.asDate(date); } - + } class PeriodsBuilder { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/resourceload/ResourceLoadParameters.java b/libreplan-webapp/src/main/java/org/libreplan/web/resourceload/ResourceLoadParameters.java index 37c9d36e3..e19cffc6a 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/resourceload/ResourceLoadParameters.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/resourceload/ResourceLoadParameters.java @@ -104,7 +104,7 @@ public class ResourceLoadParameters { criteriaToShowList.clear(); criteriaToShowList.addAll(criteriaList); } - + public Paginator getEntities(Class type, Callable> allEntities, IReattacher reattacher) { Validate.isTrue( @@ -119,7 +119,7 @@ public class ResourceLoadParameters { allEntities, reattacher); } } - + private List listOfType(Class klass, Collection objects) { List result = new ArrayList(); for (Object each : objects) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java index c0423d6a2..326e10308 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java @@ -39,7 +39,7 @@ public class CustomerComunicationModel implements ICustomerComunicationModel{ @Autowired private ICustomerComunicationDAO customerComunicationDAO; - + private FilterComunicationEnum currentFilter = FilterComunicationEnum.NOT_REVIEWED; @Override diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java index 0cf449f11..80e1e57a5 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java @@ -60,7 +60,7 @@ import org.zkoss.zul.SimpleListModel; /** * Controller for CRUD actions over a {@link SubcontractorComunication} - * + * * @author Susana Montes Pedreira */ @SuppressWarnings("serial") @@ -183,11 +183,11 @@ public class SubcontractorComunicationCRUDController extends GenericForwardCompo private void appendLabel(Row row, String label) { row.appendChild(new Label(label)); } - + private void appendLabelWitTooltip(final Row row,final SubcontractorComunication subcontractorComunication) { String lastValue = getLastValue(subcontractorComunication); final Label compLabel = new Label(lastValue); - + compLabel.setTooltip(pp); compLabel.addEventListener(Events.ON_MOUSE_OVER, new EventListener() { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java index ff62a0f60..292acc650 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java @@ -45,7 +45,7 @@ public class SubcontractorComunicationModel implements ISubcontractorComunicatio @Autowired private ISubcontractorComunicationDAO subcontractorComunicationDAO; - + @Autowired IOrderDAO orderDAO; diff --git a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java index 7def9bab2..461660675 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java +++ b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java @@ -87,10 +87,10 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService { private IOrderElementDAO orderElementDAO; @Autowired - private ISubcontractedTaskDataDAO subcontractedTaskDataDAO; + private ISubcontractedTaskDataDAO subcontractedTaskDataDAO; @Autowired - private ISubcontractorComunicationDAO subcontractorComunicationDAO; + private ISubcontractorComunicationDAO subcontractorComunicationDAO; @Autowired private IOrderDAO orderDAO; @@ -215,7 +215,7 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService { createSubcontractorComunication( orderElement, orderElementWithAdvanceMeasurementsDTO.advanceMeasurements); - + } catch (ValidationException e) { instanceConstraintViolationsDTO = ConstraintViolationConverter diff --git a/libreplan-webapp/src/main/webapp/subcontract/subcontractorComunications.zul b/libreplan-webapp/src/main/webapp/subcontract/subcontractorComunications.zul index ea5aaa381..e2b599a6c 100644 --- a/libreplan-webapp/src/main/webapp/subcontract/subcontractorComunications.zul +++ b/libreplan-webapp/src/main/webapp/subcontract/subcontractorComunications.zul @@ -60,7 +60,7 @@ - + diff --git a/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java b/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java index 1838d8bdc..178424cd1 100644 --- a/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java +++ b/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java @@ -242,7 +242,7 @@ public class ReportAdvancesServiceTest { OrderElementWithAdvanceMeasurementsListDTO orderElementWithAdvanceMeasurementsListDTO = givenOrderElementWithAdvanceMeasurementsListDTO( orderElementCode, values); - SubcontractorComunication subcontractorComunication = SubcontractorComunication.create(); + SubcontractorComunication subcontractorComunication = SubcontractorComunication.create(); reportAdvancesService .updateAdvances(orderElementWithAdvanceMeasurementsListDTO); @@ -270,7 +270,7 @@ public class ReportAdvancesServiceTest { int currentComunications = subcontractorComunicationDAO.getAll().size(); assertThat((previousComunications+1), equalTo(currentComunications)); - } + } @Test public void validAdvancesReportWithSeveralDates() { @@ -418,7 +418,7 @@ public class ReportAdvancesServiceTest { Arrays.asList(associatedHoursGroup)); orderLine.getCurrentSchedulingData().requestedCreationOf(taskSource); - + TaskSourceSynchronization mustAdd = TaskSource.mustAdd(taskSource); mustAdd.apply(TaskSource.persistTaskSources(taskSourceDAO)); @@ -436,10 +436,10 @@ public class ReportAdvancesServiceTest { taskElementDAO.save(task); task.dontPoseAsTransientObjectAnymore(); taskElementDAO.flush(); - + sessionFactory.getCurrentSession().evict(task); sessionFactory.getCurrentSession().evict(subcontractedTaskData); - + subcontractedTaskDataDAO.save(subcontractedTaskData); return subcontractedTaskData; } From b463d8e42e43404e342d3262345d2b6877f1ee1e Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Mon, 21 Nov 2011 13:33:00 +0100 Subject: [PATCH 15/88] it changes REPORT_ADVANCE for REPORT_PROGRESS and set properly the copyright --- .../daos/CustomerComunicationDAO.java | 6 +-- .../daos/ICustomerComunicationDAO.java | 6 +-- .../entities/ComunicationType.java | 9 ++-- .../entities/CustomerComunication.java | 6 +-- .../daos/ISubcontractedTaskDataDAO.java | 2 + .../daos/ISubcontractorComunicationDAO.java | 4 +- .../daos/SubcontractedTaskDataDAO.java | 2 + .../daos/SubcontractorComunicationDAO.java | 4 +- .../entities/SubcontractorComunication.java | 4 +- .../SubcontractorComunicationValue.java | 10 +--- .../qualityforms/entities/QualityForm.java | 1 + .../daos/CustomerComunicationDAOTest.java | 6 +-- .../SubcontractorComunicationDAOTest.java | 6 +-- .../web/common/CustomMenuController.java | 2 + .../web/common/converters/TaskConverter.java | 4 +- .../converters/TaskElementConverter.java | 2 +- .../AdvanceAssignmentPlanningController.java | 2 + .../order/OrderPlanningController.java | 2 + .../planner/tabs/IGlobalViewEntryPoints.java | 2 + .../tabs/MultipleTabsPlannerController.java | 2 + .../CustomerComunicationCRUDController.java | 6 +-- .../CustomerComunicationModel.java | 4 +- .../subcontract/FilterComunicationEnum.java | 47 +++++++++---------- .../ICustomerComunicationModel.java | 4 +- .../ISubcontractorComunicationModel.java | 6 +-- .../SubcontractedTasksController.java | 2 + ...bcontractorComunicationCRUDController.java | 6 +-- .../SubcontractorComunicationModel.java | 6 +-- .../impl/ReportAdvancesServiceREST.java | 5 +- .../impl/SubcontractServiceREST.java | 3 ++ .../subcontract/customerComunications.zul | 6 +-- .../subcontractorComunications.zul | 6 +-- .../ReportAdvancesServiceTest.java | 2 + 33 files changed, 82 insertions(+), 103 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/CustomerComunicationDAO.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/CustomerComunicationDAO.java index 52499a67b..c307fe97c 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/CustomerComunicationDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/CustomerComunicationDAO.java @@ -1,9 +1,7 @@ /* - * This file is part of NavalPlan + * 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. + * Copyright (C) 2010-2011 WirelessGalicia, 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 diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/ICustomerComunicationDAO.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/ICustomerComunicationDAO.java index 5d6c1b270..e7217b272 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/ICustomerComunicationDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/daos/ICustomerComunicationDAO.java @@ -1,9 +1,7 @@ /* - * This file is part of NavalPlan + * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java index d94038ca6..959a5d90f 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/ComunicationType.java @@ -1,9 +1,7 @@ /* - * This file is part of NavalPlan + * 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. + * Copyright (C) 2011 WirelessGalicia, 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 @@ -30,8 +28,7 @@ import static org.libreplan.business.i18n.I18nHelper._; */ public enum ComunicationType { - NEW_PROJECT(_("New project")), - REPORT_ADVANCE(_("Report advance")); + NEW_PROJECT(_("New project")), REPORT_PROGRESS(_("Report advance")); private String description; diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java index 02b908f84..c3c3400e1 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/CustomerComunication.java @@ -1,9 +1,7 @@ /* - * This file is part of NavalPlan + * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractedTaskDataDAO.java b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractedTaskDataDAO.java index 86da35b8a..df7bd86de 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractedTaskDataDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractedTaskDataDAO.java @@ -5,6 +5,8 @@ * Desenvolvemento Tecnolóxico de Galicia * Copyright (C) 2010-2011 Igalia, S.L. * + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractorComunicationDAO.java b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractorComunicationDAO.java index e00763f3a..a856d6047 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractorComunicationDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/ISubcontractorComunicationDAO.java @@ -1,9 +1,7 @@ /* * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractedTaskDataDAO.java b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractedTaskDataDAO.java index 8699a5574..da6d3c839 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractedTaskDataDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractedTaskDataDAO.java @@ -5,6 +5,8 @@ * Desenvolvemento Tecnolóxico de Galicia * Copyright (C) 2010-2011 Igalia, S.L. * + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractorComunicationDAO.java b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractorComunicationDAO.java index 929fc032c..b456702c9 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractorComunicationDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/daos/SubcontractorComunicationDAO.java @@ -1,9 +1,7 @@ /* * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java index d2fd52eb2..d1a52e11f 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunication.java @@ -1,9 +1,7 @@ /* * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java index 66322cde6..21844c930 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorComunicationValue.java @@ -1,9 +1,7 @@ /* - * This file is part of NavalPlan + * 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. + * Copyright (C) 2011 WirelessGalicia, 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 @@ -35,10 +33,6 @@ import org.libreplan.business.INewObject; */ public class SubcontractorComunicationValue implements INewObject { - public final static String propertyDate = "date"; - - public final static String propertyProgress = "progress"; - public static SubcontractorComunicationValue create() { SubcontractorComunicationValue subcontractorComunicationValue = new SubcontractorComunicationValue(); subcontractorComunicationValue.setNewObject(true); diff --git a/libreplan-business/src/main/java/org/libreplan/business/qualityforms/entities/QualityForm.java b/libreplan-business/src/main/java/org/libreplan/business/qualityforms/entities/QualityForm.java index 235e0f5db..e0d401b01 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/qualityforms/entities/QualityForm.java +++ b/libreplan-business/src/main/java/org/libreplan/business/qualityforms/entities/QualityForm.java @@ -4,6 +4,7 @@ * 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. + * Copyright (C) 2010-2011 WirelessGalicia, 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 diff --git a/libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerComunicationDAOTest.java b/libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerComunicationDAOTest.java index 59237cdec..935df1dfb 100644 --- a/libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerComunicationDAOTest.java +++ b/libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerComunicationDAOTest.java @@ -1,9 +1,7 @@ /* - * This file is part of NavalPlan + * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java b/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java index 875a5fac4..6962e441c 100644 --- a/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java +++ b/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java @@ -1,9 +1,7 @@ /* - * This file is part of NavalPlan + * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java index b7fcc8020..d68f49716 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java @@ -5,6 +5,8 @@ * Desenvolvemento Tecnolóxico de Galicia * Copyright (C) 2010-2011 Igalia, S.L. * + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskConverter.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskConverter.java index b8996cff7..045043bbd 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskConverter.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskConverter.java @@ -1,9 +1,7 @@ /* * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskElementConverter.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskElementConverter.java index 8cbf74f7c..d80475111 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskElementConverter.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/converters/TaskElementConverter.java @@ -1,7 +1,7 @@ /* * This file is part of LibrePlan * - * Copyright (C) 2010-2011 Wireless Galicia, S.L. + * Copyright (C) 2011 Wireless Galicia, 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 diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/advances/AdvanceAssignmentPlanningController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/advances/AdvanceAssignmentPlanningController.java index fee5a0410..534364508 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/advances/AdvanceAssignmentPlanningController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/advances/AdvanceAssignmentPlanningController.java @@ -5,6 +5,8 @@ * Desenvolvemento Tecnolóxico de Galicia * Copyright (C) 2010-2011 Igalia, S.L. * + * Copyright (C) 2010-2011 WirelessGalicia, 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 diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java index f061776ad..c2facb1ee 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java @@ -4,6 +4,7 @@ * 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. + * Copyright (C) 2010-2011 WirelessGalicia 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 @@ -73,6 +74,7 @@ import org.zkoss.zul.Vbox; /** * @author Óscar González Fernández + * @author Susana Montes Pedreira */ @Component @Scope(BeanDefinition.SCOPE_PROTOTYPE) diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/IGlobalViewEntryPoints.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/IGlobalViewEntryPoints.java index 3e8ea69cc..35057e261 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/IGlobalViewEntryPoints.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/IGlobalViewEntryPoints.java @@ -4,6 +4,7 @@ * 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. + * Copyright (C) 2011 WirelessGalicia, 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 @@ -31,6 +32,7 @@ import org.libreplan.web.common.entrypoints.EntryPoints; /** * Entry points for {@link MultipleTabsPlannerController}
* @author Óscar González Fernández + * @author Susana Montes Pedreira */ @EntryPoints(page = "/planner/index.zul", registerAs = "globalView") public interface IGlobalViewEntryPoints { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/MultipleTabsPlannerController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/MultipleTabsPlannerController.java index 78e4b80d2..15667efec 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/MultipleTabsPlannerController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/MultipleTabsPlannerController.java @@ -5,6 +5,8 @@ * Desenvolvemento Tecnolóxico de Galicia * Copyright (C) 2010-2011 Igalia, S.L. * + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java index ceab87024..e6a7071f9 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java @@ -1,9 +1,7 @@ /* - * This file is part of NavalPlan + * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java index 326e10308..6061fe79d 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java @@ -1,9 +1,7 @@ /* * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterComunicationEnum.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterComunicationEnum.java index cdd323696..cde63a19e 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterComunicationEnum.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterComunicationEnum.java @@ -1,9 +1,7 @@ /* - * This file is part of NavalPlan + * 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. + * Copyright (C) 2011 WirelessGalicia, 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 @@ -26,29 +24,28 @@ package org.libreplan.web.subcontract; * * @author Susana Montes Pedreira */ - public enum FilterComunicationEnum { - ALL(_("All")), - NOT_REVIEWED(_("Not Reviewed")); +public enum FilterComunicationEnum { + ALL(_("All")), NOT_REVIEWED(_("Not Reviewed")); - /** - * Forces to mark the string as needing translation - */ - private static String _(String string) { - return string; - } + /** + * Forces to mark the string as needing translation + */ + private static String _(String string) { + return string; + } - private String displayName; + private String displayName; - private FilterComunicationEnum(String displayName) { - this.displayName = displayName; - } + private FilterComunicationEnum(String displayName) { + this.displayName = displayName; + } - public static FilterComunicationEnum getDefault() { - return ALL; - } + public static FilterComunicationEnum getDefault() { + return ALL; + } - @Override - public String toString() { - return displayName; - } - } \ No newline at end of file + @Override + public String toString() { + return displayName; + } +} \ No newline at end of file diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java index a6ecdd3d0..52febfc3d 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java @@ -1,9 +1,7 @@ /* * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorComunicationModel.java index a69ede783..a2abec0a3 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorComunicationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorComunicationModel.java @@ -1,9 +1,7 @@ /* - * This file is part of NavalPlan + * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractedTasksController.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractedTasksController.java index d01b87a32..8e5288203 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractedTasksController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractedTasksController.java @@ -5,6 +5,8 @@ * Desenvolvemento Tecnolóxico de Galicia * Copyright (C) 2010-2011 Igalia, S.L. * + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java index 80e1e57a5..f635f0b6c 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java @@ -1,9 +1,7 @@ /* - * This file is part of NavalPlan + * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java index 292acc650..051b64936 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java @@ -1,9 +1,7 @@ /* - * This file is part of NavalPlan + * 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. + * Copyright (C) 2011 WirelessGalicia, 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 diff --git a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java index 461660675..8b96f0a87 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java +++ b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java @@ -5,6 +5,8 @@ * Desenvolvemento Tecnolóxico de Galicia * Copyright (C) 2010-2011 Igalia, S.L. * + * Copyright (C) 2011 WirelessGalicia, 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 @@ -77,6 +79,7 @@ import org.springframework.transaction.annotation.Transactional; * REST-based implementation of {@link IReportAdvancesService}. * * @author Manuel Rego Casasnovas + * @author Susana Montes Pedreira */ @Path("/reportadvances/") @Produces("application/xml") @@ -250,7 +253,7 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService { if (subcontractedTaskData != null) { SubcontractorComunication subcontractorComunication = SubcontractorComunication .create(subcontractedTaskData, - ComunicationType.REPORT_ADVANCE, new Date(), + ComunicationType.REPORT_PROGRESS, new Date(), false); for (AdvanceMeasurementDTO advanceMeasurementDTO : advanceMeasurementDTOs) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java index f724a4a77..b3157cf0a 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java +++ b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java @@ -5,6 +5,8 @@ * Desenvolvemento Tecnolóxico de Galicia * Copyright (C) 2010-2011 Igalia, S.L. * + * Copyright (C) 2011 WirelessGalicia, 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 @@ -79,6 +81,7 @@ import org.springframework.stereotype.Service; * REST-based implementation of {@link ISubcontractService} * * @author Manuel Rego Casasnovas + * @author Susana Montes Pedreira */ @Path("/subcontract/") @Produces("application/xml") diff --git a/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul b/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul index df788525a..7aec332a9 100644 --- a/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul +++ b/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul @@ -1,9 +1,7 @@ - + + 100 @@ -43,14 +43,14 @@ - + - org.libreplan.business.externalcompanies.entities.ComunicationType + org.libreplan.business.externalcompanies.entities.CommunicationType - + diff --git a/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml index 883361db8..9a64422d8 100644 --- a/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml +++ b/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml @@ -146,9 +146,9 @@ class="org.libreplan.business.scenarios.entities.OrderVersion"/> - + - + diff --git a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorCommunication.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorCommunication.hbm.xml new file mode 100644 index 000000000..4aa2451fe --- /dev/null +++ b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorCommunication.hbm.xml @@ -0,0 +1,40 @@ + + + + + + + + + 100 + + + + + + + org.libreplan.business.externalcompanies.entities.CommunicationType + + + + + + + + + + + + + + + + + + diff --git a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorComunication.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorComunication.hbm.xml deleted file mode 100644 index 015eb723e..000000000 --- a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorComunication.hbm.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - 100 - - - - - - - org.libreplan.business.externalcompanies.entities.ComunicationType - - - - - - - - - - - - - - - - - - diff --git a/libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerComunicationDAOTest.java b/libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerCommunicationDAOTest.java similarity index 73% rename from libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerComunicationDAOTest.java rename to libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerCommunicationDAOTest.java index 935df1dfb..5b891cf57 100644 --- a/libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerComunicationDAOTest.java +++ b/libreplan-business/src/test/java/org/libreplan/business/test/externalcompanies/daos/CustomerCommunicationDAOTest.java @@ -39,8 +39,8 @@ import org.libreplan.business.common.IAdHocTransactionService; import org.libreplan.business.common.IOnTransaction; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.common.exceptions.ValidationException; -import org.libreplan.business.externalcompanies.daos.ICustomerComunicationDAO; -import org.libreplan.business.externalcompanies.entities.CustomerComunication; +import org.libreplan.business.externalcompanies.daos.ICustomerCommunicationDAO; +import org.libreplan.business.externalcompanies.entities.CustomerCommunication; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.orders.entities.Order; @@ -54,7 +54,7 @@ import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.assertTrue; /** - * Tests for {@link CustomerComunication} + * Tests for {@link CustomerCommunication} * * @author Susana Montes Pedreira */ @@ -62,10 +62,10 @@ import static org.junit.Assert.assertTrue; @ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE, BUSINESS_SPRING_CONFIG_TEST_FILE }) @Transactional -public class CustomerComunicationDAOTest { +public class CustomerCommunicationDAOTest { @Autowired - ICustomerComunicationDAO customerComunicationDAO; + ICustomerCommunicationDAO customerCommunicationDAO; @Autowired IOrderDAO orderDAO; @@ -91,12 +91,12 @@ public class CustomerComunicationDAOTest { return date.toDateTimeAtStartOfDay().toDate(); } - public CustomerComunication createValidCustomerComunication() { + public CustomerCommunication createValidCustomerCommunication() { Order order = createValidOrder("Order A"); - CustomerComunication customerComunication = CustomerComunication + CustomerCommunication customerCommunication = CustomerCommunication .createTodayNewProject(givenDeadLine(2)); - customerComunication.setOrder(order); - return customerComunication; + customerCommunication.setOrder(order); + return customerCommunication; } @Test @@ -105,35 +105,35 @@ public class CustomerComunicationDAOTest { } @Test - public void testCustomerComunicationDAOInSpringContainer() { - assertNotNull(customerComunicationDAO); + public void testCustomerCommunicationDAOInSpringContainer() { + assertNotNull(customerCommunicationDAO); } @Test - public void testSaveCustomerComunication() { - CustomerComunication customerComunication = createValidCustomerComunication(); - customerComunicationDAO.save(customerComunication); - assertTrue(customerComunication.getId() != null); + public void testSaveCustomerCommunication() { + CustomerCommunication customerCommunication = createValidCustomerCommunication(); + customerCommunicationDAO.save(customerCommunication); + assertTrue(customerCommunication.getId() != null); } @Test - public void testRemoveCustomerComunication() + public void testRemoveCustomerCommunication() throws InstanceNotFoundException { - CustomerComunication customerComunication = createValidCustomerComunication(); - customerComunicationDAO.save(customerComunication); - assertTrue(customerComunication.getId() != null); - customerComunicationDAO.remove(customerComunication.getId()); - assertFalse(customerComunicationDAO - .exists(customerComunication.getId())); + CustomerCommunication customerCommunication = createValidCustomerCommunication(); + customerCommunicationDAO.save(customerCommunication); + assertTrue(customerCommunication.getId() != null); + customerCommunicationDAO.remove(customerCommunication.getId()); + assertFalse(customerCommunicationDAO + .exists(customerCommunication.getId())); } @Test - public void testSaveCustomerComunicationWithoutOrder() + public void testSaveCustomerCommunicationWithoutOrder() throws InstanceNotFoundException { - CustomerComunication customerComunication = createValidCustomerComunication(); - customerComunication.setOrder(null); + CustomerCommunication customerCommunication = createValidCustomerCommunication(); + customerCommunication.setOrder(null); try { - customerComunicationDAO.save(customerComunication); + customerCommunicationDAO.save(customerCommunication); fail("It should throw an exception"); } catch (ValidationException e) { // Ok diff --git a/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java b/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorCommunicationDAOTest.java similarity index 80% rename from libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java rename to libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorCommunicationDAOTest.java index 6962e441c..3ea20f4a6 100644 --- a/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorComunicationDAOTest.java +++ b/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorCommunicationDAOTest.java @@ -43,10 +43,10 @@ import org.libreplan.business.common.IOnTransaction; import org.libreplan.business.common.daos.IConfigurationDAO; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.common.exceptions.ValidationException; -import org.libreplan.business.externalcompanies.daos.ICustomerComunicationDAO; +import org.libreplan.business.externalcompanies.daos.ICustomerCommunicationDAO; import org.libreplan.business.externalcompanies.daos.IExternalCompanyDAO; -import org.libreplan.business.externalcompanies.entities.ComunicationType; -import org.libreplan.business.externalcompanies.entities.CustomerComunication; +import org.libreplan.business.externalcompanies.entities.CommunicationType; +import org.libreplan.business.externalcompanies.entities.CustomerCommunication; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.orders.entities.HoursGroup; @@ -56,11 +56,11 @@ import org.libreplan.business.orders.entities.SchedulingDataForVersion; import org.libreplan.business.orders.entities.TaskSource; import org.libreplan.business.orders.entities.TaskSource.TaskSourceSynchronization; import org.libreplan.business.planner.daos.ISubcontractedTaskDataDAO; -import org.libreplan.business.planner.daos.ISubcontractorComunicationDAO; +import org.libreplan.business.planner.daos.ISubcontractorCommunicationDAO; import org.libreplan.business.planner.daos.ITaskElementDAO; import org.libreplan.business.planner.daos.ITaskSourceDAO; import org.libreplan.business.planner.entities.SubcontractedTaskData; -import org.libreplan.business.planner.entities.SubcontractorComunication; +import org.libreplan.business.planner.entities.SubcontractorCommunication; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.scenarios.IScenarioManager; import org.libreplan.business.scenarios.bootstrap.IScenariosBootstrap; @@ -75,7 +75,7 @@ import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.assertTrue; /** - * Tests for {@link SubcontractorComunication} + * Tests for {@link SubcontractorCommunication} * * @author Susana Montes Pedreira */ @@ -83,10 +83,10 @@ import static org.junit.Assert.assertTrue; @ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE, BUSINESS_SPRING_CONFIG_TEST_FILE }) @Transactional -public class SubcontractorComunicationDAOTest { +public class SubcontractorCommunicationDAOTest { @Autowired - ISubcontractorComunicationDAO subcontractorComunicationDAO; + ISubcontractorCommunicationDAO subcontractorCommunicationDAO; @Autowired ISubcontractedTaskDataDAO subcontractedTaskDataDAO; @@ -204,45 +204,45 @@ public class SubcontractorComunicationDAOTest { return subcontractedTaskData; } - public SubcontractorComunication createValidSubcontractorComunication(){ + public SubcontractorCommunication createValidSubcontractorCommunication(){ SubcontractedTaskData subcontractedTaskData = createValidSubcontractedTaskData("Task A"); - Date comunicationDate = new Date(); - SubcontractorComunication subcontractorComunication = SubcontractorComunication - .create(subcontractedTaskData, ComunicationType.NEW_PROJECT, - comunicationDate, false); - return subcontractorComunication; + Date communicationDate = new Date(); + SubcontractorCommunication subcontractorCommunication = SubcontractorCommunication + .create(subcontractedTaskData, CommunicationType.NEW_PROJECT, + communicationDate, false); + return subcontractorCommunication; } @Test - public void testSubcontractorComunicationDAOInSpringContainer() { - assertNotNull(subcontractorComunicationDAO); + public void testSubcontractorCommunicationDAOInSpringContainer() { + assertNotNull(subcontractorCommunicationDAO); } @Test - public void testSaveCustomerComunication() { - SubcontractorComunication subcontractorComunication = createValidSubcontractorComunication(); - subcontractorComunicationDAO.save(subcontractorComunication); - assertTrue(subcontractorComunication.getId() != null); + public void testSaveCustomerCommunication() { + SubcontractorCommunication subcontractorCommunication = createValidSubcontractorCommunication(); + subcontractorCommunicationDAO.save(subcontractorCommunication); + assertTrue(subcontractorCommunication.getId() != null); } @Test - public void testRemoveCustomerComunication() + public void testRemoveCustomerCommunication() throws InstanceNotFoundException { - SubcontractorComunication customerComunication = createValidSubcontractorComunication(); - subcontractorComunicationDAO.save(customerComunication); - assertTrue(customerComunication.getId() != null); - subcontractorComunicationDAO.remove(customerComunication.getId()); - assertFalse(subcontractorComunicationDAO - .exists(customerComunication.getId())); + SubcontractorCommunication customerCommunication = createValidSubcontractorCommunication(); + subcontractorCommunicationDAO.save(customerCommunication); + assertTrue(customerCommunication.getId() != null); + subcontractorCommunicationDAO.remove(customerCommunication.getId()); + assertFalse(subcontractorCommunicationDAO + .exists(customerCommunication.getId())); } @Test - public void testSaveCustomerComunicationWithoutSubcontratedTaskData() + public void testSaveCustomerCommunicationWithoutSubcontratedTaskData() throws InstanceNotFoundException { - SubcontractorComunication subcontractorComunication = createValidSubcontractorComunication(); - subcontractorComunication.setSubcontractedTaskData(null); + SubcontractorCommunication subcontractorCommunication = createValidSubcontractorCommunication(); + subcontractorCommunication.setSubcontractedTaskData(null); try { - subcontractorComunicationDAO.save(subcontractorComunication); + subcontractorCommunicationDAO.save(subcontractorCommunication); fail("It should throw an exception"); } catch (ValidationException e) { // Ok diff --git a/libreplan-business/src/test/resources/libreplan-business-spring-config-test.xml b/libreplan-business/src/test/resources/libreplan-business-spring-config-test.xml index ca7a4fd12..3de0bcd9f 100644 --- a/libreplan-business/src/test/resources/libreplan-business-spring-config-test.xml +++ b/libreplan-business/src/test/resources/libreplan-business-spring-config-test.xml @@ -88,7 +88,7 @@ org/libreplan/business/planner/entities/AdvanceConsolidations.hbm.xml - org/libreplan/business/planner/entities/SubcontractorComunication.hbm.xml + org/libreplan/business/planner/entities/SubcontractorCommunication.hbm.xml org/libreplan/business/scenarios/entities/Scenarios.hbm.xml diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java index d68f49716..431fcbb8b 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java @@ -299,9 +299,9 @@ public class CustomMenuController extends Div implements IMenuItemsRegister { } resourcesItems.add(subItem(_("Subcontracting"), "/subcontract/subcontractedTasks.zul", "", subItem(_("Subcontracted Tasks"), "/subcontract/subcontractedTasks.zul", ""), - subItem(_("Incoming communications from subcontractors"), "/subcontract/subcontractorComunications.zul",""), + subItem(_("Incoming communications from subcontractors"), "/subcontract/subcontractorCommunications.zul",""), subItem(_("Report Progress"), "/subcontract/reportAdvances.zul", ""), - subItem(_("Customer subcontracted projects communications"), "/subcontract/customerComunications.zul",""))); + subItem(_("Customer subcontracted projects communications"), "/subcontract/customerCommunications.zul",""))); topItem(_("Resources"), "/resources/worker/worker.zul", "", resourcesItems); if (isScenariosVisible()) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerCommunicationCRUDController.java similarity index 54% rename from libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java rename to libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerCommunicationCRUDController.java index e6a7071f9..d04a72b36 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerCommunicationCRUDController.java @@ -29,8 +29,8 @@ import javax.annotation.Resource; import org.apache.commons.logging.LogFactory; import org.libreplan.business.common.exceptions.ValidationException; -import org.libreplan.business.externalcompanies.entities.ComunicationType; -import org.libreplan.business.externalcompanies.entities.CustomerComunication; +import org.libreplan.business.externalcompanies.entities.CommunicationType; +import org.libreplan.business.externalcompanies.entities.CustomerCommunication; import org.libreplan.business.orders.entities.Order; import org.libreplan.web.common.IMessagesForUser; import org.libreplan.web.common.MessagesForUser; @@ -49,19 +49,19 @@ import org.zkoss.zul.RowRenderer; import org.zkoss.zul.SimpleListModel; /** - * Controller for CRUD actions over a {@link CustomerComunication} + * Controller for CRUD actions over a {@link CustomerCommunication} * * @author Susana Montes Pedreira */ @SuppressWarnings("serial") -public class CustomerComunicationCRUDController extends GenericForwardComposer { +public class CustomerCommunicationCRUDController extends GenericForwardComposer { private static final org.apache.commons.logging.Log LOG = LogFactory - .getLog(CustomerComunicationCRUDController.class); + .getLog(CustomerCommunicationCRUDController.class); - private ICustomerComunicationModel customerComunicationModel; + private ICustomerCommunicationModel customerCommunicationModel; - private CustomerComunicationRenderer customerComunicationRenderer = new CustomerComunicationRenderer();; + private CustomerCommunicationRenderer customerCommunicationRenderer = new CustomerCommunicationRenderer();; protected IMessagesForUser messagesForUser; @@ -79,67 +79,67 @@ public class CustomerComunicationCRUDController extends GenericForwardComposer { messagesForUser = new MessagesForUser(messagesContainer); } - public void goToEdit(CustomerComunication customerComunication) { - if(customerComunication != null && customerComunication.getOrder() != null){ - Order order = customerComunication.getOrder(); + public void goToEdit(CustomerCommunication customerCommunication) { + if(customerCommunication != null && customerCommunication.getOrder() != null){ + Order order = customerCommunication.getOrder(); globalView.goToOrderDetails(order); } } - public FilterComunicationEnum[] getFilterItems(){ - return FilterComunicationEnum.values(); + public FilterCommunicationEnum[] getFilterItems(){ + return FilterCommunicationEnum.values(); } - public FilterComunicationEnum getCurrentFilterItem() { - return customerComunicationModel.getCurrentFilter(); + public FilterCommunicationEnum getCurrentFilterItem() { + return customerCommunicationModel.getCurrentFilter(); } - public void setCurrentFilterItem(FilterComunicationEnum selected) { - customerComunicationModel.setCurrentFilter(selected); + public void setCurrentFilterItem(FilterCommunicationEnum selected) { + customerCommunicationModel.setCurrentFilter(selected); - // update the customer comunication list - listing.setModel(new SimpleListModel(getCustomerComunications())); + // update the customer communication list + listing.setModel(new SimpleListModel(getCustomerCommunications())); listing.invalidate(); } - protected void save(CustomerComunication customerComunication) + protected void save(CustomerCommunication customerCommunication) throws ValidationException { - customerComunicationModel.confirmSave(customerComunication); + customerCommunicationModel.confirmSave(customerCommunication); } - public List getCustomerComunications() { - FilterComunicationEnum currentFilter = customerComunicationModel.getCurrentFilter(); + public List getCustomerCommunications() { + FilterCommunicationEnum currentFilter = customerCommunicationModel.getCurrentFilter(); switch(currentFilter){ - case ALL: return customerComunicationModel.getCustomerAllComunications(); - case NOT_REVIEWED: return customerComunicationModel.getCustomerComunicationWithoutReviewed(); - default: return customerComunicationModel.getCustomerAllComunications(); + case ALL: return customerCommunicationModel.getCustomerAllCommunications(); + case NOT_REVIEWED: return customerCommunicationModel.getCustomerCommunicationWithoutReviewed(); + default: return customerCommunicationModel.getCustomerAllCommunications(); } } - public CustomerComunicationRenderer getCustomerComunicationRenderer() { - return customerComunicationRenderer; + public CustomerCommunicationRenderer getCustomerCommunicationRenderer() { + return customerCommunicationRenderer; } - private class CustomerComunicationRenderer implements + private class CustomerCommunicationRenderer implements RowRenderer { @Override public void render(Row row, Object data) { - CustomerComunication customerComunication = (CustomerComunication) data; - row.setValue(customerComunication); + CustomerCommunication customerCommunication = (CustomerCommunication) data; + row.setValue(customerCommunication); - final ComunicationType type = customerComunication.getComunicationType(); - appendLabel(row, type.toString()); + final CommunicationType type = customerCommunication.getCommunicationType(); + appendLabel(row, toString(type)); - appendLabel(row, customerComunication.getOrder().getName()); - appendLabel(row, toString(customerComunication.getDeadline())); - appendLabel(row, customerComunication.getOrder().getCode()); - appendLabel(row, customerComunication.getOrder() + appendLabel(row, customerCommunication.getOrder().getName()); + appendLabel(row, toString(customerCommunication.getDeadline())); + appendLabel(row, customerCommunication.getOrder().getCode()); + appendLabel(row, customerCommunication.getOrder() .getCustomerReference()); appendLabel(row, - toString(customerComunication.getComunicationDate())); - appendCheckbox(row, customerComunication); - appendOperations(row, customerComunication); + toString(customerCommunication.getCommunicationDate())); + appendCheckbox(row, customerCommunication); + appendOperations(row, customerCommunication); } private String toString(Date date) { @@ -150,22 +150,29 @@ public class CustomerComunicationCRUDController extends GenericForwardComposer { return new SimpleDateFormat("dd/MM/yyyy HH:mm").format(date); } + private String toString(Object object) { + if (object == null) { + return ""; + } + return object.toString(); + } + private void appendLabel(Row row, String label) { row.appendChild(new Label(label)); } private void appendCheckbox(Row row, - final CustomerComunication customerComunication) { + final CustomerCommunication customerCommunication) { final Checkbox checkBoxReviewed = new Checkbox(); - checkBoxReviewed.setChecked(customerComunication.getReviewed()); + checkBoxReviewed.setChecked(customerCommunication.getReviewed()); checkBoxReviewed.addEventListener(Events.ON_CHECK, new EventListener() { @Override public void onEvent(Event arg0) throws Exception { - customerComunication.setReviewed(checkBoxReviewed.isChecked()); - save(customerComunication); + customerCommunication.setReviewed(checkBoxReviewed.isChecked()); + save(customerCommunication); } }); @@ -174,13 +181,13 @@ public class CustomerComunicationCRUDController extends GenericForwardComposer { } private void appendOperations(Row row, - final CustomerComunication customerComunication) { + final CustomerCommunication customerCommunication) { Button buttonEdit = new Button(_("edit")); buttonEdit.addEventListener(Events.ON_CLICK, new EventListener() { @Override public void onEvent(Event arg0) throws Exception { - goToEdit(customerComunication); + goToEdit(customerCommunication); } }); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerCommunicationModel.java similarity index 59% rename from libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java rename to libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerCommunicationModel.java index 6061fe79d..319310868 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerComunicationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/CustomerCommunicationModel.java @@ -21,8 +21,8 @@ package org.libreplan.web.subcontract; import java.util.List; -import org.libreplan.business.externalcompanies.daos.ICustomerComunicationDAO; -import org.libreplan.business.externalcompanies.entities.CustomerComunication; +import org.libreplan.business.externalcompanies.daos.ICustomerCommunicationDAO; +import org.libreplan.business.externalcompanies.entities.CustomerCommunication; import org.libreplan.web.common.concurrentdetection.OnConcurrentModification; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; @@ -32,51 +32,51 @@ import org.springframework.transaction.annotation.Transactional; @Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) -@OnConcurrentModification(goToPage = "/subcontract/customerComunication.zul") -public class CustomerComunicationModel implements ICustomerComunicationModel{ +@OnConcurrentModification(goToPage = "/subcontract/customerCommunication.zul") +public class CustomerCommunicationModel implements ICustomerCommunicationModel{ @Autowired - private ICustomerComunicationDAO customerComunicationDAO; + private ICustomerCommunicationDAO customerCommunicationDAO; - private FilterComunicationEnum currentFilter = FilterComunicationEnum.NOT_REVIEWED; + private FilterCommunicationEnum currentFilter = FilterCommunicationEnum.NOT_REVIEWED; @Override @Transactional - public void confirmSave(CustomerComunication customerComunication){ - customerComunicationDAO.save(customerComunication); + public void confirmSave(CustomerCommunication customerCommunication){ + customerCommunicationDAO.save(customerCommunication); } @Override @Transactional - public List getCustomerAllComunications(){ - List list = customerComunicationDAO.getAll(); + public List getCustomerAllCommunications(){ + List list = customerCommunicationDAO.getAll(); forceLoadAssociatedData(list); return list; } @Override @Transactional - public List getCustomerComunicationWithoutReviewed(){ - List list = customerComunicationDAO.getAllNotReviewed(); + public List getCustomerCommunicationWithoutReviewed(){ + List list = customerCommunicationDAO.getAllNotReviewed(); forceLoadAssociatedData(list); return list; } - private void forceLoadAssociatedData(List customerComunicationList){ - if (customerComunicationList != null) { - for (CustomerComunication customerComunication : customerComunicationList) { - customerComunication.getOrder().getName(); + private void forceLoadAssociatedData(List customerCommunicationList){ + if (customerCommunicationList != null) { + for (CustomerCommunication customerCommunication : customerCommunicationList) { + customerCommunication.getOrder().getName(); } } } @Override - public void setCurrentFilter(FilterComunicationEnum currentFilter) { + public void setCurrentFilter(FilterCommunicationEnum currentFilter) { this.currentFilter = currentFilter; } @Override - public FilterComunicationEnum getCurrentFilter() { + public FilterCommunicationEnum getCurrentFilter() { return currentFilter; } } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterComunicationEnum.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterCommunicationEnum.java similarity index 85% rename from libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterComunicationEnum.java rename to libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterCommunicationEnum.java index cde63a19e..06282dedf 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterComunicationEnum.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/FilterCommunicationEnum.java @@ -20,11 +20,11 @@ package org.libreplan.web.subcontract; /** - * Enum to filter the {@link CustomerComunication} list. + * Enum to filter the {@link CustomerCommunication} list. * * @author Susana Montes Pedreira */ -public enum FilterComunicationEnum { +public enum FilterCommunicationEnum { ALL(_("All")), NOT_REVIEWED(_("Not Reviewed")); /** @@ -36,11 +36,11 @@ public enum FilterComunicationEnum { private String displayName; - private FilterComunicationEnum(String displayName) { + private FilterCommunicationEnum(String displayName) { this.displayName = displayName; } - public static FilterComunicationEnum getDefault() { + public static FilterCommunicationEnum getDefault() { return ALL; } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerCommunicationModel.java similarity index 70% rename from libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java rename to libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerCommunicationModel.java index 52febfc3d..7ec86cf0e 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerComunicationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ICustomerCommunicationModel.java @@ -21,18 +21,18 @@ package org.libreplan.web.subcontract; import java.util.List; -import org.libreplan.business.externalcompanies.entities.CustomerComunication; +import org.libreplan.business.externalcompanies.entities.CustomerCommunication; -public interface ICustomerComunicationModel { +public interface ICustomerCommunicationModel { - void confirmSave(CustomerComunication customerComunication); + void confirmSave(CustomerCommunication customerCommunication); - List getCustomerComunicationWithoutReviewed(); + List getCustomerCommunicationWithoutReviewed(); - List getCustomerAllComunications(); + List getCustomerAllCommunications(); - void setCurrentFilter(FilterComunicationEnum currentFilter); + void setCurrentFilter(FilterCommunicationEnum currentFilter); - FilterComunicationEnum getCurrentFilter(); + FilterCommunicationEnum getCurrentFilter(); } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorCommunicationModel.java similarity index 71% rename from libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorComunicationModel.java rename to libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorCommunicationModel.java index a2abec0a3..f78d05e76 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorComunicationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/ISubcontractorCommunicationModel.java @@ -24,19 +24,19 @@ import java.util.List; import org.libreplan.business.orders.entities.Order; import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.planner.entities.SubcontractedTaskData; -import org.libreplan.business.planner.entities.SubcontractorComunication; +import org.libreplan.business.planner.entities.SubcontractorCommunication; -public interface ISubcontractorComunicationModel { +public interface ISubcontractorCommunicationModel { - void confirmSave(SubcontractorComunication customerComunication); + void confirmSave(SubcontractorCommunication customerCommunication); - List getSubcontractorComunicationWithoutReviewed(); + List getSubcontractorCommunicationWithoutReviewed(); - List getSubcontractorAllComunications(); + List getSubcontractorAllCommunications(); - void setCurrentFilter(FilterComunicationEnum currentFilter); + void setCurrentFilter(FilterCommunicationEnum currentFilter); - FilterComunicationEnum getCurrentFilter(); + FilterCommunicationEnum getCurrentFilter(); String getOrderCode(SubcontractedTaskData subcontractedTaskData); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorCommunicationCRUDController.java similarity index 53% rename from libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java rename to libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorCommunicationCRUDController.java index f635f0b6c..3b18ddb88 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorCommunicationCRUDController.java @@ -29,17 +29,14 @@ import javax.annotation.Resource; import org.apache.commons.logging.LogFactory; import org.libreplan.business.common.exceptions.ValidationException; -import org.libreplan.business.externalcompanies.entities.ComunicationType; import org.libreplan.business.orders.entities.Order; import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.planner.entities.SubcontractedTaskData; -import org.libreplan.business.planner.entities.SubcontractorComunication; -import org.libreplan.business.planner.entities.SubcontractorComunicationValue; -import org.libreplan.business.planner.entities.Task; +import org.libreplan.business.planner.entities.SubcontractorCommunication; +import org.libreplan.business.planner.entities.SubcontractorCommunicationValue; import org.libreplan.business.planner.entities.TaskElement; import org.libreplan.web.common.IMessagesForUser; import org.libreplan.web.common.MessagesForUser; -import org.libreplan.web.common.Util; import org.libreplan.web.planner.tabs.IGlobalViewEntryPoints; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; @@ -50,26 +47,25 @@ import org.zkoss.zul.Button; import org.zkoss.zul.Checkbox; import org.zkoss.zul.Grid; import org.zkoss.zul.Label; -import org.zkoss.zul.Messagebox; import org.zkoss.zul.Popup; import org.zkoss.zul.Row; import org.zkoss.zul.RowRenderer; import org.zkoss.zul.SimpleListModel; /** - * Controller for CRUD actions over a {@link SubcontractorComunication} + * Controller for CRUD actions over a {@link SubcontractorCommunication} * * @author Susana Montes Pedreira */ @SuppressWarnings("serial") -public class SubcontractorComunicationCRUDController extends GenericForwardComposer { +public class SubcontractorCommunicationCRUDController extends GenericForwardComposer { private static final org.apache.commons.logging.Log LOG = LogFactory - .getLog(SubcontractorComunicationCRUDController.class); + .getLog(SubcontractorCommunicationCRUDController.class); - private ISubcontractorComunicationModel subcontractorComunicationModel; + private ISubcontractorCommunicationModel subcontractorCommunicationModel; - private SubcontractorComunicationRenderer subcontractorComunicationRenderer = new SubcontractorComunicationRenderer();; + private SubcontractorCommunicationRenderer subcontractorCommunicationRenderer = new SubcontractorCommunicationRenderer(); protected IMessagesForUser messagesForUser; @@ -93,66 +89,66 @@ public class SubcontractorComunicationCRUDController extends GenericForwardCompo messagesForUser = new MessagesForUser(messagesContainer); } - public void goToEdit(SubcontractorComunication subcontractorComunication) { - if(subcontractorComunication != null){ - TaskElement task = subcontractorComunication.getSubcontractedTaskData().getTask(); + public void goToEdit(SubcontractorCommunication subcontractorCommunication) { + if(subcontractorCommunication != null){ + TaskElement task = subcontractorCommunication.getSubcontractedTaskData().getTask(); OrderElement orderElement = task.getOrderElement(); - Order order = subcontractorComunicationModel.getOrder(orderElement); + Order order = subcontractorCommunicationModel.getOrder(orderElement); globalView.goToAdvanceTask(order,task); } } - public FilterComunicationEnum[] getFilterItems(){ - return FilterComunicationEnum.values(); + public FilterCommunicationEnum[] getFilterItems(){ + return FilterCommunicationEnum.values(); } - public FilterComunicationEnum getCurrentFilterItem() { - return subcontractorComunicationModel.getCurrentFilter(); + public FilterCommunicationEnum getCurrentFilterItem() { + return subcontractorCommunicationModel.getCurrentFilter(); } - public void setCurrentFilterItem(FilterComunicationEnum selected) { - subcontractorComunicationModel.setCurrentFilter(selected); + public void setCurrentFilterItem(FilterCommunicationEnum selected) { + subcontractorCommunicationModel.setCurrentFilter(selected); - // update the subcontractor comunication list - listing.setModel(new SimpleListModel(getSubcontractorComunications())); + // update the subcontractor communication list + listing.setModel(new SimpleListModel(getSubcontractorCommunications())); listing.invalidate(); } - protected void save(SubcontractorComunication subcontractorComunication) + protected void save(SubcontractorCommunication subcontractorCommunication) throws ValidationException { - subcontractorComunicationModel.confirmSave(subcontractorComunication); + subcontractorCommunicationModel.confirmSave(subcontractorCommunication); } - public List getSubcontractorComunications() { - FilterComunicationEnum currentFilter = subcontractorComunicationModel.getCurrentFilter(); + public List getSubcontractorCommunications() { + FilterCommunicationEnum currentFilter = subcontractorCommunicationModel.getCurrentFilter(); switch(currentFilter){ - case ALL: return subcontractorComunicationModel.getSubcontractorAllComunications(); - case NOT_REVIEWED: return subcontractorComunicationModel.getSubcontractorComunicationWithoutReviewed(); - default: return subcontractorComunicationModel.getSubcontractorAllComunications(); + case ALL: return subcontractorCommunicationModel.getSubcontractorAllCommunications(); + case NOT_REVIEWED: return subcontractorCommunicationModel.getSubcontractorCommunicationWithoutReviewed(); + default: return subcontractorCommunicationModel.getSubcontractorAllCommunications(); } } - public SubcontractorComunicationRenderer getSubcontractorComunicationRenderer() { - return subcontractorComunicationRenderer; + public SubcontractorCommunicationRenderer getSubcontractorCommunicationRenderer() { + return subcontractorCommunicationRenderer; } - private class SubcontractorComunicationRenderer implements + private class SubcontractorCommunicationRenderer implements RowRenderer { @Override public void render(Row row, Object data) { - SubcontractorComunication subcontractorComunication = (SubcontractorComunication) data; - row.setValue(subcontractorComunication); + SubcontractorCommunication subcontractorCommunication = (SubcontractorCommunication) data; + row.setValue(subcontractorCommunication); - appendLabel(row, subcontractorComunication.getComunicationType().toString()); - appendLabel(row, subcontractorComunication.getSubcontractedTaskData().getTask().getName()); - appendLabel(row, getOrderName(subcontractorComunication.getSubcontractedTaskData())); - appendLabel(row, getOrderCode(subcontractorComunication.getSubcontractedTaskData())); - appendLabel(row, subcontractorComunication.getSubcontractedTaskData().getExternalCompany().getName()); - appendLabel(row, toString(subcontractorComunication.getComunicationDate())); - appendLabelWitTooltip(row,subcontractorComunication); - appendCheckbox(row, subcontractorComunication); - appendOperations(row, subcontractorComunication); + appendLabel(row, subcontractorCommunication.getCommunicationType().toString()); + appendLabel(row, subcontractorCommunication.getSubcontractedTaskData().getTask().getName()); + appendLabel(row, getOrderName(subcontractorCommunication.getSubcontractedTaskData())); + appendLabel(row, getOrderCode(subcontractorCommunication.getSubcontractedTaskData())); + appendLabel(row, subcontractorCommunication.getSubcontractedTaskData().getExternalCompany().getName()); + appendLabel(row, toString(subcontractorCommunication.getCommunicationDate())); + appendLabelWitTooltip(row,subcontractorCommunication); + appendCheckbox(row, subcontractorCommunication); + appendOperations(row, subcontractorCommunication); } private String toString(Date date) { @@ -164,17 +160,17 @@ public class SubcontractorComunicationCRUDController extends GenericForwardCompo } private String getOrderCode(SubcontractedTaskData subcontractedTaskData) { - return subcontractorComunicationModel.getOrderCode(subcontractedTaskData); + return subcontractorCommunicationModel.getOrderCode(subcontractedTaskData); } private String getOrderName(SubcontractedTaskData subcontractedTaskData) { - return subcontractorComunicationModel.getOrderName(subcontractedTaskData); + return subcontractorCommunicationModel.getOrderName(subcontractedTaskData); } private String getLastValue( - SubcontractorComunication subcontractorComunication) { - SubcontractorComunicationValue value = subcontractorComunication - .getLastSubcontratorComunicationValues(); + SubcontractorCommunication subcontractorCommunication) { + SubcontractorCommunicationValue value = subcontractorCommunication + .getLastSubcontractorCommunicationValues(); return (value != null) ? value.toString() : ""; } @@ -182,8 +178,8 @@ public class SubcontractorComunicationCRUDController extends GenericForwardCompo row.appendChild(new Label(label)); } - private void appendLabelWitTooltip(final Row row,final SubcontractorComunication subcontractorComunication) { - String lastValue = getLastValue(subcontractorComunication); + private void appendLabelWitTooltip(final Row row,final SubcontractorCommunication subcontractorCommunication) { + String lastValue = getLastValue(subcontractorCommunication); final Label compLabel = new Label(lastValue); compLabel.setTooltip(pp); @@ -191,8 +187,8 @@ public class SubcontractorComunicationCRUDController extends GenericForwardCompo new EventListener() { @Override public void onEvent(Event arg0) throws Exception { - List model = subcontractorComunication - .getSubcontratorComunicationValues(); + List model = subcontractorCommunication + .getSubcontractorCommunicationValues(); listingValues.setModel(new SimpleListModel(model)); listingValues.invalidate(); } @@ -201,17 +197,17 @@ public class SubcontractorComunicationCRUDController extends GenericForwardCompo } private void appendCheckbox(Row row, - final SubcontractorComunication subcontractorComunication) { + final SubcontractorCommunication subcontractorCommunication) { final Checkbox checkBoxReviewed = new Checkbox(); - checkBoxReviewed.setChecked(subcontractorComunication.getReviewed()); + checkBoxReviewed.setChecked(subcontractorCommunication.getReviewed()); checkBoxReviewed.addEventListener(Events.ON_CHECK, new EventListener() { @Override public void onEvent(Event arg0) throws Exception { - subcontractorComunication.setReviewed(checkBoxReviewed.isChecked()); - save(subcontractorComunication); + subcontractorCommunication.setReviewed(checkBoxReviewed.isChecked()); + save(subcontractorCommunication); } }); @@ -220,13 +216,13 @@ public class SubcontractorComunicationCRUDController extends GenericForwardCompo } private void appendOperations(Row row, - final SubcontractorComunication subcontractorComunication) { + final SubcontractorCommunication subcontractorCommunication) { Button buttonEdit = new Button(_("edit")); buttonEdit.addEventListener(Events.ON_CLICK, new EventListener() { @Override public void onEvent(Event arg0) throws Exception { - goToEdit(subcontractorComunication); + goToEdit(subcontractorCommunication); } }); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorCommunicationModel.java similarity index 60% rename from libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java rename to libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorCommunicationModel.java index 051b64936..7f96c6db2 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorComunicationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractorCommunicationModel.java @@ -24,10 +24,10 @@ import java.util.List; import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.orders.entities.Order; import org.libreplan.business.orders.entities.OrderElement; -import org.libreplan.business.planner.daos.ISubcontractorComunicationDAO; +import org.libreplan.business.planner.daos.ISubcontractorCommunicationDAO; import org.libreplan.business.planner.entities.SubcontractedTaskData; -import org.libreplan.business.planner.entities.SubcontractorComunication; -import org.libreplan.business.planner.entities.SubcontractorComunicationValue; +import org.libreplan.business.planner.entities.SubcontractorCommunication; +import org.libreplan.business.planner.entities.SubcontractorCommunicationValue; import org.libreplan.business.planner.entities.Task; import org.libreplan.web.common.concurrentdetection.OnConcurrentModification; import org.springframework.beans.factory.annotation.Autowired; @@ -38,53 +38,53 @@ import org.springframework.transaction.annotation.Transactional; @Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) -@OnConcurrentModification(goToPage = "/subcontract/subcontractorComunication.zul") -public class SubcontractorComunicationModel implements ISubcontractorComunicationModel{ +@OnConcurrentModification(goToPage = "/subcontract/subcontractorCommunication.zul") +public class SubcontractorCommunicationModel implements ISubcontractorCommunicationModel{ @Autowired - private ISubcontractorComunicationDAO subcontractorComunicationDAO; + private ISubcontractorCommunicationDAO subcontractorCommunicationDAO; @Autowired IOrderDAO orderDAO; - private FilterComunicationEnum currentFilter = FilterComunicationEnum.NOT_REVIEWED; + private FilterCommunicationEnum currentFilter = FilterCommunicationEnum.NOT_REVIEWED; @Override @Transactional - public void confirmSave(SubcontractorComunication subcontractorComunication){ - subcontractorComunicationDAO.save(subcontractorComunication); + public void confirmSave(SubcontractorCommunication subcontractorCommunication){ + subcontractorCommunicationDAO.save(subcontractorCommunication); } @Override @Transactional - public List getSubcontractorAllComunications(){ - List list = subcontractorComunicationDAO.getAll(); + public List getSubcontractorAllCommunications(){ + List list = subcontractorCommunicationDAO.getAll(); forceLoadAssociatedData(list); return list; } @Override @Transactional - public List getSubcontractorComunicationWithoutReviewed(){ - List list = subcontractorComunicationDAO.getAllNotReviewed(); + public List getSubcontractorCommunicationWithoutReviewed(){ + List list = subcontractorCommunicationDAO.getAllNotReviewed(); forceLoadAssociatedData(list); return list; } - private void forceLoadAssociatedData(List subcontractorComunicationList){ - if (subcontractorComunicationList != null) { - for (SubcontractorComunication subcontractorComunication : subcontractorComunicationList) { - subcontractorComunication.getSubcontractedTaskData().getExternalCompany().getName(); - subcontractorComunication.getSubcontractedTaskData().getTask().getName(); - subcontractorComunication.getSubcontractedTaskData().getTask().getOrderElement().getName(); - subcontractorComunication.getLastSubcontratorComunicationValues().getDate(); + private void forceLoadAssociatedData(List subcontractorCommunicationList){ + if (subcontractorCommunicationList != null) { + for (SubcontractorCommunication subcontractorCommunication : subcontractorCommunicationList) { + subcontractorCommunication.getSubcontractedTaskData().getExternalCompany().getName(); + subcontractorCommunication.getSubcontractedTaskData().getTask().getName(); + subcontractorCommunication.getSubcontractedTaskData().getTask().getOrderElement().getName(); + subcontractorCommunication.getLastSubcontractorCommunicationValues().getDate(); } } } - private void forceLoadAssociatedDataValue(List subcontractorComunicationValueList){ - if (subcontractorComunicationValueList != null) { - for (SubcontractorComunicationValue value : subcontractorComunicationValueList) { + private void forceLoadAssociatedDataValue(List subcontractorCommunicationValueList){ + if (subcontractorCommunicationValueList != null) { + for (SubcontractorCommunicationValue value : subcontractorCommunicationValueList) { value.getDate(); } } @@ -109,12 +109,12 @@ public class SubcontractorComunicationModel implements ISubcontractorComunicatio } @Override - public void setCurrentFilter(FilterComunicationEnum currentFilter) { + public void setCurrentFilter(FilterCommunicationEnum currentFilter) { this.currentFilter = currentFilter; } @Override - public FilterComunicationEnum getCurrentFilter() { + public FilterCommunicationEnum getCurrentFilter() { return currentFilter; } diff --git a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java index 8b96f0a87..d07217cb3 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java +++ b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/ReportAdvancesServiceREST.java @@ -46,17 +46,17 @@ import org.libreplan.business.advance.exceptions.DuplicateValueTrueReportGlobalA import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.common.exceptions.ValidationException; import org.libreplan.business.externalcompanies.daos.IExternalCompanyDAO; -import org.libreplan.business.externalcompanies.entities.ComunicationType; +import org.libreplan.business.externalcompanies.entities.CommunicationType; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.orders.daos.IOrderElementDAO; import org.libreplan.business.orders.entities.Order; import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.planner.daos.ISubcontractedTaskDataDAO; -import org.libreplan.business.planner.daos.ISubcontractorComunicationDAO; +import org.libreplan.business.planner.daos.ISubcontractorCommunicationDAO; import org.libreplan.business.planner.entities.SubcontractedTaskData; -import org.libreplan.business.planner.entities.SubcontractorComunication; -import org.libreplan.business.planner.entities.SubcontractorComunicationValue; +import org.libreplan.business.planner.entities.SubcontractorCommunication; +import org.libreplan.business.planner.entities.SubcontractorCommunicationValue; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.scenarios.bootstrap.PredefinedScenarios; import org.libreplan.business.scenarios.entities.OrderVersion; @@ -93,7 +93,7 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService { private ISubcontractedTaskDataDAO subcontractedTaskDataDAO; @Autowired - private ISubcontractorComunicationDAO subcontractorComunicationDAO; + private ISubcontractorCommunicationDAO subcontractorCommunicationDAO; @Autowired private IOrderDAO orderDAO; @@ -212,10 +212,10 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService { /* * If the order element is subcontrated then create the - * subcontrated comunication for the subcontrated task data to + * subcontrated communication for the subcontrated task data to * which the order element belongs. */ - createSubcontractorComunication( + createSubcontractorCommunication( orderElement, orderElementWithAdvanceMeasurementsDTO.advanceMeasurements); @@ -241,7 +241,7 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService { instanceConstraintViolationsList); } - public void createSubcontractorComunication(OrderElement orderElement, + public void createSubcontractorCommunication(OrderElement orderElement, Set advanceMeasurementDTOs) throws InstanceNotFoundException { if (orderElement != null @@ -251,26 +251,26 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService { SubcontractedTaskData subcontractedTaskData = task .getSubcontractedTaskData(); if (subcontractedTaskData != null) { - SubcontractorComunication subcontractorComunication = SubcontractorComunication + SubcontractorCommunication subcontractorCommunication = SubcontractorCommunication .create(subcontractedTaskData, - ComunicationType.REPORT_PROGRESS, new Date(), + CommunicationType.REPORT_PROGRESS, new Date(), false); for (AdvanceMeasurementDTO advanceMeasurementDTO : advanceMeasurementDTOs) { - // add subcontractorComunicationValue - addSubcontractorComunicationValue(advanceMeasurementDTO, - subcontractorComunication); + // add subcontractorCommunicationValue + addSubcontractorCommunicationValue(advanceMeasurementDTO, + subcontractorCommunication); } - subcontractorComunicationDAO.save(subcontractorComunication); + subcontractorCommunicationDAO.save(subcontractorCommunication); } } } - private void addSubcontractorComunicationValue(AdvanceMeasurementDTO advanceMeasurementDTO, SubcontractorComunication subcontractorComunication ){ + private void addSubcontractorCommunicationValue(AdvanceMeasurementDTO advanceMeasurementDTO, SubcontractorCommunication subcontractorCommunication ){ Date dateValue = DateConverter.toDate(advanceMeasurementDTO.date); - SubcontractorComunicationValue value = SubcontractorComunicationValue + SubcontractorCommunicationValue value = SubcontractorCommunicationValue .create(dateValue, advanceMeasurementDTO.value); - subcontractorComunication.getSubcontratorComunicationValues() + subcontractorCommunication.getSubcontractorCommunicationValues() .add(value); } diff --git a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java index b3157cf0a..b1c662ca5 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java +++ b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java @@ -47,10 +47,10 @@ import org.libreplan.business.common.entities.EntityNameEnum; import org.libreplan.business.common.entities.EntitySequence; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.common.exceptions.ValidationException; -import org.libreplan.business.externalcompanies.daos.ICustomerComunicationDAO; +import org.libreplan.business.externalcompanies.daos.ICustomerCommunicationDAO; import org.libreplan.business.externalcompanies.daos.IExternalCompanyDAO; -import org.libreplan.business.externalcompanies.entities.ComunicationType; -import org.libreplan.business.externalcompanies.entities.CustomerComunication; +import org.libreplan.business.externalcompanies.entities.CommunicationType; +import org.libreplan.business.externalcompanies.entities.CustomerCommunication; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.orders.daos.IOrderElementDAO; import org.libreplan.business.orders.entities.Order; @@ -104,7 +104,7 @@ public class SubcontractServiceREST implements ISubcontractService { private IScenarioDAO scenarioDAO; @Autowired - private ICustomerComunicationDAO customerComunicationDAO; + private ICustomerCommunicationDAO customerCommunicationDAO; @Autowired private ITaskSourceDAO taskSourceDAO; @@ -240,10 +240,10 @@ public class SubcontractServiceREST implements ISubcontractService { orderElementDAO.save(order); /* - * create the customer comunication to a new subcontrating project. + * create the customer communication to a new subcontrating project. */ if(!StringUtils.isBlank(order.getExternalCode())){ - createCustomerComunication(order); + createCustomerCommunication(order); } } @@ -323,12 +323,20 @@ public class SubcontractServiceREST implements ISubcontractService { Util.generateInstanceId(1, code), message); } - private void createCustomerComunication(Order order){ + private void createCustomerCommunication(Order order){ Date deadline = order.getDeadline(); - Date comunicationDate = new Date(); - CustomerComunication customerComunication = CustomerComunication - .create(deadline, comunicationDate, - ComunicationType.NEW_PROJECT, order); - customerComunicationDAO.save(customerComunication); + Date communicationDate = new Date(); + CustomerCommunication customerCommunication = CustomerCommunication + .create(deadline, communicationDate, + CommunicationType.NEW_PROJECT, order); + if(customerCommunication.getCommunicationType() != null){ + System.out.println(" type before "+ customerCommunication.getCommunicationType().toString()); + }else{ + customerCommunication.setCommunicationType(CommunicationType.NEW_PROJECT); + } + customerCommunicationDAO.save(customerCommunication); + if(customerCommunication.getCommunicationType() != null){ + System.out.println(" type after "+ customerCommunication.getCommunicationType().toString()); + } } } diff --git a/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul b/libreplan-webapp/src/main/webapp/subcontract/customerCommunications.zul similarity index 89% rename from libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul rename to libreplan-webapp/src/main/webapp/subcontract/customerCommunications.zul index 7aec332a9..6d5e6b9b9 100644 --- a/libreplan-webapp/src/main/webapp/subcontract/customerComunications.zul +++ b/libreplan-webapp/src/main/webapp/subcontract/customerCommunications.zul @@ -28,7 +28,7 @@ @@ -42,16 +42,16 @@ - + - + diff --git a/libreplan-webapp/src/main/webapp/subcontract/subcontractorComunications.zul b/libreplan-webapp/src/main/webapp/subcontract/subcontractorCommunications.zul similarity index 83% rename from libreplan-webapp/src/main/webapp/subcontract/subcontractorComunications.zul rename to libreplan-webapp/src/main/webapp/subcontract/subcontractorCommunications.zul index 01427bafc..1d0fe0ba2 100644 --- a/libreplan-webapp/src/main/webapp/subcontract/subcontractorComunications.zul +++ b/libreplan-webapp/src/main/webapp/subcontract/subcontractorCommunications.zul @@ -28,7 +28,7 @@ @@ -42,17 +42,17 @@ - + - - + + @@ -60,13 +60,13 @@ - + - + - + diff --git a/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java b/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java index e88f98a99..0fb6a177f 100644 --- a/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java +++ b/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java @@ -72,7 +72,7 @@ import org.libreplan.business.orders.entities.SchedulingDataForVersion; import org.libreplan.business.orders.entities.TaskSource; import org.libreplan.business.orders.entities.TaskSource.TaskSourceSynchronization; import org.libreplan.business.planner.daos.ISubcontractedTaskDataDAO; -import org.libreplan.business.planner.daos.ISubcontractorComunicationDAO; +import org.libreplan.business.planner.daos.ISubcontractorCommunicationDAO; import org.libreplan.business.planner.daos.ITaskElementDAO; import org.libreplan.business.planner.daos.ITaskSourceDAO; import org.libreplan.business.planner.entities.SubcontractedTaskData; @@ -86,7 +86,7 @@ import org.libreplan.ws.subcontract.api.IReportAdvancesService; import org.libreplan.ws.subcontract.api.OrderElementWithAdvanceMeasurementsDTO; import org.libreplan.ws.subcontract.api.OrderElementWithAdvanceMeasurementsListDTO; import org.springframework.beans.factory.annotation.Autowired; -import org.libreplan.business.planner.entities.SubcontractorComunication; +import org.libreplan.business.planner.entities.SubcontractorCommunication; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; @@ -155,7 +155,7 @@ public class ReportAdvancesServiceTest { private IScenarioManager scenarioManager; @Autowired - private ISubcontractorComunicationDAO subcontractorComunicationDAO; + private ISubcontractorCommunicationDAO subcontractorCommunicationDAO; @Autowired private ISubcontractedTaskDataDAO subcontractorTaskDataDAO; @@ -235,7 +235,7 @@ public class ReportAdvancesServiceTest { @Test public void validAdvancesReportToSubcontratedOrderElement() { - int previousComunications = subcontractorComunicationDAO.getAll().size(); + int previousCommunications = subcontractorCommunicationDAO.getAll().size(); OrderLine orderLine = createOrderLine(); String orderElementCode = orderLine.getCode(); @@ -244,7 +244,7 @@ public class ReportAdvancesServiceTest { OrderElementWithAdvanceMeasurementsListDTO orderElementWithAdvanceMeasurementsListDTO = givenOrderElementWithAdvanceMeasurementsListDTO( orderElementCode, values); - SubcontractorComunication subcontractorComunication = SubcontractorComunication.create(); + SubcontractorCommunication subcontractorCommunication = SubcontractorCommunication.create(); reportAdvancesService .updateAdvances(orderElementWithAdvanceMeasurementsListDTO); @@ -270,8 +270,8 @@ public class ReportAdvancesServiceTest { assertThat(advanceMeasurement.getValue(), equalTo(entry.getValue())); } - int currentComunications = subcontractorComunicationDAO.getAll().size(); - assertThat((previousComunications+1), equalTo(currentComunications)); + int currentCommunications = subcontractorCommunicationDAO.getAll().size(); + assertThat((previousCommunications+1), equalTo(currentCommunications)); } @Test diff --git a/libreplan-webapp/src/test/resources/libreplan-webapp-spring-config-test.xml b/libreplan-webapp/src/test/resources/libreplan-webapp-spring-config-test.xml index d440fb211..64d97c1f5 100644 --- a/libreplan-webapp/src/test/resources/libreplan-webapp-spring-config-test.xml +++ b/libreplan-webapp/src/test/resources/libreplan-webapp-spring-config-test.xml @@ -85,7 +85,7 @@ org/libreplan/business/planner/entities/AdvanceConsolidations.hbm.xml - org/libreplan/business/planner/entities/SubcontractorComunication.hbm.xml + org/libreplan/business/planner/entities/SubcontractorCommunication.hbm.xml org/libreplan/business/scenarios/entities/Scenarios.hbm.xml From 47e653302264ebeb9395e14860a89c33f4a7d786 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Wed, 23 Nov 2011 17:31:07 +0100 Subject: [PATCH 17/88] it removes unnecessary prints of text. --- .../ws/subcontract/impl/SubcontractServiceREST.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java index b1c662ca5..b6570364e 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java +++ b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/impl/SubcontractServiceREST.java @@ -329,14 +329,6 @@ public class SubcontractServiceREST implements ISubcontractService { CustomerCommunication customerCommunication = CustomerCommunication .create(deadline, communicationDate, CommunicationType.NEW_PROJECT, order); - if(customerCommunication.getCommunicationType() != null){ - System.out.println(" type before "+ customerCommunication.getCommunicationType().toString()); - }else{ - customerCommunication.setCommunicationType(CommunicationType.NEW_PROJECT); - } customerCommunicationDAO.save(customerCommunication); - if(customerCommunication.getCommunicationType() != null){ - System.out.println(" type after "+ customerCommunication.getCommunicationType().toString()); - } } } From ddb28627945c38abbda79a286aab93def20b005f Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Wed, 23 Nov 2011 17:32:32 +0100 Subject: [PATCH 18/88] Avoid to subcontract a task if there are subcontractor progresses incompatible with receiving progress reporting from the provider FEA: ItEr75S31PreventingSubcontractorProgresses --- .../taskedition/TaskPropertiesController.java | 53 ++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/taskedition/TaskPropertiesController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/taskedition/TaskPropertiesController.java index 63743d0cf..1a5f2c6a1 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/taskedition/TaskPropertiesController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/taskedition/TaskPropertiesController.java @@ -29,7 +29,13 @@ import java.util.Iterator; import java.util.List; import org.joda.time.LocalDate; +import org.libreplan.business.advance.bootstrap.PredefinedAdvancedTypes; +import org.libreplan.business.advance.entities.AdvanceType; +import org.libreplan.business.advance.entities.DirectAdvanceAssignment; +import org.libreplan.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException; +import org.libreplan.business.orders.daos.IOrderElementDAO; import org.libreplan.business.orders.entities.Order; +import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.planner.entities.ITaskPositionConstrained; import org.libreplan.business.planner.entities.PositionConstraintType; import org.libreplan.business.planner.entities.Task; @@ -42,6 +48,7 @@ import org.libreplan.web.common.Util; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; +import org.springframework.transaction.annotation.Transactional; import org.zkoss.ganttz.TaskEditFormComposer; import org.zkoss.ganttz.TaskEditFormComposer.TaskDTO; import org.zkoss.ganttz.data.TaskContainer; @@ -158,6 +165,12 @@ public class TaskPropertiesController extends GenericForwardComposer { return topTask.getParent().getOrderElement().getOrder(); } + private OrderElement findOrderElementIn(IContextWithPlannerTask context) { + TaskElement topTask = context.getMapper().findAssociatedDomainObject( + findTopMostTask(context)); + return topTask.getOrderElement(); + } + private org.zkoss.ganttz.data.Task findTopMostTask( IContextWithPlannerTask context) { List parents = context.getMapper().getParents( @@ -316,9 +329,20 @@ public class TaskPropertiesController extends GenericForwardComposer { restoreOldState(); editTaskController.showNonPermitChangeResourceAllocationType(); } else { - changeResourceAllocationType(oldState, newState); - editTaskController.selectAssignmentTab(lbResourceAllocationType + if(newState.equals(ResourceAllocationTypeEnum.SUBCONTRACT) && checkCompatibleAllocation()){ + changeResourceAllocationType(oldState, newState); + editTaskController.selectAssignmentTab(lbResourceAllocationType .getSelectedIndex() + 1); + }else{ + try { + restoreOldState(); + Messagebox.show(_("This resource allocation type is incompatible. The task has an associated order element which has a progress that is of type subcontractor. "), + _("Error"), Messagebox.OK , Messagebox.ERROR); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } } } if (oldState == null) { @@ -340,6 +364,30 @@ public class TaskPropertiesController extends GenericForwardComposer { } + private boolean checkCompatibleAllocation(){ + OrderElement orderElement = null; + AdvanceType advanceType = PredefinedAdvancedTypes.SUBCONTRACTOR.getType(); + + if (this.currentContext != null) { + orderElement = findOrderElementIn(this.currentContext ); + } else { + orderElement = this.currentTaskElement.getOrderElement(); + } + if(orderElement.getAdvanceAssignmentByType(advanceType) != null){ + return false; + } + try { + DirectAdvanceAssignment newAdvanceAssignment = DirectAdvanceAssignment + .create(); + newAdvanceAssignment.setAdvanceType(advanceType); + orderElement.checkAncestorsNoOtherAssignmentWithSameAdvanceType( + orderElement.getParent(), newAdvanceAssignment); + } catch (DuplicateAdvanceAssignmentForOrderElementException e) { + return false; + } + return true; + } + private boolean thereIsTransition(ResourceAllocationTypeEnum newState) { return getOldState() != null && !getOldState().equals(newState); } @@ -630,4 +678,5 @@ public class TaskPropertiesController extends GenericForwardComposer { .toDate(); Util.reloadBindings(startDateBox); } + } From 83a99b9b87977e10c3412d4d7024aaaf19ca5638 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Wed, 23 Nov 2011 17:33:58 +0100 Subject: [PATCH 19/88] Avoid to add subcontractor progress in a project with subcontracted tasks. FEA: ItEr75S31PreventingSubcontractorProgresses --- .../orders/entities/OrderElement.java | 2 +- .../ManageOrderElementAdvancesModel.java | 36 ++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java index a4452917b..7f4f9f501 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java +++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java @@ -721,7 +721,7 @@ public abstract class OrderElement extends IntegrationEntity implements * @param newAdvanceAssignment * @throws DuplicateAdvanceAssignmentForOrderElementException */ - private void checkAncestorsNoOtherAssignmentWithSameAdvanceType( + public void checkAncestorsNoOtherAssignmentWithSameAdvanceType( OrderElement orderElement, DirectAdvanceAssignment newAdvanceAssignment) throws DuplicateAdvanceAssignmentForOrderElementException { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/ManageOrderElementAdvancesModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/ManageOrderElementAdvancesModel.java index f8d973aa5..9c5a8082c 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/ManageOrderElementAdvancesModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/ManageOrderElementAdvancesModel.java @@ -57,6 +57,7 @@ import org.libreplan.business.advance.exceptions.DuplicateValueTrueReportGlobalA import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.orders.daos.IOrderElementDAO; import org.libreplan.business.orders.entities.OrderElement; +import org.libreplan.business.planner.entities.TaskElement; import org.libreplan.business.planner.entities.consolidations.CalculatedConsolidatedValue; import org.libreplan.business.planner.entities.consolidations.CalculatedConsolidation; import org.springframework.beans.factory.annotation.Autowired; @@ -349,6 +350,14 @@ public class ManageOrderElementAdvancesModel implements continue; } } + // if the associated task of the order elemement or of some its + // children is subcontrated the advance type subcontractor is not + // permitted + if (advanceType.getUnitName().equals( + PredefinedAdvancedTypes.SUBCONTRACTOR.getTypeName()) + && hasAnySubcontratedTaskOnChildren()) { + continue; + } advanceTypes.add(advanceType); } return getSpecificOrder(advanceTypes); @@ -407,7 +416,11 @@ public class ManageOrderElementAdvancesModel implements } } - return this.isIndirectAdvanceAssignment; + if(isIndirectAdvanceAssignment){ + return true; + } + + return this.hasSubcontractedAssociatedTask(this.orderElement); } @Override @@ -875,4 +888,25 @@ public class ManageOrderElementAdvancesModel implements } + public boolean hasAnySubcontratedTaskOnChildren() { + List list = new ArrayList(); + list.add(orderElement); + list.addAll(orderElement.getAllChildren()); + for (OrderElement child : list) { + if (hasSubcontractedAssociatedTask(child)) { + return true; + } + } + return false; + } + + public boolean hasSubcontractedAssociatedTask(OrderElement orderElement) { + for (TaskElement task : orderElement.getTaskElements()) { + if (task.isSubcontracted()) { + return true; + } + } + return false; + } + } From 31e899353e4c21d3e7c412b09dd878a0e4f8aa18 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Mon, 12 Dec 2011 09:49:52 +0100 Subject: [PATCH 20/88] create the class DeadlineCommunication FEA: ItEr75S32AnA15S04UpdateDeliveringDateInSubcontracting --- .../entities/DeadlineCommunication.java | 72 +++++++++++++++++++ .../src/main/resources/db.changelog-1.2.xml | 13 ++++ .../entities/ExternalCompanies.hbm.xml | 13 ++++ 3 files changed, 98 insertions(+) create mode 100644 libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunication.java diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunication.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunication.java new file mode 100644 index 000000000..42e431bd5 --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunication.java @@ -0,0 +1,72 @@ +/* + * This file is part of LibrePlan + * + * Copyright (C) 2011 WirelessGalicia, 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 . + */ + +package org.libreplan.business.externalcompanies.entities; + +import java.util.Date; +import org.hibernate.validator.NotEmpty; +import org.hibernate.validator.NotNull; +import org.libreplan.business.common.BaseEntity; + +/** + * Entity DeadlineCommunication + * + * @author Susana Montes Pedreira + */ +public class DeadlineCommunication extends BaseEntity { + + private Date saveDate; + + private Date deliverDate; + + protected DeadlineCommunication(){ + + } + + private DeadlineCommunication(Date saveDate, Date deliverDate){ + this.setSaveDate(saveDate); + this.setDeliverDate(deliverDate); + } + + public static DeadlineCommunication create(Date saveDate, Date deliverDate){ + return create(new DeadlineCommunication(saveDate, deliverDate)); + } + + public static DeadlineCommunication create() { + return create(new DeadlineCommunication()); + } + + public void setSaveDate(Date saveDate) { + this.saveDate = saveDate; + } + + @NotNull + public Date getSaveDate() { + return saveDate; + } + + public void setDeliverDate(Date deliverDate) { + this.deliverDate = deliverDate; + } + + public Date getDeliverDate() { + return deliverDate; + } + +} diff --git a/libreplan-business/src/main/resources/db.changelog-1.2.xml b/libreplan-business/src/main/resources/db.changelog-1.2.xml index 37f7b1748..fa2c2d2b2 100644 --- a/libreplan-business/src/main/resources/db.changelog-1.2.xml +++ b/libreplan-business/src/main/resources/db.changelog-1.2.xml @@ -90,4 +90,17 @@ newColumnName="subcontractor_communication_id"/> + + + + + + + + + + + + + diff --git a/libreplan-business/src/main/resources/org/libreplan/business/externalcompanies/entities/ExternalCompanies.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/externalcompanies/entities/ExternalCompanies.hbm.xml index 969c5b19b..c19795179 100644 --- a/libreplan-business/src/main/resources/org/libreplan/business/externalcompanies/entities/ExternalCompanies.hbm.xml +++ b/libreplan-business/src/main/resources/org/libreplan/business/externalcompanies/entities/ExternalCompanies.hbm.xml @@ -55,4 +55,17 @@ + + + + + 100 + + + + + + + + From 69fc902751999e5d3dec3f55fcd0f1ad5ff8d5fb Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Mon, 12 Dec 2011 11:28:04 +0100 Subject: [PATCH 21/88] creates a new field in the Order entity to store the delivering dates communications. FEA: ItEr75S32AnA15S04UpdateDeliveringDateInSubcontracting --- .../DeadlineCommunicationComparator.java | 49 ++++++++++++++++ .../business/orders/entities/Order.java | 19 +++++++ .../src/main/resources/db.changelog-1.2.xml | 7 +++ .../business/orders/entities/Orders.hbm.xml | 8 +++ .../test/orders/daos/OrderDAOTest.java | 56 +++++++++++++++++++ 5 files changed, 139 insertions(+) create mode 100644 libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunicationComparator.java diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunicationComparator.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunicationComparator.java new file mode 100644 index 000000000..5557ed297 --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunicationComparator.java @@ -0,0 +1,49 @@ +/* + * This file is part of LibrePlan + * + * Copyright (C) 2011 WirelessGalicia, 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 . + */ + +package org.libreplan.business.externalcompanies.entities; + +import java.util.Comparator; + +import org.libreplan.business.externalcompanies.entities.DeadlineCommunication; + +/** +* Comparator to {@link DeadlineCommunication} +* +* @author Susana Montes Pedreira +*/ +public class DeadlineCommunicationComparator implements Comparator { + + public DeadlineCommunicationComparator(){ + } + + @Override + public int compare(DeadlineCommunication arg0, DeadlineCommunication arg1) { + if (arg0.getSaveDate() == arg1.getSaveDate()) { + return 0; + } + if (arg0.getSaveDate() == null) { + return -1; + } + if (arg1.getSaveDate() == null) { + return 1; + } + return arg1.getSaveDate().compareTo(arg0.getSaveDate()); + } + } diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java index c355d5f41..dcbeb9912 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java +++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java @@ -29,12 +29,17 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.Validate; import org.hibernate.validator.AssertTrue; import org.hibernate.validator.NotNull; +import org.hibernate.validator.Valid; import org.libreplan.business.advance.bootstrap.PredefinedAdvancedTypes; +import org.libreplan.business.advance.entities.AdvanceMeasurement; +import org.libreplan.business.advance.entities.AdvanceMeasurementComparator; import org.libreplan.business.advance.entities.AdvanceType; import org.libreplan.business.advance.entities.DirectAdvanceAssignment; import org.libreplan.business.calendars.entities.BaseCalendar; @@ -42,6 +47,8 @@ import org.libreplan.business.common.Registry; import org.libreplan.business.common.entities.EntitySequence; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.externalcompanies.entities.CustomerCommunication; +import org.libreplan.business.externalcompanies.entities.DeadlineCommunication; +import org.libreplan.business.externalcompanies.entities.DeadlineCommunicationComparator; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.planner.entities.DayAssignment; @@ -107,6 +114,10 @@ public class Order extends OrderLineGroup implements Comparable { private Set customerCommunications = new HashSet(); + @Valid + private SortedSet deliveringDates = new TreeSet( + new DeadlineCommunicationComparator()); + public enum SchedulingMode { FORWARD, BACKWARDS; } @@ -576,4 +587,12 @@ public class Order extends OrderLineGroup implements Comparable { return customerCommunications; } + public void setDeliveringDates(SortedSet deliveringDates) { + this.deliveringDates = deliveringDates; + } + + public SortedSet getDeliveringDates() { + return deliveringDates; + } + } diff --git a/libreplan-business/src/main/resources/db.changelog-1.2.xml b/libreplan-business/src/main/resources/db.changelog-1.2.xml index fa2c2d2b2..3587c4c81 100644 --- a/libreplan-business/src/main/resources/db.changelog-1.2.xml +++ b/libreplan-business/src/main/resources/db.changelog-1.2.xml @@ -103,4 +103,11 @@ + + Add new delivering date column to order + + + + + diff --git a/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml index 9a64422d8..49bb65994 100644 --- a/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml +++ b/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml @@ -150,6 +150,14 @@ + + + + + + diff --git a/libreplan-business/src/test/java/org/libreplan/business/test/orders/daos/OrderDAOTest.java b/libreplan-business/src/test/java/org/libreplan/business/test/orders/daos/OrderDAOTest.java index 347dea5c7..44118161a 100644 --- a/libreplan-business/src/test/java/org/libreplan/business/test/orders/daos/OrderDAOTest.java +++ b/libreplan-business/src/test/java/org/libreplan/business/test/orders/daos/OrderDAOTest.java @@ -20,12 +20,17 @@ package org.libreplan.business.test.orders.daos; import static junit.framework.Assert.assertNotNull; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; import static org.libreplan.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE; import static org.libreplan.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE; import java.util.Date; import java.util.UUID; +import org.joda.time.LocalDate; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -34,6 +39,7 @@ import org.libreplan.business.calendars.entities.BaseCalendar; import org.libreplan.business.common.IAdHocTransactionService; import org.libreplan.business.common.IOnTransaction; import org.libreplan.business.common.exceptions.ValidationException; +import org.libreplan.business.externalcompanies.entities.DeadlineCommunication; import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.orders.entities.Order; import org.libreplan.business.scenarios.IScenarioManager; @@ -102,6 +108,56 @@ public class OrderDAOTest { return order; } + private Order createValidOrderWithDeadlineCommunications(String name) { + Order order = createValidOrder(name); + + //create two deadline communications + Date date1 = (new Date()); + Date date2 = (new LocalDate(date1).plusDays(3)).toDateTimeAtStartOfDay().toDate(); + + DeadlineCommunication deadlineCommunication1 = DeadlineCommunication.create(date1, null); + DeadlineCommunication deadlineCommunication2 = DeadlineCommunication.create(date2, null); + + order.getDeliveringDates().add(deadlineCommunication1); + order.getDeliveringDates().add(deadlineCommunication2); + + return order; + } + + @Test + public void testSaveOrdersWithDeliveringDates() { + Order order = createValidOrderWithDeadlineCommunications("test"); + orderDAO.save(order); + orderDAO.flush(); + + assertThat(order.getDeliveringDates().size(), equalTo(2)); + + DeadlineCommunication dcFirst = order.getDeliveringDates().first(); + DeadlineCommunication dcLast = order.getDeliveringDates().last(); + + assertTrue(dcFirst.getSaveDate().after(dcLast.getSaveDate())); + + + //A new DeadlineCommunication is placed between the existing communications. + Date date = (new LocalDate(dcLast.getSaveDate()).plusDays(2)).toDateTimeAtStartOfDay().toDate(); + DeadlineCommunication deadlineCommunication = DeadlineCommunication.create(date, null); + order.getDeliveringDates().add(deadlineCommunication); + + orderDAO.save(order); + orderDAO.flush(); + + assertThat(order.getDeliveringDates().size(), equalTo(3)); + + dcFirst = order.getDeliveringDates().first(); + dcLast = order.getDeliveringDates().last(); + DeadlineCommunication new_dc = (DeadlineCommunication) order.getDeliveringDates().toArray()[1]; + + assertTrue(dcFirst.getSaveDate().after(dcLast.getSaveDate())); + assertTrue(dcFirst.getSaveDate().after(new_dc.getSaveDate())); + assertFalse(dcLast.equals(new_dc)); + assertTrue(dcLast.getSaveDate().before(new_dc.getSaveDate())); + } + @Test public void testSaveTwoOrdersWithDifferentNames() { transactionService.runOnAnotherTransaction(new IOnTransaction() { From 1c5ccd755d81ff5372300c5d4a55c1d1e5746a1f Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Mon, 12 Dec 2011 11:28:04 +0100 Subject: [PATCH 22/88] creates a new field in the Order entity to store the delivering dates communications. FEA: ItEr75S32AnA15S04UpdateDeliveringDateInSubcontracting --- .../entities/DeadlineCommunicationComparator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunicationComparator.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunicationComparator.java index 5557ed297..11382737d 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunicationComparator.java +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunicationComparator.java @@ -28,6 +28,7 @@ import org.libreplan.business.externalcompanies.entities.DeadlineCommunication; * * @author Susana Montes Pedreira */ + public class DeadlineCommunicationComparator implements Comparator { public DeadlineCommunicationComparator(){ From 5e6622d71e250842d01fcf56cc6dd99d1c2a9931 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Mon, 12 Dec 2011 13:12:29 +0100 Subject: [PATCH 23/88] Create the class SubcontractorDeliverDate FEA: ItEr75S32AnA15S04UpdateDeliveringDateInSubcontracting --- .../entities/SubcontractorDeliverDate.java | 80 +++++++++++++++++++ .../src/main/resources/db.changelog-1.2.xml | 14 ++++ .../SubcontractorCommunication.hbm.xml | 14 +++- 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorDeliverDate.java diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorDeliverDate.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorDeliverDate.java new file mode 100644 index 000000000..d17eae568 --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorDeliverDate.java @@ -0,0 +1,80 @@ +/* + * This file is part of LibrePlan + * + * Copyright (C) 2011 WirelessGalicia, 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 . + */ + +package org.libreplan.business.planner.entities; + +import java.util.Date; + +import org.libreplan.business.common.BaseEntity; + +/** + * Entity {@link SubcontractorDeliverDate}. + * + * @author Susana Montes Pedreira + */ +public class SubcontractorDeliverDate extends BaseEntity{ + + private Date saveDate; + + private Date subcontractorDeliverDate; + + private Date communicationDate; + + protected SubcontractorDeliverDate(){ + + } + + private SubcontractorDeliverDate(Date saveDate, Date subcontractorDeliverDate, Date communicationDate){ + this.setSaveDate(saveDate); + this.setSubcontractorDeliverDate(subcontractorDeliverDate); + this.setCommunicationDate(communicationDate); + } + + public static SubcontractorDeliverDate create(){ + return create(new SubcontractorDeliverDate()); + } + + public static SubcontractorDeliverDate create(Date saveDate, Date subcontractorDeliverDate, Date communicationDate){ + return create(new SubcontractorDeliverDate(saveDate, subcontractorDeliverDate, communicationDate)); + } + + public void setSaveDate(Date saveDate) { + this.saveDate = saveDate; + } + + public Date getSaveDate() { + return saveDate; + } + + public void setSubcontractorDeliverDate(Date subcontractorDeliverDate) { + this.subcontractorDeliverDate = subcontractorDeliverDate; + } + + public Date getSubcontractorDeliverDate() { + return subcontractorDeliverDate; + } + + public void setCommunicationDate(Date communicationDate) { + this.communicationDate = communicationDate; + } + + public Date getCommunicationDate() { + return communicationDate; + } +} diff --git a/libreplan-business/src/main/resources/db.changelog-1.2.xml b/libreplan-business/src/main/resources/db.changelog-1.2.xml index 3587c4c81..34f9c7150 100644 --- a/libreplan-business/src/main/resources/db.changelog-1.2.xml +++ b/libreplan-business/src/main/resources/db.changelog-1.2.xml @@ -110,4 +110,18 @@ + + + + + + + + + + + + + + diff --git a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorCommunication.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorCommunication.hbm.xml index 4aa2451fe..be34aeb25 100644 --- a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorCommunication.hbm.xml +++ b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorCommunication.hbm.xml @@ -37,4 +37,16 @@ - + + + + 100 + + + + + + + + + From e00ef6d40d4be792bfcd8e0e7dd3e06514692059 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Tue, 13 Dec 2011 11:03:08 +0100 Subject: [PATCH 24/88] create the interface DeliverDate and the comparator DeliverDateComparator to sort the SubcontractorDeliverDate and the DeadlineCommunications. FEA: ItEr75S32AnA15S04UpdateDeliveringDateInSubcontracting --- .../entities/DeadlineCommunication.java | 2 +- .../entities/DeliverDate.java | 32 +++++++++++++++++++ ...arator.java => DeliverDateComparator.java} | 8 ++--- .../business/orders/entities/Order.java | 4 +-- .../entities/SubcontractedTaskData.java | 4 +++ .../entities/SubcontractorDeliverDate.java | 3 +- .../business/orders/entities/Orders.hbm.xml | 2 +- 7 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeliverDate.java rename libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/{DeadlineCommunicationComparator.java => DeliverDateComparator.java} (83%) diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunication.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunication.java index 42e431bd5..8b8b39a67 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunication.java +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunication.java @@ -29,7 +29,7 @@ import org.libreplan.business.common.BaseEntity; * * @author Susana Montes Pedreira */ -public class DeadlineCommunication extends BaseEntity { +public class DeadlineCommunication extends BaseEntity implements DeliverDate{ private Date saveDate; diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeliverDate.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeliverDate.java new file mode 100644 index 000000000..2ee7b3abb --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeliverDate.java @@ -0,0 +1,32 @@ +/* + * This file is part of LibrePlan + * + * Copyright (C) 2011 WirelessGalicia, 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 . + */ +package org.libreplan.business.externalcompanies.entities; + +import java.util.Date; + +import org.libreplan.business.planner.entities.SubcontractorCommunication; + +/** + * Interface for {@link SubcontractorDeliverDate} and {@link DeadlineCommunication} + * + * @author Susana Montes Pedreira + */ +public interface DeliverDate { + public Date getSaveDate(); +} diff --git a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunicationComparator.java b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeliverDateComparator.java similarity index 83% rename from libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunicationComparator.java rename to libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeliverDateComparator.java index 11382737d..2d5b4b2d7 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeadlineCommunicationComparator.java +++ b/libreplan-business/src/main/java/org/libreplan/business/externalcompanies/entities/DeliverDateComparator.java @@ -24,18 +24,18 @@ import java.util.Comparator; import org.libreplan.business.externalcompanies.entities.DeadlineCommunication; /** -* Comparator to {@link DeadlineCommunication} +* Comparator to {@link DeliverDate} interface * * @author Susana Montes Pedreira */ -public class DeadlineCommunicationComparator implements Comparator { +public class DeliverDateComparator implements Comparator { - public DeadlineCommunicationComparator(){ + public DeliverDateComparator(){ } @Override - public int compare(DeadlineCommunication arg0, DeadlineCommunication arg1) { + public int compare(DeliverDate arg0, DeliverDate arg1) { if (arg0.getSaveDate() == arg1.getSaveDate()) { return 0; } diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java index dcbeb9912..883404d95 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java +++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java @@ -48,7 +48,7 @@ import org.libreplan.business.common.entities.EntitySequence; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.externalcompanies.entities.CustomerCommunication; import org.libreplan.business.externalcompanies.entities.DeadlineCommunication; -import org.libreplan.business.externalcompanies.entities.DeadlineCommunicationComparator; +import org.libreplan.business.externalcompanies.entities.DeliverDateComparator; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.planner.entities.DayAssignment; @@ -116,7 +116,7 @@ public class Order extends OrderLineGroup implements Comparable { @Valid private SortedSet deliveringDates = new TreeSet( - new DeadlineCommunicationComparator()); + new DeliverDateComparator()); public enum SchedulingMode { FORWARD, BACKWARDS; diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractedTaskData.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractedTaskData.java index afa5892f6..3dd0b835c 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractedTaskData.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractedTaskData.java @@ -23,10 +23,14 @@ package org.libreplan.business.planner.entities; import java.math.BigDecimal; import java.util.Date; +import java.util.SortedSet; +import java.util.TreeSet; import org.hibernate.validator.AssertTrue; import org.hibernate.validator.NotNull; +import org.hibernate.validator.Valid; import org.libreplan.business.common.BaseEntity; +import org.libreplan.business.externalcompanies.entities.DeliverDateComparator; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.util.deepcopy.OnCopy; import org.libreplan.business.util.deepcopy.Strategy; diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorDeliverDate.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorDeliverDate.java index d17eae568..9ecd7bbb7 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorDeliverDate.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorDeliverDate.java @@ -22,13 +22,14 @@ package org.libreplan.business.planner.entities; import java.util.Date; import org.libreplan.business.common.BaseEntity; +import org.libreplan.business.externalcompanies.entities.DeliverDate; /** * Entity {@link SubcontractorDeliverDate}. * * @author Susana Montes Pedreira */ -public class SubcontractorDeliverDate extends BaseEntity{ +public class SubcontractorDeliverDate extends BaseEntity implements DeliverDate{ private Date saveDate; diff --git a/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml index 49bb65994..41d15c289 100644 --- a/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml +++ b/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml @@ -153,7 +153,7 @@ + sort="org.libreplan.business.externalcompanies.entities.DeliverDateComparator"> From 9a82aeb6af2e85b51fbd5ba720aaffbc7e4063d9 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Tue, 13 Dec 2011 11:07:26 +0100 Subject: [PATCH 25/88] creates a new field in the SubcontratedTaskData to store the collection of subcontrator delivering dates. FEA: ItEr75S32AnA15S04UpdateDeliveringDateInSubcontracting --- .../entities/SubcontractedTaskData.java | 12 ++++++++++++ .../src/main/resources/db.changelog-1.2.xml | 6 ++++++ .../SubcontractorCommunication.hbm.xml | 2 +- .../business/planner/entities/Tasks.hbm.xml | 6 ++++++ .../SubcontractorCommunicationDAOTest.java | 18 ++++++++++++++++-- .../subcontract/ReportAdvancesServiceTest.java | 5 +---- 6 files changed, 42 insertions(+), 7 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractedTaskData.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractedTaskData.java index 3dd0b835c..87ba7b820 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractedTaskData.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractedTaskData.java @@ -92,6 +92,9 @@ public class SubcontractedTaskData extends BaseEntity { private SubcontractState state = SubcontractState.PENDING; + private final SortedSet requiredDeliveringDates = new TreeSet( + new DeliverDateComparator()); + /** * Constructor for hibernate. Do not use! */ @@ -252,4 +255,13 @@ public class SubcontractedTaskData extends BaseEntity { && externalCompany.getInteractsWithApplications(); } + public void setRequiredDeliveringDates(SortedSet requiredDeliveringDates) { + this.requiredDeliveringDates.clear(); + this.requiredDeliveringDates.addAll(requiredDeliveringDates); + } + + public SortedSet getRequiredDeliveringDates() { + return requiredDeliveringDates; + } + } \ No newline at end of file diff --git a/libreplan-business/src/main/resources/db.changelog-1.2.xml b/libreplan-business/src/main/resources/db.changelog-1.2.xml index 34f9c7150..e4be9f6c9 100644 --- a/libreplan-business/src/main/resources/db.changelog-1.2.xml +++ b/libreplan-business/src/main/resources/db.changelog-1.2.xml @@ -124,4 +124,10 @@ + + Add the column subcontracted_task_id to maintain the relation + + + + diff --git a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorCommunication.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorCommunication.hbm.xml index be34aeb25..8ae7336de 100644 --- a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorCommunication.hbm.xml +++ b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/SubcontractorCommunication.hbm.xml @@ -24,7 +24,7 @@ + column="subcontracted_task_data" /> diff --git a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/Tasks.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/Tasks.hbm.xml index a9e5c0685..4496874f9 100644 --- a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/Tasks.hbm.xml +++ b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/Tasks.hbm.xml @@ -212,6 +212,12 @@ + + + + + diff --git a/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorCommunicationDAOTest.java b/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorCommunicationDAOTest.java index 3ea20f4a6..177e2248b 100644 --- a/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorCommunicationDAOTest.java +++ b/libreplan-business/src/test/java/org/libreplan/business/test/planner/daos/SubcontractorCommunicationDAOTest.java @@ -230,10 +230,24 @@ public class SubcontractorCommunicationDAOTest { throws InstanceNotFoundException { SubcontractorCommunication customerCommunication = createValidSubcontractorCommunication(); subcontractorCommunicationDAO.save(customerCommunication); + assertTrue(customerCommunication.getId() != null); + Long idSubcontratecTaskData = customerCommunication.getSubcontractedTaskData().getId(); + Long idCommunication = customerCommunication.getId(); + subcontractorCommunicationDAO.remove(customerCommunication.getId()); - assertFalse(subcontractorCommunicationDAO - .exists(customerCommunication.getId())); + + try{ + subcontractorCommunicationDAO.findExistingEntity(idCommunication); + fail("error"); + }catch(RuntimeException e){ + //ok + } + try{ + subcontractedTaskDataDAO.findExistingEntity(idSubcontratecTaskData); + }catch(RuntimeException e){ + fail("error"); + } } @Test diff --git a/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java b/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java index 0fb6a177f..4d95aefb7 100644 --- a/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java +++ b/libreplan-webapp/src/test/java/org/libreplan/web/test/ws/subcontract/ReportAdvancesServiceTest.java @@ -237,6 +237,7 @@ public class ReportAdvancesServiceTest { public void validAdvancesReportToSubcontratedOrderElement() { int previousCommunications = subcontractorCommunicationDAO.getAll().size(); OrderLine orderLine = createOrderLine(); + String orderElementCode = orderLine.getCode(); Map values = givenValidMapValues(1, 0, @@ -244,7 +245,6 @@ public class ReportAdvancesServiceTest { OrderElementWithAdvanceMeasurementsListDTO orderElementWithAdvanceMeasurementsListDTO = givenOrderElementWithAdvanceMeasurementsListDTO( orderElementCode, values); - SubcontractorCommunication subcontractorCommunication = SubcontractorCommunication.create(); reportAdvancesService .updateAdvances(orderElementWithAdvanceMeasurementsListDTO); @@ -439,9 +439,6 @@ public class ReportAdvancesServiceTest { task.dontPoseAsTransientObjectAnymore(); taskElementDAO.flush(); - sessionFactory.getCurrentSession().evict(task); - sessionFactory.getCurrentSession().evict(subcontractedTaskData); - subcontractedTaskDataDAO.save(subcontractedTaskData); return subcontractedTaskData; } From f28895fa1cba580e469a1543622c3136d8436930 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Wed, 14 Dec 2011 19:15:45 +0100 Subject: [PATCH 26/88] changes on interface and fixes several issues in the subcontract pop-up for adding new subcontractor deliver date. FEA: ItEr75S32AnA15S04UpdateDeliveringDateInSubcontracting --- .../entities/SubcontractedTaskData.java | 20 ++- .../entities/SubcontractorDeliverDate.java | 1 + .../business/planner/entities/Tasks.hbm.xml | 2 +- .../web/planner/order/ISubcontractModel.java | 11 ++ .../planner/order/PlanningStateCreator.java | 14 ++ .../web/planner/order/SaveCommandBuilder.java | 17 +++ .../planner/order/SubcontractController.java | 143 ++++++++++++++++++ .../web/planner/order/SubcontractModel.java | 67 ++++++++ .../taskpanels/_tabPanelSubcontract.zul | 29 +++- 9 files changed, 296 insertions(+), 8 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractedTaskData.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractedTaskData.java index 87ba7b820..5baf7c120 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractedTaskData.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractedTaskData.java @@ -22,6 +22,8 @@ package org.libreplan.business.planner.entities; import java.math.BigDecimal; +import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.SortedSet; import java.util.TreeSet; @@ -66,6 +68,7 @@ public class SubcontractedTaskData extends BaseEntity { result.labelsExported = subcontractedTaskData.labelsExported; result.materialAssignmentsExported = subcontractedTaskData.materialAssignmentsExported; result.hoursGroupsExported = subcontractedTaskData.hoursGroupsExported; + result.setRequiredDeliveringDates(subcontractedTaskData.getRequiredDeliveringDates()); return create(result); } @@ -226,6 +229,7 @@ public class SubcontractedTaskData extends BaseEntity { this.labelsExported = subcontratedTask.labelsExported; this.materialAssignmentsExported = subcontratedTask.materialAssignmentsExported; this.hoursGroupsExported = subcontratedTask.hoursGroupsExported; + this.setRequiredDeliveringDates(subcontratedTask.getRequiredDeliveringDates()); } @AssertTrue(message = "external company should be subcontractor") @@ -255,13 +259,23 @@ public class SubcontractedTaskData extends BaseEntity { && externalCompany.getInteractsWithApplications(); } - public void setRequiredDeliveringDates(SortedSet requiredDeliveringDates) { + public void setRequiredDeliveringDates( + SortedSet requiredDeliveringDates) { this.requiredDeliveringDates.clear(); this.requiredDeliveringDates.addAll(requiredDeliveringDates); } public SortedSet getRequiredDeliveringDates() { - return requiredDeliveringDates; + return Collections.unmodifiableSortedSet(this.requiredDeliveringDates); } -} \ No newline at end of file + public void addRequiredDeliveringDates( + SubcontractorDeliverDate subDeliverDate) { + this.requiredDeliveringDates.add(subDeliverDate); + } + + public void removeRequiredDeliveringDates( + SubcontractorDeliverDate subcontractorDeliverDate) { + this.requiredDeliveringDates.remove(subcontractorDeliverDate); + } +} diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorDeliverDate.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorDeliverDate.java index 9ecd7bbb7..98b2da25f 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorDeliverDate.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/SubcontractorDeliverDate.java @@ -78,4 +78,5 @@ public class SubcontractorDeliverDate extends BaseEntity implements DeliverDate{ public Date getCommunicationDate() { return communicationDate; } + } diff --git a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/Tasks.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/Tasks.hbm.xml index 4496874f9..991413ef6 100644 --- a/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/Tasks.hbm.xml +++ b/libreplan-business/src/main/resources/org/libreplan/business/planner/entities/Tasks.hbm.xml @@ -212,7 +212,7 @@ - diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/ISubcontractModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/ISubcontractModel.java index 0cd881d13..350c068d1 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/ISubcontractModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/ISubcontractModel.java @@ -23,10 +23,12 @@ package org.libreplan.web.planner.order; import java.util.Date; import java.util.List; +import java.util.SortedSet; import org.libreplan.business.common.exceptions.ValidationException; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.planner.entities.SubcontractedTaskData; +import org.libreplan.business.planner.entities.SubcontractorDeliverDate; import org.libreplan.business.planner.entities.Task; /** @@ -65,4 +67,13 @@ public interface ISubcontractModel { void confirm() throws ValidationException; void cancel(); + SortedSet getDeliverDates(); + + void addDeliverDate(Date subDeliverDate); + + void removeRequiredDeliverDate( + SubcontractorDeliverDate subcontractorDeliverDate); + + boolean alreadyExistsRepeatedDeliverDate(Date newDeliverDate); + } \ No newline at end of file diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/PlanningStateCreator.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/PlanningStateCreator.java index 792eb5d46..a68711887 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/PlanningStateCreator.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/PlanningStateCreator.java @@ -57,6 +57,7 @@ import org.libreplan.business.planner.entities.ResourceAllocation; import org.libreplan.business.planner.entities.ResourceAllocation.IVisitor; import org.libreplan.business.planner.entities.SpecificResourceAllocation; import org.libreplan.business.planner.entities.StretchesFunction; +import org.libreplan.business.planner.entities.SubcontractorDeliverDate; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.planner.entities.TaskElement; import org.libreplan.business.planner.entities.TaskGroup; @@ -320,6 +321,7 @@ public class PlanningStateCreator { private void forceLoadOfDataAssociatedTo(TaskElement each) { forceLoadOfResourceAllocationsResourcesAndAssignmentFunction(each); forceLoadOfCriterions(each); + forceLoadOfSubcontractedTaskData(each); BaseCalendar calendar = each.getOwnCalendar(); if (calendar == null) { @@ -373,6 +375,18 @@ public class PlanningStateCreator { } } + private static void forceLoadOfSubcontractedTaskData(TaskElement taskElement){ + if(taskElement.isLeaf()){ + if(((Task)taskElement).getSubcontractedTaskData() != null){ + for (SubcontractorDeliverDate subDeliverDate : ((Task) taskElement) + .getSubcontractedTaskData() + .getRequiredDeliveringDates()) { + subDeliverDate.getSaveDate(); + } + } + } + } + private void findChildrenWithQueryToAvoidProxies(TaskGroup group) { for (TaskElement eachTask : taskDAO.findChildrenOf(group)) { Hibernate.initialize(eachTask); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SaveCommandBuilder.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SaveCommandBuilder.java index 7183b14db..93fa413c6 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SaveCommandBuilder.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SaveCommandBuilder.java @@ -66,6 +66,8 @@ import org.libreplan.business.planner.entities.DerivedAllocation; import org.libreplan.business.planner.entities.DerivedDayAssignment; import org.libreplan.business.planner.entities.DerivedDayAssignmentsContainer; import org.libreplan.business.planner.entities.ResourceAllocation; +import org.libreplan.business.planner.entities.SubcontractedTaskData; +import org.libreplan.business.planner.entities.SubcontractorDeliverDate; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.planner.entities.TaskElement; import org.libreplan.business.planner.entities.TaskGroup; @@ -330,6 +332,7 @@ public class SaveCommandBuilder { checkConstraintHoursGroupUniqueCode(order); state.synchronizeTrees(); TaskGroup rootTask = state.getRootTask(); + if (rootTask != null) { // This reattachment is needed to ensure that the root task in // the state is the one associated to the transaction's session. @@ -919,6 +922,7 @@ public class SaveCommandBuilder { } if (taskElement instanceof Task) { dontPoseAsTransient(((Task) taskElement).getConsolidation()); + dontPoseAsTransient(((Task) taskElement).getSubcontractedTaskData()); } if (taskElement instanceof TaskGroup) { ((TaskGroup) taskElement).dontPoseAsTransientPlanningData(); @@ -938,6 +942,19 @@ public class SaveCommandBuilder { } } + private void dontPoseAsTransient(SubcontractedTaskData subcontractedTaskData) { + if (subcontractedTaskData != null) { + //dontPoseAsTransient - subcontratedTaskData + subcontractedTaskData.dontPoseAsTransientObjectAnymore(); + + for (SubcontractorDeliverDate subDeliverDate : subcontractedTaskData + .getRequiredDeliveringDates()) { + //dontPoseAsTransient - DeliverDate + subDeliverDate.dontPoseAsTransientObjectAnymore(); + } + } + } + private void dontPoseAsTransient( SortedSet values) { for (ConsolidatedValue value : values) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SubcontractController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SubcontractController.java index 826457317..8f4393635 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SubcontractController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SubcontractController.java @@ -21,21 +21,48 @@ package org.libreplan.web.planner.order; +import static org.libreplan.web.I18nHelper._; + +import java.io.IOException; +import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import java.util.SortedSet; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.libreplan.business.common.exceptions.ValidationException; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.planner.entities.SubcontractedTaskData; +import org.libreplan.business.planner.entities.SubcontractorDeliverDate; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.planner.entities.TaskElement; +import org.libreplan.web.common.IMessagesForUser; +import org.libreplan.web.common.Level; +import org.libreplan.web.common.MessagesForUser; import org.libreplan.web.common.Util; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.zkoss.ganttz.extensions.IContextWithPlannerTask; +import org.zkoss.ganttz.servlets.CallbackServlet; +import org.zkoss.ganttz.servlets.CallbackServlet.DisposalMode; +import org.zkoss.ganttz.servlets.CallbackServlet.IServletRequestHandler; import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Button; import org.zkoss.zul.Comboitem; +import org.zkoss.zul.Grid; +import org.zkoss.zul.Hbox; +import org.zkoss.zul.Label; +import org.zkoss.zul.Row; +import org.zkoss.zul.RowRenderer; +import org.zkoss.zul.api.Datebox; import org.zkoss.zul.api.Tabpanel; /** @@ -51,10 +78,19 @@ public class SubcontractController extends GenericForwardComposer { private ISubcontractModel subcontractModel; + private Grid gridDeliverDate; + + private DeliverDatesRenderer deliverDatesRenderer = new DeliverDatesRenderer(); + + protected IMessagesForUser messagesForUser; + + private Component messagesContainer; + @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); tabpanel = (Tabpanel) comp; + messagesForUser = new MessagesForUser(messagesContainer); } public void init(Task task, @@ -101,4 +137,111 @@ public class SubcontractController extends GenericForwardComposer { subcontractModel.removeSubcontractedTaskData(); } + public SortedSet getDeliverDates() { + return subcontractModel.getDeliverDates(); + } + + public void addDeliverDate(Datebox newDeliverDate){ + if (newDeliverDate == null || newDeliverDate.getValue() == null) { + messagesForUser.showMessage(Level.ERROR, + _("You must select a valid date. ")); + return; + } + if (thereIsSomeCommunicationDateEmpty()) { + messagesForUser + .showMessage( + Level.ERROR, + _("It will only be possible to add a Deliver Date if all the deliver date exiting in the table have a CommunicationDate not empty. ")); + return; + } + if(subcontractModel.alreadyExistsRepeatedDeliverDate(newDeliverDate.getValue())){ + messagesForUser + .showMessage( + Level.ERROR, + _("It already exists a deliver date with the same date. ")); + return; + } + subcontractModel.addDeliverDate(newDeliverDate.getValue()); + Util.reloadBindings(gridDeliverDate); + gridDeliverDate.invalidate(); + } + + private boolean thereIsSomeCommunicationDateEmpty(){ + for(SubcontractorDeliverDate subDeliverDate : subcontractModel.getDeliverDates()){ + if(subDeliverDate.getCommunicationDate() == null){ + return true; + } + } + return false; + } + + public DeliverDatesRenderer getDeliverDatesRenderer(){ + return new DeliverDatesRenderer(); + } + + private class DeliverDatesRenderer implements RowRenderer{ + + @Override + public void render(Row row, Object data) throws Exception { + SubcontractorDeliverDate subcontractorDeliverDate = (SubcontractorDeliverDate) data; + row.setValue(subcontractorDeliverDate); + + appendLabel(row, toString(subcontractorDeliverDate.getSaveDate())); + appendLabel(row, toString(subcontractorDeliverDate.getSubcontractorDeliverDate())); + appendLabel(row, toString(subcontractorDeliverDate.getCommunicationDate())); + appendOperations(row, subcontractorDeliverDate); + } + + private String toString(Date date) { + if (date == null) { + return ""; + } + return new SimpleDateFormat("dd/MM/yyyy HH:mm").format(date); + } + + private void appendLabel(Row row, String label) { + row.appendChild(new Label(label)); + } + + private void appendOperations(Row row, + SubcontractorDeliverDate subcontractorDeliverDate) { + Hbox hbox = new Hbox(); + hbox.appendChild(getDeleteButton(subcontractorDeliverDate)); + row.appendChild(hbox); + } + + private Button getDeleteButton( + final SubcontractorDeliverDate subcontractorDeliverDate) { + Button deleteButton = new Button(); + deleteButton.setDisabled(!isTheLastOne(subcontractorDeliverDate)); + + deleteButton.setImage("/common/img/ico_borrar_out.png"); + deleteButton.setHoverImage("/common/img/ico_borrar_out.png"); + deleteButton.setTooltiptext(""); + + deleteButton.addEventListener(Events.ON_CLICK, new EventListener() { + @Override + public void onEvent(Event event) { + removeRequiredDeliverDate(subcontractorDeliverDate); + } + }); + + return deleteButton; + } + + private boolean isTheLastOne(final SubcontractorDeliverDate subDeliverDate){ + SubcontractorDeliverDate lastDeliverDate = getSubcontractedTaskData() + .getRequiredDeliveringDates().first(); + if (lastDeliverDate != null) { + return lastDeliverDate.equals(subDeliverDate) ? true : false; + } + return false; + } + } + + public void removeRequiredDeliverDate(SubcontractorDeliverDate subcontractorDeliverDate){ + subcontractModel.removeRequiredDeliverDate(subcontractorDeliverDate); + Util.reloadBindings(gridDeliverDate); + } + } \ No newline at end of file diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SubcontractModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SubcontractModel.java index 23ea42245..b349f41f7 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SubcontractModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SubcontractModel.java @@ -23,12 +23,16 @@ package org.libreplan.web.planner.order; import java.util.Date; import java.util.List; +import java.util.SortedSet; +import java.util.TreeSet; +import org.joda.time.LocalDate; import org.libreplan.business.common.exceptions.ValidationException; import org.libreplan.business.externalcompanies.daos.IExternalCompanyDAO; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.planner.daos.ISubcontractedTaskDataDAO; import org.libreplan.business.planner.entities.SubcontractedTaskData; +import org.libreplan.business.planner.entities.SubcontractorDeliverDate; import org.libreplan.business.planner.entities.Task; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; @@ -42,6 +46,7 @@ import org.zkoss.ganttz.data.GanttDate; * {@link SubcontractedTaskData} entity. * * @author Manuel Rego Casasnovas + * @author Susana Montes Pedreira */ @Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) @@ -75,16 +80,29 @@ public class SubcontractModel implements ISubcontractModel { SubcontractedTaskData subcontractedTaskData = task .getSubcontractedTaskData(); + this.currentSubcontractedTaskData = subcontractedTaskData; if (subcontractedTaskData == null) { this.subcontractedTaskData = SubcontractedTaskData.create(task); + this.addDeliverDate(getEndDate()); } else { + subcontractedTaskDataDAO.reattach(subcontractedTaskData); + loadRequiredDeliveringDates(subcontractedTaskData); this.subcontractedTaskData = SubcontractedTaskData .createFrom(subcontractedTaskData); } } + private void loadRequiredDeliveringDates(SubcontractedTaskData subcontractedTaskData){ + if(subcontractedTaskData != null){ + for (SubcontractorDeliverDate subDeliverDate : subcontractedTaskData + .getRequiredDeliveringDates()) { + subDeliverDate.getSaveDate(); + } + } + } + @Override public SubcontractedTaskData getSubcontractedTaskData() { return subcontractedTaskData; @@ -169,4 +187,53 @@ public class SubcontractModel implements ISubcontractModel { subcontractedTaskData = null; } + @Override + public SortedSet getDeliverDates(){ + if(subcontractedTaskData != null){ + return subcontractedTaskData.getRequiredDeliveringDates(); + } + return new TreeSet(); + } + + @Override + public void addDeliverDate(Date subDeliverDate){ + if(subcontractedTaskData != null){ + SubcontractorDeliverDate subcontractorDeliverDate = SubcontractorDeliverDate + .create(new Date(), subDeliverDate, null); + subcontractedTaskData + .addRequiredDeliveringDates(subcontractorDeliverDate); + + //update the end date of the task + updateEndDateWithDeliverDate(); + } + } + + private void updateEndDateWithDeliverDate(){ + SubcontractorDeliverDate lastDeliverDate = this + .getSubcontractedTaskData().getRequiredDeliveringDates().last(); + task.setEndDate(lastDeliverDate.getSubcontractorDeliverDate()); + } + + @Override + public boolean alreadyExistsRepeatedDeliverDate(Date newDeliverDate){ + for(SubcontractorDeliverDate subDeliverDate : this + .getSubcontractedTaskData().getRequiredDeliveringDates()){ + Date deliverDate = subDeliverDate.getSubcontractorDeliverDate(); + Date currentDeliverDate = new LocalDate(deliverDate).toDateTimeAtStartOfDay().toDate(); + newDeliverDate = new LocalDate(newDeliverDate).toDateTimeAtStartOfDay().toDate(); + if(currentDeliverDate.compareTo(newDeliverDate) == 0){ + return true; + } + } + return false; + } + + @Override + public void removeRequiredDeliverDate( + SubcontractorDeliverDate subcontractorDeliverDate) { + if(subcontractedTaskData != null){ + subcontractedTaskData.removeRequiredDeliveringDates(subcontractorDeliverDate); + } + } + } diff --git a/libreplan-webapp/src/main/webapp/planner/taskpanels/_tabPanelSubcontract.zul b/libreplan-webapp/src/main/webapp/planner/taskpanels/_tabPanelSubcontract.zul index 67bc7b647..29d79ffd3 100644 --- a/libreplan-webapp/src/main/webapp/planner/taskpanels/_tabPanelSubcontract.zul +++ b/libreplan-webapp/src/main/webapp/planner/taskpanels/_tabPanelSubcontract.zul @@ -56,10 +56,6 @@
+ + + + + + +