Subversion Repositories SmartDukaan

Rev

Rev 31163 | Rev 33015 | 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 com.spice.profitmandi.dao.convertor.LocalDateTimeAttributeConverter;
import com.spice.profitmandi.dao.entity.catalog.Item;
import com.spice.profitmandi.dao.enumuration.fofo.ScanType;
import org.hibernate.annotations.UpdateTimestamp;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Objects;

@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"),
                //For Serialized models
                @NamedQuery(name = "InventoryItem.selectAllLineItemIdsByInventoryIds", query = "select new com.spice.profitmandi.dao.model.InventoryItemSaleModel(ii.id, lii.id)   from InventoryItem ii" +
                                " join Purchase p on p.id = ii.purchaseId join Order o on o.invoiceNumber = p.purchaseReference" +
                                " join LineItem li on li.orderId = o.id join LineItemImei lii on (lii.id=li.id and lii.serialNumber=ii.serialNumber)" +
                                "where ii.id in :inventoryItemIds")
})
@Entity
@Table(name = "fofo.inventory_item")
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;

        @Transient
        private String pdValidationFailedReason = null;

        @Override
        public boolean equals(Object o) {
                if (this == o) return true;
                if (o == null || getClass() != o.getClass()) return false;
                InventoryItem that = (InventoryItem) o;
                return id == that.id && itemId == that.itemId && fofoId == that.fofoId && initialQuantity == that.initialQuantity && goodQuantity == that.goodQuantity && badQuantity == that.badQuantity && purchaseId == that.purchaseId && Float.compare(that.unitPrice, unitPrice) == 0 && Float.compare(that.priceDropAmount, priceDropAmount) == 0 && buyBack == that.buyBack && Float.compare(that.igstRate, igstRate) == 0 && Float.compare(that.cgstRate, cgstRate) == 0 && Float.compare(that.sgstRate, sgstRate) == 0 && priceDropValidated == that.priceDropValidated && pdValidationFailedReason == that.pdValidationFailedReason && Objects.equals(serialNumber, that.serialNumber) && Objects.equals(activationTimestamp, that.activationTimestamp) && lastScanType == that.lastScanType && Objects.equals(hsnCode, that.hsnCode) && Objects.equals(createTimestamp, that.createTimestamp) && Objects.equals(updateTimestamp, that.updateTimestamp) && Objects.equals(item, that.item) && Objects.equals(purchase, that.purchase) && Objects.equals(itemDescription, that.itemDescription) && Objects.equals(activatedTimestamp, that.activatedTimestamp);
        }

        @Override
        public int hashCode() {
                return Objects.hash(id, itemId, fofoId, serialNumber, initialQuantity, goodQuantity, badQuantity, activationTimestamp, lastScanType, purchaseId, unitPrice, priceDropAmount, buyBack, igstRate, cgstRate, sgstRate, hsnCode, createTimestamp, updateTimestamp, item, purchase, itemDescription, activatedTimestamp, priceDropValidated, pdValidationFailedReason);
        }

        public String getPdValidationFailedReason() {
                return pdValidationFailedReason;
        }

        public void setPdValidationFailedReason(String pdValidationFailedReason) {
                this.pdValidationFailedReason = pdValidationFailedReason;
        }

        @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 +
                                ", priceDropValidated=" + priceDropValidated +
                                ", pdValidationFailedReason='" + pdValidationFailedReason + '\'' +
                                '}';
        }

        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 double getMarginPercentage(double amount) {
                return amount / this.getNetPrice() * (100 + this.getCgstRate() + this.getIgstRate() + this.getSgstRate());
        }

        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;
        }

        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 int compareTo(Object o) {
                return o.hashCode() - this.hashCode();
        }

}