Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions sources/api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@
<parent>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.saas.parent</artifactId>
<version>3.1.4</version>
<version>3.2.0</version>
</parent>
<artifactId>tools.dynamia.modules.saas.api</artifactId>

<name>DynamiaModules - SaaS API</name>
<url>https://www.dynamia.tools/modules/saas</url>
<version>3.1.4</version>
<version>3.2.0</version>

<build>
<plugins>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@

import tools.dynamia.actions.AbstractAction;
import tools.dynamia.actions.ActionEvent;
import tools.dynamia.actions.ActionFilter;
import tools.dynamia.actions.ActionSelfFilter;
import tools.dynamia.integration.Containers;

public abstract class AccountAdminAction extends AbstractAction implements ActionFilter {
public abstract class AccountAdminAction extends AbstractAction implements ActionSelfFilter {

private boolean authorizationRequired;

Expand Down
8 changes: 4 additions & 4 deletions sources/core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@
<parent>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.saas.parent</artifactId>
<version>3.1.4</version>
<version>3.2.0</version>
</parent>
<artifactId>tools.dynamia.modules.saas</artifactId>
<version>3.1.4</version>
<version>3.2.0</version>
<name>DynamiaModules - SaaS Core</name>
<url>https://www.dynamia.tools/modules/saas</url>

Expand All @@ -49,12 +49,12 @@
<dependency>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.saas.api</artifactId>
<version>3.1.4</version>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.saas.jpa</artifactId>
<version>3.1.4</version>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import tools.dynamia.integration.Containers;
import tools.dynamia.modules.saas.api.dto.AccountDTO;
import tools.dynamia.modules.saas.domain.Account;
import tools.dynamia.modules.saas.services.AccountService;
import tools.dynamia.web.util.HttpUtils;

import java.util.List;
Expand All @@ -37,11 +36,9 @@ public class AccountContext {

private final LoggingService logger = new SLF4JLoggingService(AccountContext.class);

private final AccountService service;
private final List<AccountResolver> resolvers;

public AccountContext(AccountService service, List<AccountResolver> resolvers) {
this.service = service;
public AccountContext(List<AccountResolver> resolvers) {
this.resolvers = resolvers;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package tools.dynamia.modules.saas;

import tools.dynamia.modules.saas.domain.AccountPayment;

import java.util.Map;

/**
* Basic API to implement processing account payments. You should implement
* your own payment processor and register it using spring annotations
* registry.
*/
public interface AccountPaymentProcessor {

String getId();

String getName();

Map<String, Object> processPayment(AccountPayment payment);
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

package tools.dynamia.modules.saas;

import org.springframework.beans.factory.annotation.Autowired;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.springframework.web.context.annotation.SessionScope;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
Expand All @@ -41,12 +41,17 @@
public class AccountSessionHolder implements Serializable {


private transient final AccountService service;
@JsonIgnore
private transient AccountService service;

private Locale accountLocale;
private Account current;
private Long currentId;
private AccountDTO currentDTO;

public AccountSessionHolder() {
this.service = Containers.get().findObject(AccountService.class);
}

public AccountSessionHolder(AccountService service) {
this.service = service;
}
Expand All @@ -69,19 +74,17 @@ public static AccountSessionHolder get() {
}

public Account getCurrent() {
return current;
return currentId != null ? getService().getAccountById(currentId) : null;
}

public void setCurrent(final Account account) {
if (account != null) {
try {
DomainUtils.lookupCrudService().executeWithinTransaction(() -> {

this.current = service.getAccountById(account.getId());
var current = getService().getAccountById(account.getId());
accountLocale = current.getLocale() != null ? Locale.forLanguageTag(current.getLocale()) : null;

currentDTO = null;
toDTO();
currentId = current.getId();
currentDTO = current.toDTO();
});
} catch (Exception e) {
//ignore
Expand All @@ -91,16 +94,24 @@ public void setCurrent(final Account account) {


public AccountDTO toDTO() {
if (currentDTO == null && current != null) {
currentDTO = current.toDTO();
}
return currentDTO;
}

public Long getId() {
return currentId;
}

public Locale getAccountLocale() {
if (accountLocale == null) {
accountLocale = Locale.getDefault();
}
return accountLocale;
}

private AccountService getService() {
if (service == null) {
service = Containers.get().findObject(AccountService.class);
}
return service;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@
package tools.dynamia.modules.saas.domain;

import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import org.hibernate.annotations.BatchSize;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import tools.dynamia.commons.DateTimeUtils;
Expand All @@ -33,12 +38,7 @@
import tools.dynamia.modules.saas.api.enums.AccountStatus;
import tools.dynamia.web.util.HttpUtils;

import jakarta.persistence.*;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

import java.io.Serial;
import java.math.BigDecimal;
import java.time.ZoneId;
import java.util.ArrayList;
Expand All @@ -59,6 +59,7 @@ public class Account extends SimpleEntity implements Transferable<AccountDTO> {
/**
*
*/
@Serial
private static final long serialVersionUID = 684169179001325225L;

@NotNull
Expand Down Expand Up @@ -93,14 +94,14 @@ public class Account extends SimpleEntity implements Transferable<AccountDTO> {
private Date creationDate = new Date();
private boolean defaultAccount;
private String skin;
@OneToOne
@ManyToOne
@JsonIgnore
private EntityFile logo;
@Column(length = 600)
private String logoURL;
private String locale;
private String timeZone;
@OneToOne
@ManyToOne
@JsonIgnore
private AccountProfile profile;
private long users;
Expand Down Expand Up @@ -138,6 +139,7 @@ public class Account extends SimpleEntity implements Transferable<AccountDTO> {
private String globalMessage;
private boolean showGlobalMessage;
private String globalMessageType;
@JsonIgnore
@OneToMany(mappedBy = "account", cascade = CascadeType.ALL, orphanRemoval = true)
private List<AccountFeature> features = new ArrayList<>();
private BigDecimal balance = BigDecimal.ZERO;
Expand All @@ -146,6 +148,7 @@ public class Account extends SimpleEntity implements Transferable<AccountDTO> {
@Temporal(TemporalType.DATE)
private Date discountExpire;
@OneToMany(mappedBy = "account", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIgnore
private List<AccountAdditionalService> additionalServices = new ArrayList<>();
@Column(length = 2000)
private String customerInfo;
Expand All @@ -158,12 +161,17 @@ public class Account extends SimpleEntity implements Transferable<AccountDTO> {
private boolean useTempPaymentDay;
private AccountStatus oldStatus;

@OneToOne
@ManyToOne
private AccountCategory category;

@OneToOne
@ManyToOne
private AccountReseller reseller;

@ManyToOne
private AccountRegion accountRegion;
private boolean templateAccount;


private long openTicketsCount;
private long closedTicketsCount;
private boolean autoInit = true;
Expand Down Expand Up @@ -886,4 +894,20 @@ public String getRedirect() {
public void setRedirect(String redirect) {
this.redirect = redirect;
}

public AccountRegion getAccountRegion() {
return accountRegion;
}

public void setAccountRegion(AccountRegion accountRegion) {
this.accountRegion = accountRegion;
}

public boolean isTemplateAccount() {
return templateAccount;
}

public void setTemplateAccount(boolean templateAccount) {
this.templateAccount = templateAccount;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package tools.dynamia.modules.saas.domain;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import tools.dynamia.domain.jpa.SimpleEntity;

@Entity
@Table(name = "saas_payments_providers")
public class AccountPaymentProvider extends SimpleEntity {

@NotNull
private String name;
@Column(length = 500)
private String apiKey;
@Column(length = 500)
private String apiSecret;
private String serviceURL;
private String merchantId;
private boolean testMode;

private boolean active = true;

private String paymentProcessor;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getApiKey() {
return apiKey;
}

public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}

public String getApiSecret() {
return apiSecret;
}

public void setApiSecret(String apiSecret) {
this.apiSecret = apiSecret;
}

public String getServiceURL() {
return serviceURL;
}

public void setServiceURL(String serviceURL) {
this.serviceURL = serviceURL;
}

public boolean isTestMode() {
return testMode;
}

public void setTestMode(boolean testMode) {
this.testMode = testMode;
}

public String getMerchantId() {
return merchantId;
}

public void setMerchantId(String merchantId) {
this.merchantId = merchantId;
}

public boolean isActive() {
return active;
}

public void setActive(boolean active) {
this.active = active;
}

@Override
public String toString() {
return name;
}

public String getPaymentProcessor() {
return paymentProcessor;
}

public void setPaymentProcessor(String paymentProcessor) {
this.paymentProcessor = paymentProcessor;
}
}
Loading
Loading