package br.com.ec.domain.model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.MapsId;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.xml.bind.annotation.XmlElement;
import org.hibernate.annotations.ForeignKey;
import com.mchange.lang.DoubleUtils;
import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.generic.identidade.Identidade;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.model.nfe.TipoNotaFiscalImpostoIcms;
import br.com.swconsultoria.nfe.schema_4.enviNFe.TNFe;
import br.com.swconsultoria.nfe.schema_4.enviNFe.TNFe.InfNFe.Det.Imposto.ICMS;
@
Entity
@Table
(name=
"sec_imposto_icms", schema=
"sc_sec")
public class ImpostoIcms
implements Serializable, Identidade
{
private static final long serialVersionUID = 1L
;
private ImpostoIcmsId impostoIcmsId
;
private CompraProduto compraProduto
;
private String tipoImposto
;
private String codigoOrigem
; //orig
private String codigoSituacaoTributaria
; //CST
private Double baseCalculo
; //vBC
private Double aliquotaFCP
; //pFCP
private Double valorFCP
; //vfcp
private Double aliquotaIcms
; //picms
private Double valorIcms
; //icms
private String codigoSituacaoOperacaoSimplesNacional
; //CSOSN
private String modalidadeDeterminacaoBC
; //modBC
private Double percentualReducaoBC
; //predBC
private String modalidadeDeterminacaoBCST
; //modBCST
private Double percentualMagemValorAdicionadoST
; //pmvast
private Double baseCalculoST
; //vBCST
private Double aliquotaIcmsST
; //picmsst
private Double valorIcmsST
; //icmsst
private Double baseCalculoFCP
; //vBCFCPST
private Double aliquotaFCPST
; //pFCPST
private Double valorFCPST
; //vFCPST
private Double aliquotaCreditoSimplesNacional
; //pCredSN
private Double valorCreditoIcmsSimplesNacional
; //vCredICMSSN
private String xmlImposto
;
public ImpostoIcms
() {
this.
impostoIcmsId =
new ImpostoIcmsId
();
}
public ImpostoIcms
(ImpostoIcmsId impostoIcmsId
) {
this.
impostoIcmsId = impostoIcmsId
;
}
public ImpostoIcms
(CompraProduto compraProduto,
String tipoImposto
) {
impostoIcmsId =
new ImpostoIcmsId
();
setCompraProduto
(compraProduto
);
setTipoImposto
(tipoImposto
);
}
@
Override
@Transient
public Object getId
() {
return getImpostoIcmsId
();
}
@
Override
public void setId
(Object id
) {
this.
impostoIcmsId =
(ImpostoIcmsId
) id
;
}
@EmbeddedId
public ImpostoIcmsId getImpostoIcmsId
() {
return impostoIcmsId
;
}
public void setImpostoIcmsId
(ImpostoIcmsId impostoIcmsId
) {
this.
impostoIcmsId = impostoIcmsId
;
}
@ManyToOne
@ForeignKey
(name=
"fk_impostoicms_compraprodutoimposto")
@MapsId
(value=
"sequencialCompraProduto")
@JoinColumn
(name =
"seq_compraproduto", nullable =
false)
public CompraProduto getCompraProduto
() {
return compraProduto
;
}
public void setCompraProduto
(CompraProduto compraProduto
) {
this.
compraProduto = compraProduto
;
}
@Column
(name=
"tip_imposto", nullable =
false, insertable =
false, updatable =
false)
public String getTipoImposto
() {
return tipoImposto
;
}
public void setTipoImposto
(String tipoImposto
) {
this.
tipoImposto = tipoImposto
;
}
@Column
(name=
"cod_origem")
public String getCodigoOrigem
() {
return codigoOrigem
;
}
public void setCodigoOrigem
(String codigoOrigem
) {
this.
codigoOrigem = codigoOrigem
;
}
@Column
(name=
"cod_st")
public String getCodigoSituacaoTributaria
() {
return codigoSituacaoTributaria
;
}
public void setCodigoSituacaoTributaria
(String codigoSituacaoTributaria
) {
this.
codigoSituacaoTributaria = codigoSituacaoTributaria
;
}
@Column
(name=
"val_bc")
public Double getBaseCalculo
() {
return baseCalculo
;
}
public void setBaseCalculo
(Double baseCalculo
) {
this.
baseCalculo = baseCalculo
;
}
@Column
(name=
"val_pfcp")
public Double getAliquotaFCP
() {
return aliquotaFCP
;
}
public void setAliquotaFCP
(Double aliquotaFCP
) {
this.
aliquotaFCP = aliquotaFCP
;
}
@Column
(name=
"val_vfcp")
public Double getValorFCP
() {
return valorFCP
;
}
public void setValorFCP
(Double valorFCP
) {
this.
valorFCP = valorFCP
;
}
@Column
(name=
"val_picms")
public Double getAliquotaIcms
() {
return aliquotaIcms
;
}
public void setAliquotaIcms
(Double aliquotaIcms
) {
this.
aliquotaIcms = aliquotaIcms
;
}
@Column
(name=
"val_icms")
public Double getValorIcms
() {
return valorIcms
;
}
public void setValorIcms
(Double valorIcms
) {
this.
valorIcms = valorIcms
;
}
@Column
(name=
"cod_sosn")
public String getCodigoSituacaoOperacaoSimplesNacional
() {
return codigoSituacaoOperacaoSimplesNacional
;
}
public void setCodigoSituacaoOperacaoSimplesNacional
(String codigoSituacaoOperacaoSimplesNacional
) {
this.
codigoSituacaoOperacaoSimplesNacional = codigoSituacaoOperacaoSimplesNacional
;
}
@Column
(name=
"cod_modbc")
public String getModalidadeDeterminacaoBC
() {
return modalidadeDeterminacaoBC
;
}
public void setModalidadeDeterminacaoBC
(String modalidadeDeterminacaoBC
) {
this.
modalidadeDeterminacaoBC = modalidadeDeterminacaoBC
;
}
@Column
(name=
"val_predbc")
public Double getPercentualReducaoBC
() {
return percentualReducaoBC
;
}
public void setPercentualReducaoBC
(Double percentualReducaoBC
) {
this.
percentualReducaoBC = percentualReducaoBC
;
}
@Column
(name=
"cod_modbcst")
public String getModalidadeDeterminacaoBCST
() {
return modalidadeDeterminacaoBCST
;
}
public void setModalidadeDeterminacaoBCST
(String modalidadeDeterminacaoBCST
) {
this.
modalidadeDeterminacaoBCST = modalidadeDeterminacaoBCST
;
}
@Column
(name=
"val_pmvast")
public Double getPercentualMagemValorAdicionadoST
() {
return percentualMagemValorAdicionadoST
;
}
public void setPercentualMagemValorAdicionadoST
(Double percentualMagemValorAdicionadoST
) {
this.
percentualMagemValorAdicionadoST = percentualMagemValorAdicionadoST
;
}
@Column
(name=
"val_bcst")
public Double getBaseCalculoST
() {
return baseCalculoST
;
}
public void setBaseCalculoST
(Double baseCalculoST
) {
this.
baseCalculoST = baseCalculoST
;
}
@Column
(name=
"val_picmsst")
public Double getAliquotaIcmsST
() {
return aliquotaIcmsST
;
}
public void setAliquotaIcmsST
(Double aliquotaIcmsST
) {
this.
aliquotaIcmsST = aliquotaIcmsST
;
}
@Column
(name=
"val_icmsst")
public Double getValorIcmsST
() {
return valorIcmsST
;
}
public void setValorIcmsST
(Double valorIcmsST
) {
this.
valorIcmsST = valorIcmsST
;
}
@Column
(name=
"val_bcfcpst")
public Double getBaseCalculoFCP
() {
return baseCalculoFCP
;
}
public void setBaseCalculoFCP
(Double baseCalculoFCP
) {
this.
baseCalculoFCP = baseCalculoFCP
;
}
@Column
(name=
"val_pfcpst")
public Double getAliquotaFCPST
() {
return aliquotaFCPST
;
}
public void setAliquotaFCPST
(Double aliquotaFCPST
) {
this.
aliquotaFCPST = aliquotaFCPST
;
}
@Column
(name=
"val_fcpst")
public Double getValorFCPST
() {
return valorFCPST
;
}
public void setValorFCPST
(Double valorFCPST
) {
this.
valorFCPST = valorFCPST
;
}
@Column
(name=
"val_pcredsn")
public Double getAliquotaCreditoSimplesNacional
() {
return aliquotaCreditoSimplesNacional
;
}
public void setAliquotaCreditoSimplesNacional
(Double aliquotaCreditoSimplesNacional
) {
this.
aliquotaCreditoSimplesNacional = aliquotaCreditoSimplesNacional
;
}
@Column
(name=
"val_credsn")
public Double getValorCreditoIcmsSimplesNacional
() {
return valorCreditoIcmsSimplesNacional
;
}
public void setValorCreditoIcmsSimplesNacional
(Double valorCreditoIcmsSimplesNacional
) {
this.
valorCreditoIcmsSimplesNacional = valorCreditoIcmsSimplesNacional
;
}
@Column
(name=
"xml_imposto")
public String getXmlImposto
() {
return xmlImposto
;
}
public void setXmlImposto
(String xmlImposto
) {
this.
xmlImposto = xmlImposto
;
}
// TODO: ALTERAR OS VALORES, BASEANDO-SE NA QUANTIDADE INFORMADA
public void preencherDados
(ICMS icms,
Integer quantidade
) {
if (VerificadorUtil.
naoEstaNulo(icms.
getICMS00())) {
this.
setTipoImposto(TipoNotaFiscalImpostoIcms.
ICMS00_CST00.
getValor());
this.
setCodigoOrigem(icms.
getICMS00().
getOrig());
this.
setModalidadeDeterminacaoBC(icms.
getICMS00().
getModBC());
this.
setCodigoSituacaoTributaria(icms.
getICMS00().
getCST());
if (VerificadorUtil.
naoEstaNulo(icms.
getICMS00().
getPFCP())) {
this.
setAliquotaFCP(new Double(icms.
getICMS00().
getPFCP()));
this.
setValorFCP(new Double(icms.
getICMS00().
getVFCP()));
}
this.
setAliquotaIcms(new Double(icms.
getICMS00().
getPICMS()));
this.
setBaseCalculo(new Double(icms.
getICMS00().
getVBC()));
this.
setValorIcms(new Double(icms.
getICMS00().
getVICMS()));
} else if (VerificadorUtil.
naoEstaNulo(icms.
getICMSSN101())) {
this.
setTipoImposto(TipoNotaFiscalImpostoIcms.
ICMSSN101_CSOSN101.
getValor());
this.
setCodigoSituacaoOperacaoSimplesNacional(icms.
getICMSSN101().
getCSOSN());
this.
setCodigoOrigem(icms.
getICMSSN101().
getOrig());
this.
setAliquotaCreditoSimplesNacional(new Double(icms.
getICMSSN101().
getPCredSN()));
this.
setValorCreditoIcmsSimplesNacional(new Double(icms.
getICMSSN101().
getVCredICMSSN()));
} else if (VerificadorUtil.
naoEstaNulo(icms.
getICMSSN201())) {
this.
setTipoImposto(TipoNotaFiscalImpostoIcms.
ICMSSN201_CSOSN201.
getValor());
icms.
getICMSSN201().
getCSOSN();
icms.
getICMSSN201().
getModBCST();
icms.
getICMSSN201().
getOrig();
icms.
getICMSSN201().
getPCredSN();
icms.
getICMSSN201().
getPFCPST();
icms.
getICMSSN201().
getPICMSST();
icms.
getICMSSN201().
getPMVAST();
icms.
getICMSSN201().
getPRedBCST();
icms.
getICMSSN201().
getVBCFCPST();
icms.
getICMSSN201().
getVBCST();
icms.
getICMSSN201().
getVCredICMSSN();
icms.
getICMSSN201().
getVFCPST();
icms.
getICMSSN201().
getVICMSST();
} else if (VerificadorUtil.
naoEstaNulo(icms.
getICMSSN500())) {
} else if (VerificadorUtil.
naoEstaNulo(icms.
getICMSSN900())) {
} else {
throw new NegocioException
("TIPO DE ICMS NÃO IMPLEMENTADO: " + icms.
toString());
}
}
}