ItEr40S22CUProcuraOrganizacionsTraballoItEr32S10: Modified configuration controller to mange order sequences.
This commit is contained in:
parent
00b046059c
commit
f5b96fb58a
7 changed files with 273 additions and 2 deletions
|
|
@ -33,4 +33,7 @@ public interface IOrderSequenceDAO extends IGenericDAO<OrderSequence, Long> {
|
|||
|
||||
List<OrderSequence> getAll();
|
||||
|
||||
List<OrderSequence> findOrderSquencesNotIn(
|
||||
List<OrderSequence> orderSequences);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue