Subversion Repositories SmartDukaan

Rev

Rev 29095 | Rev 30523 | Go to most recent revision | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.spice.profitmandi.dao.entity.fofo;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import javax.persistence.Column;
import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.UpdateTimestamp;

import com.spice.profitmandi.dao.convertor.LocalDateTimeAttributeConverter;
import com.spice.profitmandi.dao.entity.catalog.Item;
import com.spice.profitmandi.dao.enumuration.fofo.ScanType;

@NamedQueries({
                @NamedQuery(name = "InventoryItem.selectScannedCount", query = "select ii.itemId, sum(ii.initialQuantity) from InventoryItem ii "
                                + "where ii.itemId in :itemIds and ii.fofoId = :fofoId and ii.purchaseId = :purchaseId group by ii.itemId") })
@Entity
@Table(name = "fofo.inventory_item", schema = "fofo")
public class InventoryItem implements Comparable {

        public InventoryItem(String serialNumber) {
                this.serialNumber = serialNumber;
        }

        public InventoryItem() {

        }

        @Id
        @Column(name = "id", unique = true, updatable = false)
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;

        @Column(name = "item_id")
        private int itemId;

        @Column(name = "fofo_id")
        private int fofoId;

        @Column(name = "serial_number", length = 100)
        private String serialNumber;

        @Column(name = "initial_quantity")
        private int initialQuantity;

        @Column(name = "good_quantity")
        private int goodQuantity;

        @Column(name = "bad_quantity")
        private int badQuantity;
        
        @Column(name = "activation_timestamp")
        private LocalDateTime activationTimestamp;

        @Column(name = "last_scan_type")
        @Enumerated(EnumType.STRING)
        private ScanType lastScanType;

        @Column(name = "purchase_id")
        private int purchaseId;

        @Column(name = "unit_price")
        private float unitPrice;

        @Column(name = "price_drop_amount")
        private float priceDropAmount;

        @Column(name = "buy_back", columnDefinition = "tinyint(1) default 1")
        private boolean buyBack;

        @Column(name = "igst_rate")
        private float igstRate;

        @Column(name = "cgst_rate")
        private float cgstRate;

        @Column(name = "sgst_rate")
        private float sgstRate;

        @Column(name = "hsn_code")
        private String hsnCode;

        @Convert(converter = LocalDateTimeAttributeConverter.class)
        @Column(name = "create_timestamp")
        private LocalDateTime createTimestamp = LocalDateTime.now();

        @Convert(converter = LocalDateTimeAttributeConverter.class)
        @Column(name = "update_timestamp")
        @UpdateTimestamp
        private LocalDateTime updateTimestamp = LocalDateTime.now();

        @OneToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "item_id", insertable = false, updatable = false, nullable = false, referencedColumnName = "id")
        private Item item;

        @OneToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "purchase_id", insertable = false, updatable = false, nullable = false, referencedColumnName = "id")
        private Purchase purchase;

        public void setUnitPrice(float unitPrice) {
                this.unitPrice = unitPrice;
        }

        @Transient
        private String itemDescription;

        @Transient
        private LocalDateTime activatedTimestamp;
        
        @Transient
        private boolean priceDropValidated = true;
        
        public LocalDateTime getActivatedTimestamp() {
                return activatedTimestamp;
        }

        public void setActivatedTimestamp(LocalDateTime activatedTimestamp) {
                this.activatedTimestamp = activatedTimestamp;
        }

        public int getId() {
                return id;
        }

        public void setId(int id) {
                this.id = id;
        }

        public int getItemId() {
                return itemId;
        }

        public void setItemId(int itemId) {
                this.itemId = itemId;
        }

        public void setFofoId(int fofoId) {
                this.fofoId = fofoId;
        }

        public int getFofoId() {
                return fofoId;
        }

        public String getSerialNumber() {
                return serialNumber;
        }

        public void setSerialNumber(String serialNumber) {
                this.serialNumber = serialNumber;
        }

        public int getInitialQuantity() {
                return initialQuantity;
        }

        public float getUnitPrice() {
                return unitPrice;
        }

        public void setUnitPrice(Float unitPrice) {
                this.unitPrice = unitPrice;
        }

        public void setInitialQuantity(int initialQuantity) {
                this.initialQuantity = initialQuantity;
        }

        public float getNetPrice() {
                return unitPrice - priceDropAmount;
        }

        public int getGoodQuantity() {
                return goodQuantity;
        }

        public void setGoodQuantity(int goodQuantity) {
                this.goodQuantity = goodQuantity;
        }

        public int getBadQuantity() {
                return badQuantity;
        }

        public void setBadQuantity(int badQuantity) {
                this.badQuantity = badQuantity;
        }

        public ScanType getLastScanType() {
                return lastScanType;
        }

        public void setLastScanType(ScanType lastScanType) {
                this.lastScanType = lastScanType;
        }

        public int getPurchaseId() {
                return purchaseId;
        }

        public void setPurchaseId(int purchaseId) {
                this.purchaseId = purchaseId;
        }

        public float getPriceDropAmount() {
                return priceDropAmount;
        }

        public void setPriceDropAmount(float priceDropAmount) {
                this.priceDropAmount = priceDropAmount;
        }

        public float getIgstRate() {
                return igstRate;
        }

        public void setIgstRate(float igstRate) {
                this.igstRate = igstRate;
        }

        public float getCgstRate() {
                return cgstRate;
        }

        public void setCgstRate(float cgstRate) {
                this.cgstRate = cgstRate;
        }

        public float getSgstRate() {
                return sgstRate;
        }

        public void setSgstRate(float sgstRate) {
                this.sgstRate = sgstRate;
        }

        public String getHsnCode() {
                return hsnCode;
        }

        public void setHsnCode(String hsnCode) {
                this.hsnCode = hsnCode;
        }

        public LocalDateTime getCreateTimestamp() {
                return createTimestamp;
        }

        public void setCreateTimestamp(LocalDateTime createTimestamp) {
                this.createTimestamp = createTimestamp;
        }

        public LocalDateTime getUpdateTimestamp() {
                return updateTimestamp;
        }

        public void setUpdateTimestamp(LocalDateTime updateTimestamp) {
                this.updateTimestamp = updateTimestamp;
        }

        public Item getItem() {
                return item;
        }

        public void setItem(Item item) {
                this.item = item;
        }

        public boolean isBuyBack() {
                return buyBack;
        }

        public void setBuyBack(boolean buyBack) {
                this.buyBack = buyBack;
        }

        public Purchase getPurchase() {
                return purchase;
        }

        public void setPurchase(Purchase purchase) {
                this.purchase = purchase;
        }

        public String getFormattedCreateTimestamp() {
                if (createTimestamp == null) {
                        return null;
                }
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm");
                return createTimestamp.format(formatter);
        }

        public String getItemDescription() {
                return itemDescription;
        }

        public void setItemDescription(String itemDescription) {
                this.itemDescription = itemDescription;
        }

        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + id;
                return result;
        }

        @Override
        public boolean equals(Object obj) {
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (getClass() != obj.getClass())
                        return false;
                InventoryItem other = (InventoryItem) obj;
                if (id != other.id)
                        return false;
                return true;
        }

        public LocalDateTime getActivationTimestamp() {
                return activationTimestamp;
        }

        public void setActivationTimestamp(LocalDateTime activationTimestamp) {
                this.activationTimestamp = activationTimestamp;
        }

        public boolean isPriceDropValidated() {
                return priceDropValidated;
        }

        public void setPriceDropValidated(boolean priceDropValidated) {
                this.priceDropValidated = priceDropValidated;
        }

        @Override
        public String toString() {
                return "InventoryItem [id=" + id + ", itemId=" + itemId + ", fofoId=" + fofoId + ", serialNumber="
                                + serialNumber + ", initialQuantity=" + initialQuantity + ", goodQuantity=" + goodQuantity
                                + ", badQuantity=" + badQuantity + ", activationTimestamp=" + activationTimestamp + ", lastScanType="
                                + lastScanType + ", purchaseId=" + purchaseId + ", unitPrice=" + unitPrice + ", priceDropAmount="
                                + priceDropAmount + ", buyBack=" + buyBack + ", igstRate=" + igstRate + ", cgstRate=" + cgstRate
                                + ", sgstRate=" + sgstRate + ", hsnCode=" + hsnCode + ", createTimestamp=" + createTimestamp
                                + ", updateTimestamp=" + updateTimestamp + ", item=" + item + ", purchase=" + purchase
                                + ", itemDescription=" + itemDescription + ", activatedTimestamp=" + activatedTimestamp + "]";
        }

        @Override
        public int compareTo(Object o) {
                return o.hashCode() - this.hashCode();
        }

}