Skip to content

Commit c406d02

Browse files
Add anticipos (#42)
1 parent a796790 commit c406d02

File tree

12 files changed

+816
-41
lines changed

12 files changed

+816
-41
lines changed

src/main/java/io/github/project/openubl/xmlbuilderlib/factory/InvoiceAndNoteOutputModelFactory.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import io.github.project.openubl.xmlbuilderlib.models.input.standard.note.debitNote.DebitNoteInputModel;
3232
import io.github.project.openubl.xmlbuilderlib.models.output.common.FormaPagoOutputModel;
3333
import io.github.project.openubl.xmlbuilderlib.models.output.standard.*;
34+
import io.github.project.openubl.xmlbuilderlib.models.output.standard.invoice.AnticipoOutputModel;
3435
import io.github.project.openubl.xmlbuilderlib.models.output.standard.invoice.InvoiceOutputModel;
3536
import io.github.project.openubl.xmlbuilderlib.models.output.standard.note.NoteOutputModel;
3637
import io.github.project.openubl.xmlbuilderlib.models.output.standard.note.creditNote.CreditNoteOutputModel;
@@ -72,6 +73,33 @@ public static InvoiceOutputModel getInvoiceOutput(InvoiceInputModel input, Confi
7273
input.getCuotasDePago(), tmpOutput.getTotales(), systemClock.getTimeZone()
7374
));
7475

76+
// Anticipos
77+
builder.withAnticipos(input.getAnticipos() != null ?
78+
input.getAnticipos().stream()
79+
.map(anticipoInput -> {
80+
AnticipoOutputModel anticipoOutput = new AnticipoOutputModel();
81+
anticipoOutput.setSerieNumero(anticipoInput.getSerieNumero());
82+
anticipoOutput.setTipoDocumento(Catalog.valueOfCode(Catalog12.class, anticipoInput.getTipoDocumento()).orElseThrow(Catalog.invalidCatalogValue));
83+
anticipoOutput.setMontoTotal(anticipoInput.getMontoTotal());
84+
return anticipoOutput;
85+
})
86+
.collect(Collectors.toList())
87+
: Collections.emptyList()
88+
);
89+
90+
InvoiceOutputModel tempOut = builder.build();
91+
BigDecimal anticiposTotal = tempOut.getAnticipos().stream().map(AnticipoOutputModel::getMontoTotal).reduce(BigDecimal.ZERO, BigDecimal::add);
92+
if (anticiposTotal.compareTo(BigDecimal.ZERO) > 0) {
93+
builder.withTotales(
94+
DocumentMonetaryTotalOutputModel.Builder.aDocumentMonetaryTotalOutputModel()
95+
.withValorVentaSinImpuestos(tempOut.getTotales().getValorVentaSinImpuestos())
96+
.withValorVentaConImpuestos(tempOut.getTotales().getValorVentaConImpuestos())
97+
.withAnticiposTotal(anticiposTotal)
98+
.withImporteTotal(tempOut.getTotales().getImporteTotal().subtract(anticiposTotal))
99+
.build()
100+
);
101+
}
102+
75103
return builder.build();
76104
}
77105

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Copyright 2019 Project OpenUBL, Inc. and/or its affiliates
3+
* and other contributors as indicated by the @author tags.
4+
*
5+
* Licensed under the Eclipse Public License - v 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* https://www.eclipse.org/legal/epl-2.0/
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package io.github.project.openubl.xmlbuilderlib.models.catalogs;
18+
19+
public enum Catalog12_Anticipo implements Catalog {
20+
FACTURA_EMITIDA_POR_ANTICIPOS("02"),
21+
BOLETA_DE_VENTA_EMITIDA_POR_ANTICIPOS("03");
22+
23+
24+
private final String code;
25+
26+
Catalog12_Anticipo(String code) {
27+
this.code = code;
28+
}
29+
30+
@Override
31+
public String getCode() {
32+
return code;
33+
}
34+
35+
}

src/main/java/io/github/project/openubl/xmlbuilderlib/models/input/standard/invoice/AnticipoInputModel.java

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,74 @@
1616
*/
1717
package io.github.project.openubl.xmlbuilderlib.models.input.standard.invoice;
1818

19+
import io.github.project.openubl.xmlbuilderlib.models.catalogs.Catalog12_Anticipo;
20+
import io.github.project.openubl.xmlbuilderlib.models.catalogs.constraints.CatalogConstraint;
1921
import io.github.project.openubl.xmlbuilderlib.models.input.standard.DocTribRelacionadoInputModel;
2022

21-
import javax.validation.constraints.NotBlank;
23+
import javax.validation.constraints.Min;
24+
import javax.validation.constraints.NotNull;
25+
import java.math.BigDecimal;
2226

2327
public class AnticipoInputModel extends DocTribRelacionadoInputModel {
2428

25-
@NotBlank
26-
private String ruc;
29+
@CatalogConstraint(value = Catalog12_Anticipo.class)
30+
protected String tipoDocumento;
2731

28-
public String getRuc() {
29-
return ruc;
32+
@Min(0)
33+
@NotNull
34+
private BigDecimal montoTotal;
35+
36+
@Override
37+
public String getTipoDocumento() {
38+
return tipoDocumento;
39+
}
40+
41+
@Override
42+
public void setTipoDocumento(String tipoDocumento) {
43+
this.tipoDocumento = tipoDocumento;
3044
}
3145

32-
public void setRuc(String ruc) {
33-
this.ruc = ruc;
46+
public BigDecimal getMontoTotal() {
47+
return montoTotal;
3448
}
3549

50+
public void setMontoTotal(BigDecimal montoTotal) {
51+
this.montoTotal = montoTotal;
52+
}
53+
54+
public static final class Builder {
55+
protected String serieNumero;
56+
protected String tipoDocumento;
57+
private BigDecimal montoTotal;
58+
59+
private Builder() {
60+
}
61+
62+
public static Builder anAnticipoInputModel() {
63+
return new Builder();
64+
}
65+
66+
public Builder withSerieNumero(String serieNumero) {
67+
this.serieNumero = serieNumero;
68+
return this;
69+
}
70+
71+
public Builder withTipoDocumento(String tipoDocumento) {
72+
this.tipoDocumento = tipoDocumento;
73+
return this;
74+
}
75+
76+
public Builder withMontoTotal(BigDecimal montoTotal) {
77+
this.montoTotal = montoTotal;
78+
return this;
79+
}
80+
81+
public AnticipoInputModel build() {
82+
AnticipoInputModel anticipoInputModel = new AnticipoInputModel();
83+
anticipoInputModel.setSerieNumero(serieNumero);
84+
anticipoInputModel.setTipoDocumento(tipoDocumento);
85+
anticipoInputModel.setMontoTotal(montoTotal);
86+
return anticipoInputModel;
87+
}
88+
}
3689
}

src/main/java/io/github/project/openubl/xmlbuilderlib/models/input/standard/invoice/InvoiceInputModel.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public class InvoiceInputModel extends DocumentInputModel {
3838
@Valid
3939
private List<DocTribRelacionadoInputModel_Invoice> otrosDocumentosTributariosRelacionados;
4040

41+
@Valid
42+
private List<AnticipoInputModel> anticipos;
43+
4144
public List<CuotaDePagoInputModel> getCuotasDePago() {
4245
return cuotasDePago;
4346
}
@@ -55,6 +58,14 @@ public void setOtrosDocumentosTributariosRelacionados(List<DocTribRelacionadoInp
5558
this.otrosDocumentosTributariosRelacionados = otrosDocumentosTributariosRelacionados;
5659
}
5760

61+
public List<AnticipoInputModel> getAnticipos() {
62+
return anticipos;
63+
}
64+
65+
public void setAnticipos(List<AnticipoInputModel> anticipos) {
66+
this.anticipos = anticipos;
67+
}
68+
5869
public static final class Builder {
5970
protected String serie;
6071
private Integer numero;
@@ -63,9 +74,10 @@ public static final class Builder {
6374
private ProveedorInputModel proveedor;
6475
private FirmanteInputModel firmante;
6576
private List<DocumentLineInputModel> detalle;
66-
private List<CuotaDePagoInputModel> cuotasDePago;
6777
private List<GuiaRemisionRelacionadaInputModel> guiasRemisionRelacionadas;
78+
private List<CuotaDePagoInputModel> cuotasDePago;
6879
private List<DocTribRelacionadoInputModel_Invoice> otrosDocumentosTributariosRelacionados;
80+
private List<AnticipoInputModel> anticipos;
6981

7082
private Builder() {
7183
}
@@ -109,13 +121,13 @@ public Builder withDetalle(List<DocumentLineInputModel> detalle) {
109121
return this;
110122
}
111123

112-
public Builder withCuotasDePago(List<CuotaDePagoInputModel> cuotasDePago) {
113-
this.cuotasDePago = cuotasDePago;
124+
public Builder withGuiasRemisionRelacionadas(List<GuiaRemisionRelacionadaInputModel> guiasRemisionRelacionadas) {
125+
this.guiasRemisionRelacionadas = guiasRemisionRelacionadas;
114126
return this;
115127
}
116128

117-
public Builder withGuiasRemisionRelacionadas(List<GuiaRemisionRelacionadaInputModel> guiasRemisionRelacionadas) {
118-
this.guiasRemisionRelacionadas = guiasRemisionRelacionadas;
129+
public Builder withCuotasDePago(List<CuotaDePagoInputModel> cuotasDePago) {
130+
this.cuotasDePago = cuotasDePago;
119131
return this;
120132
}
121133

@@ -124,6 +136,11 @@ public Builder withOtrosDocumentosTributariosRelacionados(List<DocTribRelacionad
124136
return this;
125137
}
126138

139+
public Builder withAnticipos(List<AnticipoInputModel> anticipos) {
140+
this.anticipos = anticipos;
141+
return this;
142+
}
143+
127144
public InvoiceInputModel build() {
128145
InvoiceInputModel invoiceInputModel = new InvoiceInputModel();
129146
invoiceInputModel.setSerie(serie);
@@ -133,9 +150,10 @@ public InvoiceInputModel build() {
133150
invoiceInputModel.setProveedor(proveedor);
134151
invoiceInputModel.setFirmante(firmante);
135152
invoiceInputModel.setDetalle(detalle);
136-
invoiceInputModel.setCuotasDePago(cuotasDePago);
137153
invoiceInputModel.setGuiasRemisionRelacionadas(guiasRemisionRelacionadas);
154+
invoiceInputModel.setCuotasDePago(cuotasDePago);
138155
invoiceInputModel.setOtrosDocumentosTributariosRelacionados(otrosDocumentosTributariosRelacionados);
156+
invoiceInputModel.setAnticipos(anticipos);
139157
return invoiceInputModel;
140158
}
141159
}

src/main/java/io/github/project/openubl/xmlbuilderlib/models/output/standard/DocumentMonetaryTotalOutputModel.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ public class DocumentMonetaryTotalOutputModel {
3838
@Digits(integer = 100, fraction = 2)
3939
private BigDecimal importeTotal;
4040

41+
@Min(0)
42+
@Digits(integer = 100, fraction = 2)
43+
private BigDecimal anticiposTotal;
44+
4145
public BigDecimal getValorVentaSinImpuestos() {
4246
return valorVentaSinImpuestos;
4347
}
@@ -62,10 +66,19 @@ public void setImporteTotal(BigDecimal importeTotal) {
6266
this.importeTotal = importeTotal;
6367
}
6468

69+
public BigDecimal getAnticiposTotal() {
70+
return anticiposTotal;
71+
}
72+
73+
public void setAnticiposTotal(BigDecimal anticiposTotal) {
74+
this.anticiposTotal = anticiposTotal;
75+
}
76+
6577
public static final class Builder {
6678
private BigDecimal valorVentaSinImpuestos;
6779
private BigDecimal valorVentaConImpuestos;
6880
private BigDecimal importeTotal;
81+
private BigDecimal anticiposTotal;
6982

7083
private Builder() {
7184
}
@@ -89,11 +102,17 @@ public Builder withImporteTotal(BigDecimal importeTotal) {
89102
return this;
90103
}
91104

105+
public Builder withAnticiposTotal(BigDecimal anticiposTotal) {
106+
this.anticiposTotal = anticiposTotal;
107+
return this;
108+
}
109+
92110
public DocumentMonetaryTotalOutputModel build() {
93111
DocumentMonetaryTotalOutputModel documentMonetaryTotalOutputModel = new DocumentMonetaryTotalOutputModel();
94112
documentMonetaryTotalOutputModel.setValorVentaSinImpuestos(valorVentaSinImpuestos);
95113
documentMonetaryTotalOutputModel.setValorVentaConImpuestos(valorVentaConImpuestos);
96114
documentMonetaryTotalOutputModel.setImporteTotal(importeTotal);
115+
documentMonetaryTotalOutputModel.setAnticiposTotal(anticiposTotal);
97116
return documentMonetaryTotalOutputModel;
98117
}
99118
}

src/main/java/io/github/project/openubl/xmlbuilderlib/models/output/standard/invoice/AnticipoOutputModel.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,22 @@
1818

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

21+
import javax.validation.constraints.Min;
2122
import javax.validation.constraints.NotBlank;
23+
import javax.validation.constraints.NotNull;
24+
import java.math.BigDecimal;
2225

2326
public class AnticipoOutputModel extends DocumentoTributarioRelacionadoOutputModel {
2427

25-
@NotBlank
26-
private String ruc;
28+
@Min(0)
29+
@NotNull
30+
private BigDecimal montoTotal;
2731

28-
public String getRuc() {
29-
return ruc;
32+
public BigDecimal getMontoTotal() {
33+
return montoTotal;
3034
}
3135

32-
public void setRuc(String ruc) {
33-
this.ruc = ruc;
36+
public void setMontoTotal(BigDecimal montoTotal) {
37+
this.montoTotal = montoTotal;
3438
}
35-
3639
}

src/main/java/io/github/project/openubl/xmlbuilderlib/models/output/standard/invoice/InvoiceOutputModel.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,21 @@
1818

1919
import io.github.project.openubl.xmlbuilderlib.models.catalogs.Catalog1;
2020
import io.github.project.openubl.xmlbuilderlib.models.output.standard.DocumentOutputModel;
21+
import io.github.project.openubl.xmlbuilderlib.models.output.standard.DocumentoTributarioRelacionadoOutputModel;
2122

23+
import javax.validation.Valid;
2224
import javax.validation.constraints.NotNull;
25+
import java.util.List;
2326

2427
public class InvoiceOutputModel extends DocumentOutputModel {
2528

2629
@NotNull
2730
private Catalog1 tipoInvoice;
2831

32+
@NotNull
33+
@Valid
34+
private List<AnticipoOutputModel> anticipos;
35+
2936
public Catalog1 getTipoInvoice() {
3037
return tipoInvoice;
3138
}
@@ -34,8 +41,17 @@ public void setTipoInvoice(Catalog1 tipoInvoice) {
3441
this.tipoInvoice = tipoInvoice;
3542
}
3643

44+
public List<AnticipoOutputModel> getAnticipos() {
45+
return anticipos;
46+
}
47+
48+
public void setAnticipos(List<AnticipoOutputModel> anticipos) {
49+
this.anticipos = anticipos;
50+
}
51+
3752
public static final class Builder extends DocumentOutputModel.Builder {
3853
private Catalog1 tipoInvoice;
54+
private List<AnticipoOutputModel> anticipos;
3955

4056
private Builder() {
4157
}
@@ -49,6 +65,11 @@ public Builder withTipoInvoice(Catalog1 tipoInvoice) {
4965
return this;
5066
}
5167

68+
public Builder withAnticipos(List<AnticipoOutputModel> anticipos) {
69+
this.anticipos = anticipos;
70+
return this;
71+
}
72+
5273
public InvoiceOutputModel build() {
5374
InvoiceOutputModel invoiceOutputModel = new InvoiceOutputModel();
5475
invoiceOutputModel.setMoneda(moneda);
@@ -65,6 +86,7 @@ public InvoiceOutputModel build() {
6586
invoiceOutputModel.setFormaPago(formaPago);
6687
invoiceOutputModel.setGuiasRemisionRelacionadas(guiasRemisionRelacionadas);
6788
invoiceOutputModel.setOtrosDocumentosTributariosRelacionados(otrosDocumentosTributariosRelacionados);
89+
invoiceOutputModel.setAnticipos(anticipos);
6890
return invoiceOutputModel;
6991
}
7092
}

src/main/resources/io/github/project/openubl/xmlbuilderlib/templates/standard/common/monetary-total.ftl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@
3030
<#--parte de la operación que se factura, es decir no forman parte del(os) valor(es) de ventas-->
3131
<#--señaladas anteriormente, pero sí forman parte del importe total de la Venta (Ejemplo:-->
3232
<#--propinas, garantías para devolución de envases, etc.)-->
33-
<#-- <#if totalOtrosCargos??><cbc:ChargeTotalAmount currencyID="${moneda}">${totalOtrosCargos}</cbc:ChargeTotalAmount></#if>-->
34-
<#-- <#if totalOtrosCargos??><cbc:PrepaidAmount currencyID="${moneda}">${totalAnticipos}</cbc:PrepaidAmount></#if>-->
33+
<#if totales.anticiposTotal??><cbc:PrepaidAmount currencyID="${moneda}">${totales.anticiposTotal}</cbc:PrepaidAmount></#if>
3534
<#---------->
3635
<#--PUNTO5-->
3736
<#---------->

0 commit comments

Comments
 (0)