ItEr40S22CUProcuraOrganizacionsTraballoItEr32S10: Modified configuration controller to mange order sequences.

This commit is contained in:
Manuel Rego Casasnovas 2009-12-22 15:09:08 +01:00 committed by Javier Moran Rua
parent 00b046059c
commit f5b96fb58a
7 changed files with 273 additions and 2 deletions

View file

@ -33,4 +33,7 @@ public interface IOrderSequenceDAO extends IGenericDAO<OrderSequence, Long> {
List<OrderSequence> getAll();
List<OrderSequence> findOrderSquencesNotIn(
List<OrderSequence> orderSequences);
}

View file

@ -20,8 +20,10 @@
package org.navalplanner.business.common.daos;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.criterion.Restrictions;
import org.navalplanner.business.common.entities.OrderSequence;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@ -42,4 +44,18 @@ public class OrderSequenceDAO extends GenericDAOHibernate<OrderSequence, Long>
return list(OrderSequence.class);
}
}
@Override
@SuppressWarnings("unchecked")
public List<OrderSequence> findOrderSquencesNotIn(
List<OrderSequence> orderSequences) {
List<Long> orderSequenceIds = new ArrayList<Long>();
for (OrderSequence orderSequence : orderSequences) {
orderSequenceIds.add(orderSequence.getId());
}
return getSession().createCriteria(OrderSequence.class).add(
Restrictions.not(Restrictions.in("id", orderSequenceIds)))
.list();
}
}

View file

@ -20,6 +20,9 @@
package org.navalplanner.business.common.entities;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.hibernate.criterion.Order;
import org.hibernate.validator.AssertTrue;
import org.hibernate.validator.NotEmpty;
@ -125,4 +128,14 @@ public class OrderSequence extends BaseEntity {
return false;
}
public static String formatValue(int numberOfDigits, int value) {
String format = "";
for (int i = 0; i < numberOfDigits; i++) {
format += "0";
}
NumberFormat numberFormat = new DecimalFormat(format);
return numberFormat.format(value);
}
}

View file

@ -26,15 +26,23 @@ import java.util.List;
import org.navalplanner.business.calendars.entities.BaseCalendar;
import org.navalplanner.business.common.entities.Configuration;
import org.navalplanner.business.common.entities.OrderSequence;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.web.common.components.bandboxsearch.BandboxSearch;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.WrongValueException;
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.event.SelectEvent;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Row;
import org.zkoss.zul.RowRenderer;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.api.Listitem;
import org.zkoss.zul.api.Window;
@ -54,6 +62,8 @@ public class ConfigurationController extends GenericForwardComposer {
private Component messagesContainer;
private OrderSequenceRowRenderer orderSequenceRowRenderer = new OrderSequenceRowRenderer();
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
@ -118,4 +128,138 @@ public class ConfigurationController extends GenericForwardComposer {
configurationModel.setCompanyCode(companyCode);
}
public List<OrderSequence> getOrderSequences() {
return configurationModel.getOrderSequences();
}
public void addOrderSequence() {
configurationModel.addOrderSequence();
reloadOrderSequencesList();
}
public void removeOrderSequence(OrderSequence orderSequence) {
configurationModel.removeOrderSequence(orderSequence);
reloadOrderSequencesList();
}
private void reloadOrderSequencesList() {
Util
.reloadBindings(configurationWindow
.getFellow("orderSequencesList"));
}
public OrderSequenceRowRenderer getOrderSequenceRowRenderer() {
return orderSequenceRowRenderer;
}
private class OrderSequenceRowRenderer implements RowRenderer {
@Override
public void render(Row row, Object data) throws Exception {
OrderSequence orderSequence = (OrderSequence) data;
row.setValue(orderSequence);
appendActiveCheckbox(row, orderSequence);
appendPrefixTextbox(row, orderSequence);
appendNumberOfDigitsInbox(row, orderSequence);
appendLastValueInbox(row, orderSequence);
appendOperations(row, orderSequence);
}
private void appendActiveCheckbox(Row row,
final OrderSequence orderSequence) {
Checkbox checkbox = Util.bind(new Checkbox(),
new Util.Getter<Boolean>() {
@Override
public Boolean get() {
return orderSequence.isActive();
}
}, new Util.Setter<Boolean>() {
@Override
public void set(Boolean value) {
orderSequence.setActive(value);
}
});
row.appendChild(checkbox);
}
private void appendPrefixTextbox(Row row,
final OrderSequence orderSequence) {
Textbox textbox = Util.bind(new Textbox(),
new Util.Getter<String>() {
@Override
public String get() {
return orderSequence.getPrefix();
}
}, new Util.Setter<String>() {
@Override
public void set(String value) {
orderSequence.setPrefix(value);
}
});
textbox.setConstraint("no empty:" + _("cannot be null or empty"));
row.appendChild(textbox);
}
private void appendNumberOfDigitsInbox(Row row,
final OrderSequence orderSequence) {
final Intbox tempIntbox = new Intbox();
Intbox intbox = Util.bind(tempIntbox, new Util.Getter<Integer>() {
@Override
public Integer get() {
return orderSequence.getNumberOfDigits();
}
}, new Util.Setter<Integer>() {
@Override
public void set(Integer value) {
try {
orderSequence.setNumberOfDigits(value);
} catch (IllegalArgumentException e) {
throw new WrongValueException(tempIntbox, e.getMessage());
}
}
});
intbox.setConstraint("no empty:" + _("cannot be null or empty"));
row.appendChild(intbox);
}
private void appendLastValueInbox(Row row,
final OrderSequence orderSequence) {
Textbox textbox = Util.bind(new Textbox(),
new Util.Getter<String>() {
@Override
public String get() {
return OrderSequence.formatValue(orderSequence
.getNumberOfDigits(), orderSequence
.getLastValue());
}
});
row.appendChild(textbox);
}
private void appendOperations(Row row, final OrderSequence orderSequence) {
Button removeButton = Util.createRemoveButton(new EventListener() {
@Override
public void onEvent(Event event) throws Exception {
removeOrderSequence(orderSequence);
}
});
row.appendChild(removeButton);
}
}
}

View file

@ -20,12 +20,19 @@
package org.navalplanner.web.common;
import static org.navalplanner.web.I18nHelper._;
import java.util.Collections;
import java.util.List;
import org.navalplanner.business.calendars.daos.IBaseCalendarDAO;
import org.navalplanner.business.calendars.entities.BaseCalendar;
import org.navalplanner.business.common.daos.IConfigurationDAO;
import org.navalplanner.business.common.daos.IOrderSequenceDAO;
import org.navalplanner.business.common.entities.Configuration;
import org.navalplanner.business.common.entities.OrderSequence;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@ -44,12 +51,17 @@ public class ConfigurationModel implements IConfigurationModel {
*/
private Configuration configuration;
private List<OrderSequence> orderSequences;
@Autowired
private IConfigurationDAO configurationDAO;
@Autowired
private IBaseCalendarDAO baseCalendarDAO;
@Autowired
private IOrderSequenceDAO orderSequenceDAO;
@Override
@Transactional(readOnly = true)
public List<BaseCalendar> getCalendars() {
@ -68,6 +80,7 @@ public class ConfigurationModel implements IConfigurationModel {
@Transactional(readOnly = true)
public void init() {
this.configuration = getCurrentConfiguration();
this.orderSequences = orderSequenceDAO.getAll();
}
private Configuration getCurrentConfiguration() {
@ -99,13 +112,53 @@ public class ConfigurationModel implements IConfigurationModel {
@Override
@Transactional
public void confirm() {
if (orderSequences.isEmpty()) {
throw new ValidationException(
_("At least one order sequence is needed"));
}
if (!checkConstraintJustOneOrderSequenceActive()) {
throw new ValidationException(
_("Just one order sequence must be active"));
}
configurationDAO.save(configuration);
storeAndRemoveOrderSequences();
}
private void storeAndRemoveOrderSequences() {
for (OrderSequence orderSequence : orderSequences) {
orderSequenceDAO.save(orderSequence);
}
List<OrderSequence> toRemove = orderSequenceDAO
.findOrderSquencesNotIn(orderSequences);
for (OrderSequence orderSequence : toRemove) {
try {
orderSequenceDAO.remove(orderSequence.getId());
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}
}
}
private boolean checkConstraintJustOneOrderSequenceActive() {
boolean someoneActive = false;
for (OrderSequence orderSequence : orderSequences) {
if (orderSequence.isActive()) {
if (someoneActive) {
return false;
}
someoneActive = true;
}
}
return someoneActive;
}
@Override
@Transactional(readOnly = true)
public void cancel() {
configuration = getCurrentConfiguration();
init();
}
@Override
@ -123,4 +176,19 @@ public class ConfigurationModel implements IConfigurationModel {
}
}
@Override
public List<OrderSequence> getOrderSequences() {
return Collections.unmodifiableList(orderSequences);
}
@Override
public void addOrderSequence() {
orderSequences.add(OrderSequence.create(""));
}
@Override
public void removeOrderSequence(OrderSequence orderSequence) {
orderSequences.remove(orderSequence);
}
}

View file

@ -23,6 +23,7 @@ package org.navalplanner.web.common;
import java.util.List;
import org.navalplanner.business.calendars.entities.BaseCalendar;
import org.navalplanner.business.common.entities.OrderSequence;
/**
* Contract for {@link ConfigurationModel}.
@ -50,6 +51,10 @@ public interface IConfigurationModel {
String getCompanyCode();
void setCompanyCode(String companyCode);
List<OrderSequence> getOrderSequences();
void addOrderSequence();
void removeOrderSequence(OrderSequence orderSequence);
/*
* Final conversation steps
*/

View file

@ -63,6 +63,28 @@
</row>
</rows>
</grid>
<!-- Order sequences -->
<panel title="${i18n:_('Order sequences')}" border="normal">
<panelchildren>
<hbox valign="center">
<button label="${i18n:_('New order sequence')}"
onClick="configurationController.addOrderSequence()" />
</hbox>
<grid id="orderSequencesList" fixedLayout="true"
model="@{configurationController.orderSequences}"
rowRenderer="@{configurationController.orderSequenceRowRenderer}" >
<columns sizable="true">
<column label="${i18n:_('Active')}" />
<column label="${i18n:_('Prefix')}" />
<column label="${i18n:_('Number of digits')}" />
<column label="${i18n:_('Last value')}" />
<column label="${i18n:_('Operations')}" />
</columns>
</grid>
</panelchildren>
</panel>
</tabpanel>
</tabpanels>
</tabbox>