/*
jBilling - The Enterprise Open Source Billing System
Copyright (C) 2003-2011 Enterprise jBilling Software Ltd. and Emiliano Conde
This file is part of jbilling.
jbilling 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.
jbilling 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 jbilling. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Created on Dec 18, 2003
*
*/
package com.sapienter.jbilling.server.user;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.Digits;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import com.sapienter.jbilling.server.util.Constants;
import com.sapienter.jbilling.server.entity.AchDTO;
import com.sapienter.jbilling.server.entity.CreditCardDTO;
import com.sapienter.jbilling.server.order.db.OrderDAS;
import com.sapienter.jbilling.server.order.db.OrderDTO;
import com.sapienter.jbilling.server.security.WSSecured;
import com.sapienter.jbilling.server.user.db.CustomerDTO;
import com.sapienter.jbilling.server.util.api.validation.CreateValidationGroup;
import com.sapienter.jbilling.server.util.api.validation.UpdateValidationGroup;
/** @author Emil */
public class UserWS implements WSSecured, Serializable {
@Min(value = 1, message = "validation.error.min,1", groups = UpdateValidationGroup.class)
@Max(value = 0, message = "validation.error.max,0", groups = CreateValidationGroup.class)
private int id;
private Integer currencyId;
@Size(min = 5, max = 40, message = "validation.error.size,5,40", groups = CreateValidationGroup.class)
private String password;
private int deleted;
private Date createDatetime;
private Date lastStatusChange;
private Date lastLogin;
@NotNull(message="validation.error.notnull")
@Size(min = 5, max = 50, message = "validation.error.size,5,50")
private String userName;
private int failedAttempts;
private Integer languageId;
@Valid
private CreditCardDTO creditCard = null;
@Valid
private AchDTO ach = null;
@NotNull(message = "validation.error.notnull")
@Valid
private ContactWS contact = null;
private String role = null;
private String language = null;
private String status = null;
private Integer mainRoleId = null;
private Integer statusId = null;
private Integer subscriberStatusId = null;
private Integer customerId = null;
private Integer partnerId = null;
private Integer parentId = null;
private Boolean isParent = null;
private Boolean invoiceChild = null;
private Boolean excludeAgeing = null;
private Integer mainOrderId = null;
private String[] blacklistMatches = null;
private Boolean userIdBlacklisted = null;
private Integer[] childIds = null;
private String owingBalance = null;
private Integer balanceType = null;
private String dynamicBalance = null;
@Digits(integer = 22, fraction = 10, message="validation.error.not.a.number")
private String autoRecharge = null;
@Digits(integer = 22, fraction = 10, message="validation.error.not.a.number")
private String creditLimit = null;
private String notes;
private Integer automaticPaymentType;
private String companyName;
private Integer invoiceDeliveryMethodId;
private Integer dueDateUnitId;
private Integer dueDateValue;
private Date nextInvoiceDate;
public UserWS() {
}
public UserWS(UserDTOEx dto) {
id = dto.getId();
currencyId = dto.getCurrencyId();
password = dto.getPassword();
deleted = dto.getDeleted();
createDatetime = dto.getCreateDatetime();
lastStatusChange = dto.getLastStatusChange();
lastLogin = dto.getLastLogin();
userName = dto.getUserName();
failedAttempts = dto.getFailedAttempts();
languageId = dto.getLanguageId();
creditCard = dto.getCreditCard() == null ? null : dto.getCreditCard().getOldDTO();
ach = dto.getAch() == null ? null : dto.getAch().getOldDTO();
role = dto.getMainRoleStr();
mainRoleId = dto.getMainRoleId();
language = dto.getLanguageStr();
status = dto.getStatusStr();
role = dto.getMainRoleStr();
statusId = dto.getStatusId();
subscriberStatusId = dto.getSubscriptionStatusId();
if (dto.getCustomer() != null) {
customerId = dto.getCustomer().getId();
partnerId = (dto.getCustomer().getPartner() == null) ? null : dto.getCustomer().getPartner().getId();
parentId = (dto.getCustomer().getParent() == null) ? null : dto.getCustomer().getParent().getBaseUser().getId();
mainOrderId = dto.getCustomer().getCurrentOrderId();
isParent = dto.getCustomer().getIsParent() != null && dto.getCustomer().getIsParent().equals(1);
invoiceChild = dto.getCustomer().getInvoiceChild() != null && dto.getCustomer().getInvoiceChild().equals(1);
excludeAgeing = dto.getCustomer().getExcludeAging() == 1;
childIds = new Integer[dto.getCustomer().getChildren().size()];
int index = 0;
for (CustomerDTO customer : dto.getCustomer().getChildren()) {
childIds[index] = customer.getBaseUser().getId();
index++;
}
balanceType = dto.getCustomer().getBalanceType();
setDynamicBalance(dto.getCustomer().getDynamicBalance());
setCreditLimit(dto.getCustomer().getCreditLimit());
setAutoRecharge(dto.getCustomer().getAutoRecharge());
setNotes(dto.getCustomer().getNotes());
setAutomaticPaymentType(dto.getCustomer().getAutoPaymentType());
dueDateUnitId = dto.getCustomer().getDueDateUnitId();
dueDateValue = dto.getCustomer().getDueDateValue();
}
blacklistMatches = dto.getBlacklistMatches() != null ? dto.getBlacklistMatches().toArray(new String[dto.getBlacklistMatches().size()]) : null;
userIdBlacklisted = dto.getUserIdBlacklisted();
if (null != dto.getCompany()) {
companyName= dto.getCompany().getDescription();
}
setOwingBalance(dto.getBalance());
OrderDTO orderDto= (OrderDTO) new OrderDAS().findEarliestActiveOrder(dto.getId());
if (null != orderDto) {
if ( null != orderDto.getNextBillableDay()) {
this.nextInvoiceDate= orderDto.getNextBillableDay();
} else if ( null != orderDto.getActiveSince()) {
this.nextInvoiceDate= orderDto.getActiveSince();
} else if ( null != orderDto.getCreateDate()) {
this.nextInvoiceDate= orderDto.getCreateDate();
}
}
}
public Integer getPartnerId() {
return partnerId;
}
public void setPartnerId(Integer partnerId) {
this.partnerId = partnerId;
}
public ContactWS getContact() {
return contact;
}
public void setContact(ContactWS contact) {
this.contact = contact;
}
public CreditCardDTO getCreditCard() {
return creditCard;
}
public void setCreditCard(CreditCardDTO creditCard) {
this.creditCard = creditCard;
}
public AchDTO getAch() {
return ach;
}
public void setAch(AchDTO ach) {
this.ach = ach;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getRole() {
return role;
}
public void setRole(String type) {
this.role = type;
}
public Integer getMainRoleId() {
return mainRoleId;
}
public void setMainRoleId(Integer mainRoleId) {
this.mainRoleId = mainRoleId;
}
public Integer getStatusId() {
return statusId;
}
public void setStatusId(Integer statusId) {
this.statusId = statusId;
}
public Integer getSubscriberStatusId() {
return subscriberStatusId;
}
public void setSubscriberStatusId(Integer subscriberStatusId) {
this.subscriberStatusId = subscriberStatusId;
}
public Integer getCustomerId() {
return customerId;
}
public void setCustomerId(Integer customerId) {
this.customerId = customerId;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public Boolean getIsParent() {
return isParent;
}
public void setIsParent(Boolean isParent) {
this.isParent = isParent;
}
public Boolean getInvoiceChild() {
return invoiceChild;
}
public void setInvoiceChild(Boolean invoiceChild) {
this.invoiceChild = invoiceChild;
}
public Boolean getExcludeAgeing() {
return excludeAgeing;
}
public void setExcludeAgeing(Boolean excludeAgeing) {
this.excludeAgeing = excludeAgeing;
}
public Date getCreateDatetime() {
return createDatetime;
}
public void setCreateDatetime(Date createDatetime) {
this.createDatetime = createDatetime;
}
public Integer getCurrencyId() {
return currencyId;
}
public void setCurrencyId(Integer currencyId) {
this.currencyId = currencyId;
}
public int getDeleted() {
return deleted;
}
public void setDeleted(int deleted) {
this.deleted = deleted;
}
public int getFailedAttempts() {
return failedAttempts;
}
public void setFailedAttempts(int failedAttempts) {
this.failedAttempts = failedAttempts;
}
public int getUserId() {
return id;
}
public void setUserId(int id) {
this.id = id;
}
public Date getLastLogin() {
return lastLogin;
}
public void setLastLogin(Date lastLogin) {
this.lastLogin = lastLogin;
}
public Date getLastStatusChange() {
return lastStatusChange;
}
public void setLastStatusChange(Date lastStatusChange) {
this.lastStatusChange = lastStatusChange;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getLanguageId() {
return languageId;
}
public void setLanguageId(Integer languageId) {
this.languageId = languageId;
}
public Integer getMainOrderId() {
return mainOrderId;
}
public void setMainOrderId(Integer mainOrderId) {
this.mainOrderId = mainOrderId;
}
public String[] getBlacklistMatches() {
return blacklistMatches;
}
public void setBlacklistMatches(String[] blacklistMatches) {
this.blacklistMatches = blacklistMatches;
}
public Boolean getUserIdBlacklisted() {
return userIdBlacklisted;
}
public void setUserIdBlacklisted(Boolean userIdBlacklisted) {
this.userIdBlacklisted = userIdBlacklisted;
}
public Integer[] getChildIds() {
return childIds;
}
public void setChildIds(Integer[] childIds) {
this.childIds = childIds;
}
public String getOwingBalance() {
return owingBalance;
}
public BigDecimal getOwingBalanceAsDecimal() {
return owingBalance == null ? null : new BigDecimal(owingBalance);
}
public void setOwingBalance(String owingBalance) {
this.owingBalance = owingBalance;
}
public void setOwingBalance(BigDecimal owingBalance) {
this.owingBalance = (owingBalance != null ? owingBalance.toString() : null);
}
public Integer getBalanceType() {
return balanceType;
}
public void setBalanceType(Integer balanceType) {
this.balanceType = balanceType;
}
public String getCreditLimit() {
return creditLimit;
}
public BigDecimal getCreditLimitAsDecimal() {
return creditLimit == null ? null : new BigDecimal(creditLimit);
}
public void setCreditLimitAsDecimal(BigDecimal creditLimit) {
setCreditLimit(creditLimit);
}
public void setCreditLimit(String creditLimit) {
this.creditLimit = creditLimit;
}
public void setCreditLimit(BigDecimal creditLimit) {
this.creditLimit = (creditLimit != null ? creditLimit.toString() : null);
}
public String getDynamicBalance() {
return dynamicBalance;
}
public BigDecimal getDynamicBalanceAsDecimal() {
return dynamicBalance == null ? null : new BigDecimal(dynamicBalance);
}
public void setDynamicBalance(String dynamicBalance) {
this.dynamicBalance = dynamicBalance;
}
public void setDynamicBalance(BigDecimal dynamicBalance) {
this.dynamicBalance = (dynamicBalance != null ? dynamicBalance.toString() : null);
}
public String getAutoRecharge() {
return autoRecharge;
}
public BigDecimal getAutoRechargeAsDecimal() {
return autoRecharge != null ? new BigDecimal(autoRecharge) : null;
}
public void setAutoRechargeAsDecimal(BigDecimal autoRecharge) {
setAutoRecharge(autoRecharge);
}
public void setAutoRecharge(String autoRecharge) {
this.autoRecharge = autoRecharge;
}
public void setAutoRecharge(BigDecimal autoRecharge) {
this.autoRecharge = (autoRecharge != null ? autoRecharge.toString() : null);
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public Integer getAutomaticPaymentType() {
return automaticPaymentType;
}
public void setAutomaticPaymentType(Integer automaticPaymentType) {
this.automaticPaymentType = automaticPaymentType;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public Integer getInvoiceDeliveryMethodId() {
return invoiceDeliveryMethodId;
}
public void setInvoiceDeliveryMethodId(Integer invoiceDeliveryMethodId) {
this.invoiceDeliveryMethodId = invoiceDeliveryMethodId;
}
public Integer getDueDateUnitId() {
return dueDateUnitId;
}
public void setDueDateUnitId(Integer dueDateUnitId) {
this.dueDateUnitId = dueDateUnitId;
}
public Integer getDueDateValue() {
return dueDateValue;
}
public void setDueDateValue(Integer dueDateValue) {
this.dueDateValue = dueDateValue;
}
public Date getNextInvoiceDate() {
return nextInvoiceDate;
}
public void setNextInvoiceDate(Date nextInvoiceDate) {
this.nextInvoiceDate = nextInvoiceDate;
}
/**
* Unsupported, web-service security enforced using {@link #getOwningUserId()}
*
* @return null
*/
public Integer getOwningEntityId() {
return null;
}
public Integer getOwningUserId() {
return getUserId();
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("UserWS [ach=");
builder.append(ach);
builder.append(", autoRecharge=");
builder.append(autoRecharge);
builder.append(", automaticPaymentType=");
builder.append(automaticPaymentType);
builder.append(", balanceType=");
builder.append(balanceType);
builder.append(", blacklistMatches=");
builder.append(Arrays.toString(blacklistMatches));
builder.append(", childIds=");
builder.append(Arrays.toString(childIds));
builder.append(", companyName=");
builder.append(companyName);
builder.append(", contact=");
builder.append(contact);
builder.append(", createDatetime=");
builder.append(createDatetime);
builder.append(", creditCard=");
builder.append(creditCard);
builder.append(", creditLimit=");
builder.append(creditLimit);
builder.append(", currencyId=");
builder.append(currencyId);
builder.append(", customerId=");
builder.append(customerId);
builder.append(", deleted=");
builder.append(deleted);
builder.append(", dueDateUnitId=");
builder.append(dueDateUnitId);
builder.append(", dueDateValue=");
builder.append(dueDateValue);
builder.append(", dynamicBalance=");
builder.append(dynamicBalance);
builder.append(", excludeAgeing=");
builder.append(excludeAgeing);
builder.append(", failedAttempts=");
builder.append(failedAttempts);
builder.append(", id=");
builder.append(id);
builder.append(", invoiceChild=");
builder.append(invoiceChild);
builder.append(", invoiceDeliveryMethodId=");
builder.append(invoiceDeliveryMethodId);
builder.append(", isParent=");
builder.append(isParent);
builder.append(", language=");
builder.append(language);
builder.append(", languageId=");
builder.append(languageId);
builder.append(", lastLogin=");
builder.append(lastLogin);
builder.append(", lastStatusChange=");
builder.append(lastStatusChange);
builder.append(", mainOrderId=");
builder.append(mainOrderId);
builder.append(", mainRoleId=");
builder.append(mainRoleId);
builder.append(", nextInvoiceDate=");
builder.append(nextInvoiceDate);
builder.append(", notes=");
builder.append(notes);
builder.append(", owingBalance=");
builder.append(owingBalance);
builder.append(", parentId=");
builder.append(parentId);
builder.append(", partnerId=");
builder.append(partnerId);
builder.append(", password=");
builder.append(password);
builder.append(", role=");
builder.append(role);
builder.append(", status=");
builder.append(status);
builder.append(", statusId=");
builder.append(statusId);
builder.append(", subscriberStatusId=");
builder.append(subscriberStatusId);
builder.append(", userIdBlacklisted=");
builder.append(userIdBlacklisted);
builder.append(", userName=");
builder.append(userName);
builder.append("]");
return builder.toString();
}
}