AccountingEvents.java
package com.tradecloud.domain.configuration;
import com.tradecloud.authentication.User;
import com.tradecloud.domain.document.DocumentState;
import com.tradecloud.domain.model.events.AccountingEvent;
import org.hibernate.annotations.ForeignKey;
import javax.persistence.*;
import javax.xml.bind.annotation.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static com.tradecloud.domain.model.events.AccountingEvent.AccountingEventType.*;
/**
* Meta-data of accounting events.
*/
@Entity
@Table(name = "accountingevents")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "AccountingEvents")
public class AccountingEvents extends EventConfig<AccountingEventsMetaData> implements AlowNonOrderUserEvent {
private static final long serialVersionUID = 1L;
private boolean allowEvents;
@XmlElement(name = "AccountingEventsMetaData")
@OneToOne
@ForeignKey(name = "fk_accountingevents", inverseName = "fk_accountingeventsmetadata")
@JoinTable(name = "accountingevents_accountingeventsmetadata", joinColumns = {@JoinColumn(name = "accountingevent_id", unique = false)},
inverseJoinColumns = {@JoinColumn(name = "metadata_id", unique = false)})
private AccountingEventsMetaData eventsMetaData = new AccountingEventsMetaData();
@Enumerated(value = EnumType.STRING)
private InvoiceSnapShotType invoiceSnapShotType;
private static List<AccountingEvent.AccountingEventType> applicableInvoiceSnapshotEvents = Arrays.asList(INDIRECT_INVOICE_SIGN_OFF,
INDIRECT_INVOICE_UNSIGN_OFF, SPLIT_INDIRECT_INVOICE_SIGN_OFF);
private static List<AccountingEvent.AccountingEventType> applicableTriggerStateEvents = Arrays.asList(DIRECT_INVOICE_SIGN_OFF);
@Enumerated(value = EnumType.STRING)
private DocumentState triggerState;
@Enumerated(value = EnumType.STRING)
private AccountingEventPublishConfig eventPublishConfig;
private static List<AccountingEvent.AccountingEventType> applicableEventPublishConfigEvents = Arrays.asList(INDIRECT_INVOICE_SIGN_OFF,
INDIRECT_INVOICE_UNSIGN_OFF, SPLIT_INDIRECT_INVOICE_SIGN_OFF, DIRECT_INVOICE_SIGN_OFF, DIRECT_CREDIT_NOTE_SIGN_OFF,
DIRECT_CREDIT_NOTE_SIGN_OFF, DIRECT_INVOICE_SIGN_OFF, INDIRECT_CREDIT_NOTE_UNSIGN_OFF, INDIRECT_CREDIT_NOTE_SIGN_OFF,
BONDED_INVOICE_SIGN_OFF, BONDED_INVOICE_UNSIGN_OFF);
@XmlTransient
@ManyToMany
@JoinTable(name = "integrationuser_accountingevents", joinColumns = {@JoinColumn(name = "accountingevent_id", unique = false)},
inverseJoinColumns = {@JoinColumn(name = "integrationuser_id", unique = false)})
private Set<User> users = new HashSet<>();
public AccountingEventsMetaData getEventsMetaData() {
return eventsMetaData;
}
@Override
public void setEventsMetaData(AccountingEventsMetaData eventsMetaData) {
this.eventsMetaData = eventsMetaData;
}
@Override
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
public InvoiceSnapShotType getInvoiceSnapShotType() {
return invoiceSnapShotType;
}
public void setInvoiceSnapShotType(InvoiceSnapShotType invoiceSnapShotType) {
this.invoiceSnapShotType = invoiceSnapShotType;
}
public boolean isSnapshotTypeEditable() {
return applicableInvoiceSnapshotEvents.contains(AccountingEvent.AccountingEventType.valueOf(eventsMetaData.getEvent()));
}
public DocumentState getTriggerState() {
return triggerState;
}
public void setTriggerState(DocumentState triggerState) {
this.triggerState = triggerState;
}
public boolean isTriggerStateEditable() {
return applicableTriggerStateEvents.contains(AccountingEvent.AccountingEventType.valueOf(eventsMetaData.getEvent()));
}
public boolean isEventPublishConfigEditable() {
return applicableEventPublishConfigEvents.contains(AccountingEvent.AccountingEventType.valueOf(eventsMetaData.getEvent()));
}
public boolean isAllowEvents() {
return allowEvents;
}
public void setAllowEvents(boolean allowEvents) {
this.allowEvents = allowEvents;
}
public AccountingEventPublishConfig getEventPublishConfig() {
return eventPublishConfig;
}
public void setEventPublishConfig(AccountingEventPublishConfig eventPublishConfig) {
this.eventPublishConfig = eventPublishConfig;
}
}