package com.utopiaindustries.model.uind;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Map;

public class PurchaseOrder {
    private long id;
    private String code;
    private LocalDateTime dateGenerated;
    private LocalDate physicalDate;
    private LocalDateTime approvalDate;
    private LocalDateTime indentDivApprovalDate;
    private String generatedByUser;
    private String approvedByUser;
    private String indenterDivApprovedByUser;
    private long companyId;
    private long functionId;
    private long departmentId;
    private Long sectionId;
    private String quotationReferenceNumber;
    private LocalDate quotationDate;
    private long supplierId;
    private Long brokerId;
    private Long deliveryLocationSiteId;
    private String userRemarks;
    private String userStatus;
    private String managementStatus;
    private String indenterDivPoStatus;
    private String managementRemarks;
    private String indenterDivPoRemarks;
    private String shipmentMode;
    private String currencySymbol;
    private Float currencyConversionRate;
    private float gstAmount;
    private float gstAmountInPkr;
    private float totalCost;
    private float totalCostInPkr;
    private String totalCostInWords;
    private String totalCostInWordsInPkr;
    private float outstandingAdvanceAmount; // this is the balance advance amount, not total
    private float amountPaid;
    private Long mainPaymentTermId;
    private LocalDateTime dateCompleted;
    private String terminationReason;
    private String parentDocumentType;
    private String parentDocumentCode;
    private Long parentDocumentId;
    private Long indentId;
    private boolean completed;
    private boolean isRated;
    private boolean isLocked;
    private boolean areChargesPaid; // if charges are "billed" or "un-billed". not necessarily "paid"
    private boolean isUrgent;
    private boolean isFlagged;
    // wrapper fields


    public long getId() {
        return id;
    }

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

    public String getCode() {
        return code;
    }

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

    public LocalDateTime getDateGenerated() {
        return dateGenerated;
    }

    public void setDateGenerated(LocalDateTime dateGenerated) {
        this.dateGenerated = dateGenerated;
    }

    public LocalDate getPhysicalDate() {
        return physicalDate;
    }

    public void setPhysicalDate(LocalDate physicalDate) {
        this.physicalDate = physicalDate;
    }

    public LocalDateTime getApprovalDate() {
        return approvalDate;
    }

    public void setApprovalDate(LocalDateTime approvalDate) {
        this.approvalDate = approvalDate;
    }

    public LocalDateTime getIndentDivApprovalDate() {
        return indentDivApprovalDate;
    }

    public void setIndentDivApprovalDate(LocalDateTime indentDivApprovalDate) {
        this.indentDivApprovalDate = indentDivApprovalDate;
    }

    public String getGeneratedByUser() {
        return generatedByUser;
    }

    public void setGeneratedByUser(String generatedByUser) {
        this.generatedByUser = generatedByUser;
    }

    public String getApprovedByUser() {
        return approvedByUser;
    }

    public void setApprovedByUser(String approvedByUser) {
        this.approvedByUser = approvedByUser;
    }

    public String getIndenterDivApprovedByUser() {
        return indenterDivApprovedByUser;
    }

    public void setIndenterDivApprovedByUser(String indenterDivApprovedByUser) {
        this.indenterDivApprovedByUser = indenterDivApprovedByUser;
    }

    public long getCompanyId() {
        return companyId;
    }

    public void setCompanyId(long companyId) {
        this.companyId = companyId;
    }

    public long getFunctionId() {
        return functionId;
    }

    public void setFunctionId(long functionId) {
        this.functionId = functionId;
    }

    public long getDepartmentId() {
        return departmentId;
    }

    public void setDepartmentId(long departmentId) {
        this.departmentId = departmentId;
    }

    public Long getSectionId() {
        return sectionId;
    }

    public void setSectionId(Long sectionId) {
        this.sectionId = sectionId;
    }

    public String getQuotationReferenceNumber() {
        return quotationReferenceNumber;
    }

    public void setQuotationReferenceNumber(String quotationReferenceNumber) {
        this.quotationReferenceNumber = quotationReferenceNumber;
    }

    public LocalDate getQuotationDate() {
        return quotationDate;
    }

    public void setQuotationDate(LocalDate quotationDate) {
        this.quotationDate = quotationDate;
    }

    public long getSupplierId() {
        return supplierId;
    }

    public void setSupplierId(long supplierId) {
        this.supplierId = supplierId;
    }

    public Long getBrokerId() {
        return brokerId;
    }

    public void setBrokerId(Long brokerId) {
        this.brokerId = brokerId;
    }

    public Long getDeliveryLocationSiteId() {
        return deliveryLocationSiteId;
    }

    public void setDeliveryLocationSiteId(Long deliveryLocationSiteId) {
        this.deliveryLocationSiteId = deliveryLocationSiteId;
    }

    public String getUserRemarks() {
        return userRemarks;
    }

    public void setUserRemarks(String userRemarks) {
        this.userRemarks = userRemarks;
    }

    public String getUserStatus() {
        return userStatus;
    }

    public void setUserStatus(String userStatus) {
        this.userStatus = userStatus;
    }

    public String getManagementStatus() {
        return managementStatus;
    }

    public void setManagementStatus(String managementStatus) {
        this.managementStatus = managementStatus;
    }

    public String getIndenterDivPoStatus() {
        return indenterDivPoStatus;
    }

    public void setIndenterDivPoStatus(String indenterDivPoStatus) {
        this.indenterDivPoStatus = indenterDivPoStatus;
    }

    public String getManagementRemarks() {
        return managementRemarks;
    }

    public void setManagementRemarks(String managementRemarks) {
        this.managementRemarks = managementRemarks;
    }

    public String getIndenterDivPoRemarks() {
        return indenterDivPoRemarks;
    }

    public void setIndenterDivPoRemarks(String indenterDivPoRemarks) {
        this.indenterDivPoRemarks = indenterDivPoRemarks;
    }

    public String getShipmentMode() {
        return shipmentMode;
    }

    public void setShipmentMode(String shipmentMode) {
        this.shipmentMode = shipmentMode;
    }

    public String getCurrencySymbol() {
        return currencySymbol;
    }

    public void setCurrencySymbol(String currencySymbol) {
        this.currencySymbol = currencySymbol;
    }

    public Float getCurrencyConversionRate() {
        return currencyConversionRate;
    }

    public void setCurrencyConversionRate(Float currencyConversionRate) {
        this.currencyConversionRate = currencyConversionRate;
    }

    public float getGstAmount() {
        return gstAmount;
    }

    public void setGstAmount(float gstAmount) {
        this.gstAmount = gstAmount;
    }

    public float getGstAmountInPkr() {
        return gstAmountInPkr;
    }

    public void setGstAmountInPkr(float gstAmountInPkr) {
        this.gstAmountInPkr = gstAmountInPkr;
    }

    public float getTotalCost() {
        return totalCost;
    }

    public void setTotalCost(float totalCost) {
        this.totalCost = totalCost;
    }

    public float getTotalCostInPkr() {
        return totalCostInPkr;
    }

    public void setTotalCostInPkr(float totalCostInPkr) {
        this.totalCostInPkr = totalCostInPkr;
    }

    public String getTotalCostInWords() {
        return totalCostInWords;
    }

    public void setTotalCostInWords(String totalCostInWords) {
        this.totalCostInWords = totalCostInWords;
    }

    public String getTotalCostInWordsInPkr() {
        return totalCostInWordsInPkr;
    }

    public void setTotalCostInWordsInPkr(String totalCostInWordsInPkr) {
        this.totalCostInWordsInPkr = totalCostInWordsInPkr;
    }

    public float getOutstandingAdvanceAmount() {
        return outstandingAdvanceAmount;
    }

    public void setOutstandingAdvanceAmount(float outstandingAdvanceAmount) {
        this.outstandingAdvanceAmount = outstandingAdvanceAmount;
    }

    public float getAmountPaid() {
        return amountPaid;
    }

    public void setAmountPaid(float amountPaid) {
        this.amountPaid = amountPaid;
    }

    public Long getMainPaymentTermId() {
        return mainPaymentTermId;
    }

    public void setMainPaymentTermId(Long mainPaymentTermId) {
        this.mainPaymentTermId = mainPaymentTermId;
    }

    public LocalDateTime getDateCompleted() {
        return dateCompleted;
    }

    public void setDateCompleted(LocalDateTime dateCompleted) {
        this.dateCompleted = dateCompleted;
    }

    public String getTerminationReason() {
        return terminationReason;
    }

    public void setTerminationReason(String terminationReason) {
        this.terminationReason = terminationReason;
    }

    public String getParentDocumentType() {
        return parentDocumentType;
    }

    public void setParentDocumentType(String parentDocumentType) {
        this.parentDocumentType = parentDocumentType;
    }

    public String getParentDocumentCode() {
        return parentDocumentCode;
    }

    public void setParentDocumentCode(String parentDocumentCode) {
        this.parentDocumentCode = parentDocumentCode;
    }

    public Long getParentDocumentId() {
        return parentDocumentId;
    }

    public void setParentDocumentId(Long parentDocumentId) {
        this.parentDocumentId = parentDocumentId;
    }

    public Long getIndentId() {
        return indentId;
    }

    public void setIndentId(Long indentId) {
        this.indentId = indentId;
    }

    public boolean isCompleted() {
        return completed;
    }

    public void setCompleted(boolean completed) {
        this.completed = completed;
    }

    public boolean isRated() {
        return isRated;
    }

    public void setRated(boolean rated) {
        isRated = rated;
    }

    public boolean getIsLocked() {
        return isLocked;
    }

    public void setIsLocked(boolean locked) {
        isLocked = locked;
    }

    public boolean isAreChargesPaid() {
        return areChargesPaid;
    }

    public void setAreChargesPaid(boolean areChargesPaid) {
        this.areChargesPaid = areChargesPaid;
    }

    public boolean isUrgent() {
        return isUrgent;
    }

    public void setUrgent(boolean urgent) {
        isUrgent = urgent;
    }

    public boolean getIsFlagged() {
        return isFlagged;
    }

    public void setIsFlagged(boolean flagged) {
        isFlagged = flagged;
    }

    @Override
    public String toString() {
        return "PurchaseOrder{" +
                "id=" + id +
                ", code='" + code + '\'' +
                ", dateGenerated=" + dateGenerated +
                ", physicalDate=" + physicalDate +
                ", approvalDate=" + approvalDate +
                ", indentDivApprovalDate=" + indentDivApprovalDate +
                ", generatedByUser='" + generatedByUser + '\'' +
                ", approvedByUser='" + approvedByUser + '\'' +
                ", indenterDivApprovedByUser='" + indenterDivApprovedByUser + '\'' +
                ", companyId=" + companyId +
                ", functionId=" + functionId +
                ", departmentId=" + departmentId +
                ", sectionId=" + sectionId +
                ", quotationReferenceNumber='" + quotationReferenceNumber + '\'' +
                ", quotationDate=" + quotationDate +
                ", supplierId=" + supplierId +
                ", brokerId=" + brokerId +
                ", deliveryLocationSiteId=" + deliveryLocationSiteId +
                ", userRemarks='" + userRemarks + '\'' +
                ", userStatus='" + userStatus + '\'' +
                ", managementStatus='" + managementStatus + '\'' +
                ", indenterDivPoStatus='" + indenterDivPoStatus + '\'' +
                ", managementRemarks='" + managementRemarks + '\'' +
                ", indenterDivPoRemarks='" + indenterDivPoRemarks + '\'' +
                ", shipmentMode='" + shipmentMode + '\'' +
                ", currencySymbol='" + currencySymbol + '\'' +
                ", currencyConversionRate=" + currencyConversionRate +
                ", gstAmount=" + gstAmount +
                ", gstAmountInPkr=" + gstAmountInPkr +
                ", totalCost=" + totalCost +
                ", totalCostInPkr=" + totalCostInPkr +
                ", totalCostInWords='" + totalCostInWords + '\'' +
                ", totalCostInWordsInPkr='" + totalCostInWordsInPkr + '\'' +
                ", outstandingAdvanceAmount=" + outstandingAdvanceAmount +
                ", amountPaid=" + amountPaid +
                ", mainPaymentTermId=" + mainPaymentTermId +
                ", dateCompleted=" + dateCompleted +
                ", terminationReason='" + terminationReason + '\'' +
                ", parentDocumentType='" + parentDocumentType + '\'' +
                ", parentDocumentCode='" + parentDocumentCode + '\'' +
                ", parentDocumentId=" + parentDocumentId +
                ", indentId=" + indentId +
                ", completed=" + completed +
                ", isRated=" + isRated +
                ", isLocked=" + isLocked +
                ", areChargesPaid=" + areChargesPaid +
                ", isUrgent=" + isUrgent +
                ", isFlagged=" + isFlagged +
                '}';
    }
}