Skip to content

Commit f922305

Browse files
Add forma de pago to invoices and credit notes (#22)
* Add forma de pago * Replace string by enums * Fix license
1 parent 7e081ce commit f922305

File tree

54 files changed

+1755
-3
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1755
-3
lines changed

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,16 @@
1919
import io.github.project.openubl.xmlbuilderlib.config.Config;
2020
import io.github.project.openubl.xmlbuilderlib.factory.common.ClienteOutputModelFactory;
2121
import io.github.project.openubl.xmlbuilderlib.factory.common.FirmanteOutputModelFactory;
22+
import io.github.project.openubl.xmlbuilderlib.factory.common.FormaPagoOutputModelFactory;
2223
import io.github.project.openubl.xmlbuilderlib.factory.common.ProveedorOutputModelFactory;
2324
import io.github.project.openubl.xmlbuilderlib.models.catalogs.*;
25+
import io.github.project.openubl.xmlbuilderlib.models.input.common.CuotaDePagoInputModel;
2426
import io.github.project.openubl.xmlbuilderlib.models.input.standard.DocumentInputModel;
2527
import io.github.project.openubl.xmlbuilderlib.models.input.standard.invoice.InvoiceInputModel;
2628
import io.github.project.openubl.xmlbuilderlib.models.input.standard.note.NoteInputModel;
2729
import io.github.project.openubl.xmlbuilderlib.models.input.standard.note.creditNote.CreditNoteInputModel;
2830
import io.github.project.openubl.xmlbuilderlib.models.input.standard.note.debitNote.DebitNoteInputModel;
31+
import io.github.project.openubl.xmlbuilderlib.models.output.common.FormaPagoOutputModel;
2932
import io.github.project.openubl.xmlbuilderlib.models.output.standard.*;
3033
import io.github.project.openubl.xmlbuilderlib.models.output.standard.invoice.InvoiceOutputModel;
3134
import io.github.project.openubl.xmlbuilderlib.models.output.standard.note.NoteOutputModel;
@@ -36,6 +39,7 @@
3639
import java.math.BigDecimal;
3740
import java.util.List;
3841
import java.util.Objects;
42+
import java.util.TimeZone;
3943
import java.util.stream.Collectors;
4044
import java.util.stream.Stream;
4145

@@ -60,6 +64,13 @@ public static InvoiceOutputModel getInvoiceOutput(InvoiceInputModel input, Confi
6064
}
6165

6266
enrichDocument(input, builder, config, systemClock);
67+
68+
// Forma de pago
69+
InvoiceOutputModel tmpOutput = builder.build();
70+
builder.withFormaPago(getFormaPago(
71+
input.getCuotasDePago(), tmpOutput.getTotales(), systemClock.getTimeZone()
72+
));
73+
6374
return builder.build();
6475
}
6576

@@ -73,6 +84,13 @@ public static CreditNoteOutputModel getCreditNoteOutput(CreditNoteInputModel inp
7384

7485
enrichNote(input, builder);
7586
enrichDocument(input, builder, config, systemClock);
87+
88+
// Forma de pago
89+
CreditNoteOutputModel tmpOutput = builder.build();
90+
builder.withFormaPago(getFormaPago(
91+
input.getCuotasDePago(), tmpOutput.getTotales(), systemClock.getTimeZone()
92+
));
93+
7694
return builder.build();
7795
}
7896

@@ -262,4 +280,9 @@ private static ImpuestoTotalOutputModel getImpuestoTotal(List<DocumentLineOutput
262280
.build();
263281
}
264282

283+
private static FormaPagoOutputModel getFormaPago(List<CuotaDePagoInputModel> cuotas, DocumentMonetaryTotalOutputModel totales, TimeZone timeZone) {
284+
return FormaPagoOutputModelFactory.getFormaPago(
285+
cuotas, totales.getValorVentaConImpuestos(), timeZone
286+
);
287+
}
265288
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
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.factory.common;
18+
19+
import io.github.project.openubl.xmlbuilderlib.models.input.common.CuotaDePagoInputModel;
20+
import io.github.project.openubl.xmlbuilderlib.models.input.common.FirmanteInputModel;
21+
import io.github.project.openubl.xmlbuilderlib.models.input.common.ProveedorInputModel;
22+
import io.github.project.openubl.xmlbuilderlib.models.output.common.FirmanteOutputModel;
23+
import io.github.project.openubl.xmlbuilderlib.models.output.common.FormaPagoCuotaOutputModel;
24+
import io.github.project.openubl.xmlbuilderlib.models.output.common.FormaPagoOutputModel;
25+
26+
import java.math.BigDecimal;
27+
import java.util.*;
28+
import java.util.stream.Collectors;
29+
30+
import static io.github.project.openubl.xmlbuilderlib.utils.DateUtils.toGregorianCalendarDate;
31+
32+
public class FormaPagoOutputModelFactory {
33+
34+
private FormaPagoOutputModelFactory() {
35+
// Only static methods
36+
}
37+
38+
public static FirmanteOutputModel getFirmante(FirmanteInputModel input) {
39+
return FirmanteOutputModel.Builder.aFirmanteOutputModel()
40+
.withRuc(input.getRuc())
41+
.withRazonSocial(input.getRazonSocial())
42+
.build();
43+
}
44+
45+
public static FirmanteOutputModel getFirmante(ProveedorInputModel input) {
46+
return FirmanteOutputModel.Builder.aFirmanteOutputModel()
47+
.withRuc(input.getRuc())
48+
.withRazonSocial(input.getRazonSocial())
49+
.build();
50+
}
51+
52+
public static FormaPagoOutputModel getFormaPago(List<CuotaDePagoInputModel> cuotasDePago, BigDecimal montoTotal, TimeZone timeZone) {
53+
FormaPagoOutputModel.Builder builder = FormaPagoOutputModel.Builder.aFormaPagoOutputModel()
54+
.withMontoTotal(montoTotal);
55+
56+
if (cuotasDePago == null || cuotasDePago.isEmpty()) {
57+
builder
58+
.withTipo(FormaPagoOutputModel.Tipo.Contado)
59+
.withCuotas(Collections.emptyList());
60+
} else {
61+
List<FormaPagoCuotaOutputModel> cuotasOutput = new ArrayList<>();
62+
63+
builder
64+
.withTipo(FormaPagoOutputModel.Tipo.Credito)
65+
.withCuotas(cuotasOutput);
66+
67+
for (int i = 0; i < cuotasDePago.size(); i++) {
68+
CuotaDePagoInputModel item = cuotasDePago.get(i);
69+
70+
FormaPagoCuotaOutputModel output = FormaPagoCuotaOutputModel.Builder.aFormaPagoCuotaOutputModel()
71+
.withId(String.format("%03d", i))
72+
.withMonto(item.getMonto())
73+
.withFechaPago(toGregorianCalendarDate(item.getFechaPago(), timeZone))
74+
.build();
75+
76+
cuotasOutput.add(output);
77+
}
78+
}
79+
80+
return builder.build();
81+
}
82+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
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.input.common;
18+
19+
import javax.validation.constraints.NotNull;
20+
import java.math.BigDecimal;
21+
import java.util.Date;
22+
23+
public class CuotaDePagoInputModel {
24+
25+
@NotNull
26+
private BigDecimal monto;
27+
28+
@NotNull
29+
private Long fechaPago;
30+
31+
public BigDecimal getMonto() {
32+
return monto;
33+
}
34+
35+
public void setMonto(BigDecimal monto) {
36+
this.monto = monto;
37+
}
38+
39+
public Long getFechaPago() {
40+
return fechaPago;
41+
}
42+
43+
public void setFechaPago(Long fechaPago) {
44+
this.fechaPago = fechaPago;
45+
}
46+
47+
public static final class Builder {
48+
private BigDecimal monto;
49+
private Long fechaPago;
50+
51+
private Builder() {
52+
}
53+
54+
public static Builder aFormaPagoCuotaInputModel() {
55+
return new Builder();
56+
}
57+
58+
public Builder withMonto(BigDecimal monto) {
59+
this.monto = monto;
60+
return this;
61+
}
62+
63+
public Builder withFechaPago(Long fechaPago) {
64+
this.fechaPago = fechaPago;
65+
return this;
66+
}
67+
68+
public CuotaDePagoInputModel build() {
69+
CuotaDePagoInputModel cuotaDePagoInputModel = new CuotaDePagoInputModel();
70+
cuotaDePagoInputModel.setMonto(monto);
71+
cuotaDePagoInputModel.setFechaPago(fechaPago);
72+
return cuotaDePagoInputModel;
73+
}
74+
}
75+
}

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

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

1919
import io.github.project.openubl.xmlbuilderlib.models.input.common.ClienteInputModel;
2020
import io.github.project.openubl.xmlbuilderlib.models.input.common.FirmanteInputModel;
21+
import io.github.project.openubl.xmlbuilderlib.models.input.common.CuotaDePagoInputModel;
2122
import io.github.project.openubl.xmlbuilderlib.models.input.common.ProveedorInputModel;
2223
import io.github.project.openubl.xmlbuilderlib.models.input.standard.DocumentInputModel;
2324
import io.github.project.openubl.xmlbuilderlib.models.input.standard.DocumentLineInputModel;
2425

26+
import javax.validation.Valid;
2527
import java.util.List;
2628

2729
public class InvoiceInputModel extends DocumentInputModel {
2830

31+
@Valid
32+
private List<CuotaDePagoInputModel> cuotasDePago;
33+
34+
public List<CuotaDePagoInputModel> getCuotasDePago() {
35+
return cuotasDePago;
36+
}
37+
38+
public void setCuotasDePago(List<CuotaDePagoInputModel> cuotasDePago) {
39+
this.cuotasDePago = cuotasDePago;
40+
}
41+
2942
public static final class Builder {
3043
protected String serie;
3144
private Integer numero;
@@ -34,6 +47,7 @@ public static final class Builder {
3447
private ProveedorInputModel proveedor;
3548
private FirmanteInputModel firmante;
3649
private List<DocumentLineInputModel> detalle;
50+
private List<CuotaDePagoInputModel> cuotasDePago;
3751

3852
private Builder() {
3953
}
@@ -77,6 +91,11 @@ public Builder withDetalle(List<DocumentLineInputModel> detalle) {
7791
return this;
7892
}
7993

94+
public Builder withCuotasDePago(List<CuotaDePagoInputModel> cuotasDePago) {
95+
this.cuotasDePago = cuotasDePago;
96+
return this;
97+
}
98+
8099
public InvoiceInputModel build() {
81100
InvoiceInputModel invoiceInputModel = new InvoiceInputModel();
82101
invoiceInputModel.setSerie(serie);
@@ -86,6 +105,7 @@ public InvoiceInputModel build() {
86105
invoiceInputModel.setProveedor(proveedor);
87106
invoiceInputModel.setFirmante(firmante);
88107
invoiceInputModel.setDetalle(detalle);
108+
invoiceInputModel.setCuotasDePago(cuotasDePago);
89109
return invoiceInputModel;
90110
}
91111
}

src/main/java/io/github/project/openubl/xmlbuilderlib/models/input/standard/note/creditNote/CreditNoteInputModel.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,23 @@
1919
import io.github.project.openubl.xmlbuilderlib.models.catalogs.Catalog9;
2020
import io.github.project.openubl.xmlbuilderlib.models.catalogs.constraints.CatalogConstraint;
2121
import io.github.project.openubl.xmlbuilderlib.models.input.common.ClienteInputModel;
22+
import io.github.project.openubl.xmlbuilderlib.models.input.common.CuotaDePagoInputModel;
2223
import io.github.project.openubl.xmlbuilderlib.models.input.common.FirmanteInputModel;
2324
import io.github.project.openubl.xmlbuilderlib.models.input.common.ProveedorInputModel;
2425
import io.github.project.openubl.xmlbuilderlib.models.input.standard.DocumentLineInputModel;
2526
import io.github.project.openubl.xmlbuilderlib.models.input.standard.note.NoteInputModel;
2627

28+
import javax.validation.Valid;
2729
import java.util.List;
2830

2931
public class CreditNoteInputModel extends NoteInputModel {
3032

3133
@CatalogConstraint(value = Catalog9.class)
3234
private String tipoNota;
3335

36+
@Valid
37+
private List<CuotaDePagoInputModel> cuotasDePago;
38+
3439
public String getTipoNota() {
3540
return tipoNota;
3641
}
@@ -39,6 +44,14 @@ public void setTipoNota(String tipoNota) {
3944
this.tipoNota = tipoNota;
4045
}
4146

47+
public List<CuotaDePagoInputModel> getCuotasDePago() {
48+
return cuotasDePago;
49+
}
50+
51+
public void setCuotasDePago(List<CuotaDePagoInputModel> cuotasDePago) {
52+
this.cuotasDePago = cuotasDePago;
53+
}
54+
4255
public static final class Builder {
4356
protected String serie;
4457
private String serieNumeroComprobanteAfectado;
@@ -50,6 +63,7 @@ public static final class Builder {
5063
private ProveedorInputModel proveedor;
5164
private FirmanteInputModel firmante;
5265
private List<DocumentLineInputModel> detalle;
66+
private List<CuotaDePagoInputModel> cuotasDePago;
5367

5468
private Builder() {
5569
}
@@ -108,6 +122,11 @@ public Builder withDetalle(List<DocumentLineInputModel> detalle) {
108122
return this;
109123
}
110124

125+
public Builder withCuotasDePago(List<CuotaDePagoInputModel> cuotasDePago) {
126+
this.cuotasDePago = cuotasDePago;
127+
return this;
128+
}
129+
111130
public CreditNoteInputModel build() {
112131
CreditNoteInputModel creditNoteInputModel = new CreditNoteInputModel();
113132
creditNoteInputModel.setSerieNumeroComprobanteAfectado(serieNumeroComprobanteAfectado);
@@ -120,6 +139,7 @@ public CreditNoteInputModel build() {
120139
creditNoteInputModel.setProveedor(proveedor);
121140
creditNoteInputModel.setFirmante(firmante);
122141
creditNoteInputModel.setDetalle(detalle);
142+
creditNoteInputModel.setCuotasDePago(cuotasDePago);
123143
return creditNoteInputModel;
124144
}
125145
}

src/main/java/io/github/project/openubl/xmlbuilderlib/models/input/standard/note/debitNote/DebitNoteInputModel.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.github.project.openubl.xmlbuilderlib.models.catalogs.Catalog10;
2020
import io.github.project.openubl.xmlbuilderlib.models.catalogs.constraints.CatalogConstraint;
2121
import io.github.project.openubl.xmlbuilderlib.models.input.common.ClienteInputModel;
22+
import io.github.project.openubl.xmlbuilderlib.models.input.common.CuotaDePagoInputModel;
2223
import io.github.project.openubl.xmlbuilderlib.models.input.common.FirmanteInputModel;
2324
import io.github.project.openubl.xmlbuilderlib.models.input.common.ProveedorInputModel;
2425
import io.github.project.openubl.xmlbuilderlib.models.input.standard.DocumentLineInputModel;
@@ -50,6 +51,7 @@ public static final class Builder {
5051
private ProveedorInputModel proveedor;
5152
private FirmanteInputModel firmante;
5253
private List<DocumentLineInputModel> detalle;
54+
private List<CuotaDePagoInputModel> cuotasDePago;
5355

5456
private Builder() {
5557
}
@@ -108,6 +110,11 @@ public Builder withDetalle(List<DocumentLineInputModel> detalle) {
108110
return this;
109111
}
110112

113+
public Builder withCuotasDePago(List<CuotaDePagoInputModel> cuotasDePago) {
114+
this.cuotasDePago = cuotasDePago;
115+
return this;
116+
}
117+
111118
public DebitNoteInputModel build() {
112119
DebitNoteInputModel debitNoteInputModel = new DebitNoteInputModel();
113120
debitNoteInputModel.setSerieNumeroComprobanteAfectado(serieNumeroComprobanteAfectado);

0 commit comments

Comments
 (0)