Skip to content

Commit

Permalink
Add anticipos (#42)
Browse files Browse the repository at this point in the history
  • Loading branch information
carlosthe19916 authored Jun 4, 2021
1 parent a796790 commit c406d02
Show file tree
Hide file tree
Showing 12 changed files with 816 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import io.github.project.openubl.xmlbuilderlib.models.input.standard.note.debitNote.DebitNoteInputModel;
import io.github.project.openubl.xmlbuilderlib.models.output.common.FormaPagoOutputModel;
import io.github.project.openubl.xmlbuilderlib.models.output.standard.*;
import io.github.project.openubl.xmlbuilderlib.models.output.standard.invoice.AnticipoOutputModel;
import io.github.project.openubl.xmlbuilderlib.models.output.standard.invoice.InvoiceOutputModel;
import io.github.project.openubl.xmlbuilderlib.models.output.standard.note.NoteOutputModel;
import io.github.project.openubl.xmlbuilderlib.models.output.standard.note.creditNote.CreditNoteOutputModel;
Expand Down Expand Up @@ -72,6 +73,33 @@ public static InvoiceOutputModel getInvoiceOutput(InvoiceInputModel input, Confi
input.getCuotasDePago(), tmpOutput.getTotales(), systemClock.getTimeZone()
));

// Anticipos
builder.withAnticipos(input.getAnticipos() != null ?
input.getAnticipos().stream()
.map(anticipoInput -> {
AnticipoOutputModel anticipoOutput = new AnticipoOutputModel();
anticipoOutput.setSerieNumero(anticipoInput.getSerieNumero());
anticipoOutput.setTipoDocumento(Catalog.valueOfCode(Catalog12.class, anticipoInput.getTipoDocumento()).orElseThrow(Catalog.invalidCatalogValue));
anticipoOutput.setMontoTotal(anticipoInput.getMontoTotal());
return anticipoOutput;
})
.collect(Collectors.toList())
: Collections.emptyList()
);

InvoiceOutputModel tempOut = builder.build();
BigDecimal anticiposTotal = tempOut.getAnticipos().stream().map(AnticipoOutputModel::getMontoTotal).reduce(BigDecimal.ZERO, BigDecimal::add);
if (anticiposTotal.compareTo(BigDecimal.ZERO) > 0) {
builder.withTotales(
DocumentMonetaryTotalOutputModel.Builder.aDocumentMonetaryTotalOutputModel()
.withValorVentaSinImpuestos(tempOut.getTotales().getValorVentaSinImpuestos())
.withValorVentaConImpuestos(tempOut.getTotales().getValorVentaConImpuestos())
.withAnticiposTotal(anticiposTotal)
.withImporteTotal(tempOut.getTotales().getImporteTotal().subtract(anticiposTotal))
.build()
);
}

return builder.build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
* Copyright 2019 Project OpenUBL, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Eclipse Public License - v 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.eclipse.org/legal/epl-2.0/
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.github.project.openubl.xmlbuilderlib.models.catalogs;

public enum Catalog12_Anticipo implements Catalog {
FACTURA_EMITIDA_POR_ANTICIPOS("02"),
BOLETA_DE_VENTA_EMITIDA_POR_ANTICIPOS("03");


private final String code;

Catalog12_Anticipo(String code) {
this.code = code;
}

@Override
public String getCode() {
return code;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,74 @@
*/
package io.github.project.openubl.xmlbuilderlib.models.input.standard.invoice;

import io.github.project.openubl.xmlbuilderlib.models.catalogs.Catalog12_Anticipo;
import io.github.project.openubl.xmlbuilderlib.models.catalogs.constraints.CatalogConstraint;
import io.github.project.openubl.xmlbuilderlib.models.input.standard.DocTribRelacionadoInputModel;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;

public class AnticipoInputModel extends DocTribRelacionadoInputModel {

@NotBlank
private String ruc;
@CatalogConstraint(value = Catalog12_Anticipo.class)
protected String tipoDocumento;

public String getRuc() {
return ruc;
@Min(0)
@NotNull
private BigDecimal montoTotal;

@Override
public String getTipoDocumento() {
return tipoDocumento;
}

@Override
public void setTipoDocumento(String tipoDocumento) {
this.tipoDocumento = tipoDocumento;
}

public void setRuc(String ruc) {
this.ruc = ruc;
public BigDecimal getMontoTotal() {
return montoTotal;
}

public void setMontoTotal(BigDecimal montoTotal) {
this.montoTotal = montoTotal;
}

public static final class Builder {
protected String serieNumero;
protected String tipoDocumento;
private BigDecimal montoTotal;

private Builder() {
}

public static Builder anAnticipoInputModel() {
return new Builder();
}

public Builder withSerieNumero(String serieNumero) {
this.serieNumero = serieNumero;
return this;
}

public Builder withTipoDocumento(String tipoDocumento) {
this.tipoDocumento = tipoDocumento;
return this;
}

public Builder withMontoTotal(BigDecimal montoTotal) {
this.montoTotal = montoTotal;
return this;
}

public AnticipoInputModel build() {
AnticipoInputModel anticipoInputModel = new AnticipoInputModel();
anticipoInputModel.setSerieNumero(serieNumero);
anticipoInputModel.setTipoDocumento(tipoDocumento);
anticipoInputModel.setMontoTotal(montoTotal);
return anticipoInputModel;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ public class InvoiceInputModel extends DocumentInputModel {
@Valid
private List<DocTribRelacionadoInputModel_Invoice> otrosDocumentosTributariosRelacionados;

@Valid
private List<AnticipoInputModel> anticipos;

public List<CuotaDePagoInputModel> getCuotasDePago() {
return cuotasDePago;
}
Expand All @@ -55,6 +58,14 @@ public void setOtrosDocumentosTributariosRelacionados(List<DocTribRelacionadoInp
this.otrosDocumentosTributariosRelacionados = otrosDocumentosTributariosRelacionados;
}

public List<AnticipoInputModel> getAnticipos() {
return anticipos;
}

public void setAnticipos(List<AnticipoInputModel> anticipos) {
this.anticipos = anticipos;
}

public static final class Builder {
protected String serie;
private Integer numero;
Expand All @@ -63,9 +74,10 @@ public static final class Builder {
private ProveedorInputModel proveedor;
private FirmanteInputModel firmante;
private List<DocumentLineInputModel> detalle;
private List<CuotaDePagoInputModel> cuotasDePago;
private List<GuiaRemisionRelacionadaInputModel> guiasRemisionRelacionadas;
private List<CuotaDePagoInputModel> cuotasDePago;
private List<DocTribRelacionadoInputModel_Invoice> otrosDocumentosTributariosRelacionados;
private List<AnticipoInputModel> anticipos;

private Builder() {
}
Expand Down Expand Up @@ -109,13 +121,13 @@ public Builder withDetalle(List<DocumentLineInputModel> detalle) {
return this;
}

public Builder withCuotasDePago(List<CuotaDePagoInputModel> cuotasDePago) {
this.cuotasDePago = cuotasDePago;
public Builder withGuiasRemisionRelacionadas(List<GuiaRemisionRelacionadaInputModel> guiasRemisionRelacionadas) {
this.guiasRemisionRelacionadas = guiasRemisionRelacionadas;
return this;
}

public Builder withGuiasRemisionRelacionadas(List<GuiaRemisionRelacionadaInputModel> guiasRemisionRelacionadas) {
this.guiasRemisionRelacionadas = guiasRemisionRelacionadas;
public Builder withCuotasDePago(List<CuotaDePagoInputModel> cuotasDePago) {
this.cuotasDePago = cuotasDePago;
return this;
}

Expand All @@ -124,6 +136,11 @@ public Builder withOtrosDocumentosTributariosRelacionados(List<DocTribRelacionad
return this;
}

public Builder withAnticipos(List<AnticipoInputModel> anticipos) {
this.anticipos = anticipos;
return this;
}

public InvoiceInputModel build() {
InvoiceInputModel invoiceInputModel = new InvoiceInputModel();
invoiceInputModel.setSerie(serie);
Expand All @@ -133,9 +150,10 @@ public InvoiceInputModel build() {
invoiceInputModel.setProveedor(proveedor);
invoiceInputModel.setFirmante(firmante);
invoiceInputModel.setDetalle(detalle);
invoiceInputModel.setCuotasDePago(cuotasDePago);
invoiceInputModel.setGuiasRemisionRelacionadas(guiasRemisionRelacionadas);
invoiceInputModel.setCuotasDePago(cuotasDePago);
invoiceInputModel.setOtrosDocumentosTributariosRelacionados(otrosDocumentosTributariosRelacionados);
invoiceInputModel.setAnticipos(anticipos);
return invoiceInputModel;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ public class DocumentMonetaryTotalOutputModel {
@Digits(integer = 100, fraction = 2)
private BigDecimal importeTotal;

@Min(0)
@Digits(integer = 100, fraction = 2)
private BigDecimal anticiposTotal;

public BigDecimal getValorVentaSinImpuestos() {
return valorVentaSinImpuestos;
}
Expand All @@ -62,10 +66,19 @@ public void setImporteTotal(BigDecimal importeTotal) {
this.importeTotal = importeTotal;
}

public BigDecimal getAnticiposTotal() {
return anticiposTotal;
}

public void setAnticiposTotal(BigDecimal anticiposTotal) {
this.anticiposTotal = anticiposTotal;
}

public static final class Builder {
private BigDecimal valorVentaSinImpuestos;
private BigDecimal valorVentaConImpuestos;
private BigDecimal importeTotal;
private BigDecimal anticiposTotal;

private Builder() {
}
Expand All @@ -89,11 +102,17 @@ public Builder withImporteTotal(BigDecimal importeTotal) {
return this;
}

public Builder withAnticiposTotal(BigDecimal anticiposTotal) {
this.anticiposTotal = anticiposTotal;
return this;
}

public DocumentMonetaryTotalOutputModel build() {
DocumentMonetaryTotalOutputModel documentMonetaryTotalOutputModel = new DocumentMonetaryTotalOutputModel();
documentMonetaryTotalOutputModel.setValorVentaSinImpuestos(valorVentaSinImpuestos);
documentMonetaryTotalOutputModel.setValorVentaConImpuestos(valorVentaConImpuestos);
documentMonetaryTotalOutputModel.setImporteTotal(importeTotal);
documentMonetaryTotalOutputModel.setAnticiposTotal(anticiposTotal);
return documentMonetaryTotalOutputModel;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,22 @@

import io.github.project.openubl.xmlbuilderlib.models.output.standard.DocumentoTributarioRelacionadoOutputModel;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;

public class AnticipoOutputModel extends DocumentoTributarioRelacionadoOutputModel {

@NotBlank
private String ruc;
@Min(0)
@NotNull
private BigDecimal montoTotal;

public String getRuc() {
return ruc;
public BigDecimal getMontoTotal() {
return montoTotal;
}

public void setRuc(String ruc) {
this.ruc = ruc;
public void setMontoTotal(BigDecimal montoTotal) {
this.montoTotal = montoTotal;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,21 @@

import io.github.project.openubl.xmlbuilderlib.models.catalogs.Catalog1;
import io.github.project.openubl.xmlbuilderlib.models.output.standard.DocumentOutputModel;
import io.github.project.openubl.xmlbuilderlib.models.output.standard.DocumentoTributarioRelacionadoOutputModel;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;

public class InvoiceOutputModel extends DocumentOutputModel {

@NotNull
private Catalog1 tipoInvoice;

@NotNull
@Valid
private List<AnticipoOutputModel> anticipos;

public Catalog1 getTipoInvoice() {
return tipoInvoice;
}
Expand All @@ -34,8 +41,17 @@ public void setTipoInvoice(Catalog1 tipoInvoice) {
this.tipoInvoice = tipoInvoice;
}

public List<AnticipoOutputModel> getAnticipos() {
return anticipos;
}

public void setAnticipos(List<AnticipoOutputModel> anticipos) {
this.anticipos = anticipos;
}

public static final class Builder extends DocumentOutputModel.Builder {
private Catalog1 tipoInvoice;
private List<AnticipoOutputModel> anticipos;

private Builder() {
}
Expand All @@ -49,6 +65,11 @@ public Builder withTipoInvoice(Catalog1 tipoInvoice) {
return this;
}

public Builder withAnticipos(List<AnticipoOutputModel> anticipos) {
this.anticipos = anticipos;
return this;
}

public InvoiceOutputModel build() {
InvoiceOutputModel invoiceOutputModel = new InvoiceOutputModel();
invoiceOutputModel.setMoneda(moneda);
Expand All @@ -65,6 +86,7 @@ public InvoiceOutputModel build() {
invoiceOutputModel.setFormaPago(formaPago);
invoiceOutputModel.setGuiasRemisionRelacionadas(guiasRemisionRelacionadas);
invoiceOutputModel.setOtrosDocumentosTributariosRelacionados(otrosDocumentosTributariosRelacionados);
invoiceOutputModel.setAnticipos(anticipos);
return invoiceOutputModel;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@
<#--parte de la operación que se factura, es decir no forman parte del(os) valor(es) de ventas-->
<#--señaladas anteriormente, pero sí forman parte del importe total de la Venta (Ejemplo:-->
<#--propinas, garantías para devolución de envases, etc.)-->
<#-- <#if totalOtrosCargos??><cbc:ChargeTotalAmount currencyID="${moneda}">${totalOtrosCargos}</cbc:ChargeTotalAmount></#if>-->
<#-- <#if totalOtrosCargos??><cbc:PrepaidAmount currencyID="${moneda}">${totalAnticipos}</cbc:PrepaidAmount></#if>-->
<#if totales.anticiposTotal??><cbc:PrepaidAmount currencyID="${moneda}">${totales.anticiposTotal}</cbc:PrepaidAmount></#if>
<#---------->
<#--PUNTO5-->
<#---------->
Expand Down
Loading

0 comments on commit c406d02

Please sign in to comment.