Discount.java 6.94 KB
/*
 * Copyright Codecrew Ry
 * 
 * All rights reserved.
 * 
 * This license applies to any software containing a notice placed by the 
 * copyright holder. Such software is herein referred to as the Software. 
 * This license covers modification, distribution and use of the Software. 
 * 
 * Any distribution and use in source and binary forms, with or without 
 * modification is not permitted without explicit written permission from the 
 * copyright owner. 
 * 
 * A non-exclusive royalty-free right is granted to the copyright owner of the 
 * Software to use, modify and distribute all modifications to the Software in 
 * future versions of the Software. 
 * 
 */
package fi.codecrew.moya.model;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * 
 */
@Entity
@Table(name = "discounts")
public class Discount extends GenericEntity {
    private static final long serialVersionUID = 1L;

    private static final String EVENT_ID = "event_id";
    private static final BigDecimal SCALE4_ZERO = BigDecimal.ZERO.setScale(4, RoundingMode.HALF_UP);
    private static final BigDecimal SCALE6_ZERO = BigDecimal.ZERO.setScale(6, RoundingMode.HALF_UP);
    
    @ManyToOne()
    @JoinColumn(name = EVENT_ID, nullable = false)
    private LanEvent event;

    @Column(name = "percentage", nullable = false, precision = 9, scale = 6)
    private BigDecimal percentage = SCALE6_ZERO;

    @Column(name = "code")
    private String code;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "valid_from")
    private Calendar validFrom;
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "valid_to")
    private Calendar validTo;

    @Lob
    @Column(name = "details")
    private String details;

    @Column(name = "shortdesc")
    private String shortdesc;

    @Column(name = "amount_min", nullable = false, precision = 24, scale = 4)
    private BigDecimal amountMin =  SCALE4_ZERO;

    @Column(name = "amount_max", nullable = false, precision = 24, scale = 4)
    private BigDecimal amountMax = SCALE4_ZERO;

    @Column(name = "active", nullable = false)
    private boolean active = false;

    @Column(name = "max_num", nullable = false, precision = 24, scale = 4)
    private BigDecimal maxNum = SCALE4_ZERO;

    @Column(name = "per_user", nullable = false, precision = 24, scale = 4)
    private BigDecimal perUser = SCALE4_ZERO;

    @Column(name = "total_count", nullable = false, precision = 24, scale = 4)
    private BigDecimal totalCount = SCALE4_ZERO;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "discount")
    private List<DiscountInstance> discountInstances;

    @JoinColumn(name = "role_id", referencedColumnName = "id")
    @ManyToOne()
    private Role role;

    @JoinColumn(name = "product_id", referencedColumnName = "id", nullable = false, updatable = false)
    @ManyToMany(mappedBy = "discounts")
    private List<Product> products;

    public Discount() {
        super();
    }

    public Discount(Product product) {
        super();
        this.event = product.getEvent();
        this.products = new ArrayList<Product>();
        products.add(product);
    }

    public BigDecimal getAmountMin() {
        return amountMin;
    }

    public void setAmountMin(BigDecimal amountMin) {
        this.amountMin = amountMin;
    }

    public BigDecimal getAmountMax() {
        return amountMax;
    }

    public void setAmountMax(BigDecimal amountMax) {
        this.amountMax = amountMax;
    }

    public BigDecimal getMaxNum() {
        return maxNum;
    }

    public void setMaxNum(BigDecimal maxNum) {
        this.maxNum = maxNum;
    }

    public BigDecimal getPerUser() {
        return perUser;
    }

    public void setPerUser(BigDecimal perUser) {
        this.perUser = perUser;
    }

    public boolean isActive() {
        return active;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getDetails() {
        return details;
    }

    public void setDetails(String details) {
        this.details = details;
    }

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

    public List<DiscountInstance> getDiscountInstances() {
        return discountInstances;
    }

    public void setDiscountInstances(List<DiscountInstance> discountInstanceList) {
        this.discountInstances = discountInstanceList;
    }

    public void setRole(Role role) {
        this.role = role;
    }

    public Role getRole() {
        return role;
    }

    public void setPercentage(BigDecimal percentage) {
        this.percentage = percentage;
    }

    public BigDecimal getPercentage() {
        return percentage;
    }

    public void setShortdesc(String shortdesc) {
        this.shortdesc = shortdesc;
    }

    public String getShortdesc() {
        return shortdesc;
    }

    public void setTotalCount(BigDecimal totalCount) {
        this.totalCount = totalCount;
    }

    public BigDecimal getTotalCount() {
        return totalCount;
    }

    public void setProducts(List<Product> products) {
        this.products = products;
    }

    public List<Product> getProducts() {
        return products;
    }

    public LanEvent getEvent() {
        return event;
    }

    public void setEvent(LanEvent event) {
        this.event = event;
    }

    public Date getValidToTime()
    {
        Date ret = null;
        if (validTo != null) {
            ret = validTo.getTime();
        }
        return ret;
    }

    public void setValidToTime(Date date)
    {
        if (date == null)
        {
            validTo = null;
        } else {
            if (validTo == null) {
                validTo = Calendar.getInstance();
            }
            validTo.setTime(date);
        }

    }

    public Date getValidFromTime()
    {
        Date ret = null;
        if (validFrom != null) {
            ret = validFrom.getTime();
        }
        return ret;
    }

    public void setValidFromTime(Date date)
    {
        if (date == null)
        {
            validFrom = null;
        } else {
            if (validFrom == null) {
                validFrom = Calendar.getInstance();
            }
            validFrom.setTime(date);
        }

    }

    public Calendar getValidTo() {
        return validTo;
    }

    public void setValidTo(Calendar validTo) {
        this.validTo = validTo;
    }

    public Calendar getValidFrom() {
        return validFrom;
    }

    public void setValidFrom(Calendar validFrom) {
        this.validFrom = validFrom;
    }

}