package com.jeeplus.finance.invoice.domain.OMS;
import org.hibernate.validator.constraints.NotBlank;

import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

/**
 * 机动车销售统一发票信息子实体类
 * 发票类型为83、87时必传
 */
public class Vehicle {

    /**
     * 厂牌型号
     * 选填，最大140字符；进口车选填，为空时使用车架号码关联的厂牌型号；国产车不填写
     */
    @Size(max = 140, message = "厂牌型号长度不能超过140字符")
    private String brandModel;

    /**
     * 合格证号
     * 选填，最大50字符；乐企通道不填写，为空时使用车架号码关联的合格证号
     */
    @Size(max = 50, message = "合格证号长度不能超过50字符")
    private String passCertificate;

    /**
     * 发动机号码
     * 选填，最大140字符；乐企通道不填写，为空时使用车架号码关联的发动机号码
     */
    @Size(max = 140, message = "发动机号码长度不能超过140字符")
    private String engineCode;

    /**
     * 车架号码
     * 必填，17字符
     */
    @NotBlank(message = "车架号码frameNo不能为空")
    @Size(min = 17, max = 17, message = "车架号码必须为17字符")
    private String frameNo;

    /**
     * 产地
     * 选填，最大10字符
     */
    @Size(max = 10, message = "产地长度不能超过10字符")
    private String origin;

    /**
     * 进口证明书号
     * 选填，最大16字符；乐企通道不填写，当进口证明书号不为空时，合格证号将为空
     */
    @Size(max = 16, message = "进口证明书号长度不能超过16字符")
    private String importCertificateNo;

    /**
     * 商检单号
     * 选填，最大60字符
     */
    @Size(max = 60, message = "商检单号长度不能超过60字符")
    private String inspectionNo;

    /**
     * 吨位
     * 选填，最大10字符；乐企通道不填写
     */
    @Size(max = 10, message = "吨位长度不能超过10字符")
    private String tonnage;

    /**
     * 限乘人数
     * 选填，最大11字符；乐企通道不填写
     */
    @Size(max = 11, message = "限乘人数长度不能超过11字符")
    private String limitNum;

    /**
     * 完税凭证号码
     * 选填，最大100字符
     */
    @Size(max = 100, message = "完税凭证号码长度不能超过100字符")
    private String taxPaymentReceiptNo;

    /**
     * 生产企业名称
     * 选填，最大300字符；为空时使用车架号码关联的生产企业名称
     */
    @Size(max = 300, message = "生产企业名称长度不能超过300字符")
    private String productionCompanyName;

    /**
     * 制造或进口日期
     * 选填，格式为yyyy-mm-dd；为空时使用车架号码关联的车辆制造日期
     */
    @Pattern(regexp = "^$|^\\d{4}-\\d{2}-\\d{2}$",
            message = "制造或进口日期格式错误，必须为yyyy-mm-dd")
    private String vehicleProdDate;

    public String getBrandModel() {
        return brandModel;
    }

    public void setBrandModel(String brandModel) {
        this.brandModel = brandModel;
    }

    public String getPassCertificate() {
        return passCertificate;
    }

    public void setPassCertificate(String passCertificate) {
        this.passCertificate = passCertificate;
    }

    public String getEngineCode() {
        return engineCode;
    }

    public void setEngineCode(String engineCode) {
        this.engineCode = engineCode;
    }

    public String getFrameNo() {
        return frameNo;
    }

    public void setFrameNo(String frameNo) {
        this.frameNo = frameNo;
    }

    public String getOrigin() {
        return origin;
    }

    public void setOrigin(String origin) {
        this.origin = origin;
    }

    public String getImportCertificateNo() {
        return importCertificateNo;
    }

    public void setImportCertificateNo(String importCertificateNo) {
        this.importCertificateNo = importCertificateNo;
    }

    public String getInspectionNo() {
        return inspectionNo;
    }

    public void setInspectionNo(String inspectionNo) {
        this.inspectionNo = inspectionNo;
    }

    public String getTonnage() {
        return tonnage;
    }

    public void setTonnage(String tonnage) {
        this.tonnage = tonnage;
    }

    public String getLimitNum() {
        return limitNum;
    }

    public void setLimitNum(String limitNum) {
        this.limitNum = limitNum;
    }

    public String getTaxPaymentReceiptNo() {
        return taxPaymentReceiptNo;
    }

    public void setTaxPaymentReceiptNo(String taxPaymentReceiptNo) {
        this.taxPaymentReceiptNo = taxPaymentReceiptNo;
    }

    public String getProductionCompanyName() {
        return productionCompanyName;
    }

    public void setProductionCompanyName(String productionCompanyName) {
        this.productionCompanyName = productionCompanyName;
    }

    public String getVehicleProdDate() {
        return vehicleProdDate;
    }

    public void setVehicleProdDate(String vehicleProdDate) {
        this.vehicleProdDate = vehicleProdDate;
    }
}
