11
11
namespace Multinexo \Models ;
12
12
13
13
use Multinexo \Exceptions \ValidationException ;
14
+ use Multinexo \Objects \InvoiceObject ;
15
+ use Multinexo \Objects \WebServiceEnum ;
14
16
use Multinexo \WSMTXCA \Wsmtxca ;
15
17
use Multinexo \WSMTXCA \WsParametros ;
16
18
use Respect \Validation \Exceptions \NestedValidationException ;
@@ -104,15 +106,13 @@ private function getRulesForElectronicInvoice(): array
104
106
{
105
107
$ wsReglas = [];
106
108
$ codComprobantes = $ this ->codComprobantes ();
107
- $ puntosVenta = $ this ->getAvailablePosNumbers ();
108
109
$ codDocumento = $ this ->codDocumento ();
109
110
$ codMonedas = $ this ->codMonedas ();
110
111
111
112
$ reglasFeGenerales = [
112
113
'periodo ' => v::notEmpty ()->date ('Ym ' ),
113
114
'orden ' => v::notEmpty ()->intVal ()->between (1 , 2 )->length (1 , 1 ),
114
115
'codigoComprobante ' => v::in ($ codComprobantes ),
115
- 'puntoVenta ' => v::in ($ puntosVenta ), // fe s/item?
116
116
'cantidadRegistros ' => v::notEmpty ()->intVal ()->between (1 , 9999 ),
117
117
'codigoConcepto ' => v::in (['1 ' , '2 ' , '3 ' ]),
118
118
'codigoDocumento ' => v::in ($ codDocumento ),
@@ -125,43 +125,35 @@ private function getRulesForElectronicInvoice(): array
125
125
'importeIVA ' => v::floatVal ()->between (0 , 9999999999999.99 ),
126
126
'importeTotal ' => v::floatVal ()->between (0 , 9999999999999.99 ),
127
127
'caea ' => v::intVal ()->length (14 , 14 ),
128
+ 'cotizacionMoneda ' => v::notEmpty ()->between (0 , 9999999999.999999 ),
129
+ 'numeroComprobante ' => v::optional (v::notEmpty ()->intVal ()->length (1 , 8 )),
130
+ 'fechaEmision ' => v::optional (v::date ('Y-m-d ' )),
131
+ 'fechaServicioDesde ' => v::optional (v::date ('Y-m-d ' )),
132
+ 'fechaServicioHasta ' => v::optional (v::date ('Y-m-d ' )),
133
+ 'fechaVencimientoPago ' => v::optional (v::date ('Y-m-d ' )),
134
+ 'comprobantesAsociados ' => v::optional (v::arrayType ()),
135
+ 'importeOtrosTributos ' => v::optional (v::floatVal ()->between (0 , 9999999999999.99 )),
136
+ 'arrayOtrosTributos ' => v::optional (v::arrayType ()),
137
+ 'arraySubtotalesIVA ' => v::optional (v::objectType ()),
128
138
];
129
-
130
- if ($ this ->ws === 'wsfe ' ) {
131
- $ wsReglas = [
132
- 'cotizacionMoneda ' => v::notEmpty ()->between (0 , 9999999999.999999 ),
133
- 'numeroComprobante ' => v::optional (v::notEmpty ()->intVal ()->length (1 , 8 )),
134
- 'fechaEmision ' => v::optional (v::date ('Ymd ' )),
135
- 'fechaServicioDesde ' => v::optional (v::date ('Ymd ' )),
136
- 'fechaServicioHasta ' => v::optional (v::date ('Ymd ' )),
137
- 'fechaVencimientoPago ' => v::optional (v::date ('Ymd ' )),
138
- 'arrayComprobantesAsociados ' => v::optional (v::objectType ()),
139
- 'arrayOtrosTributos ' => v::optional (v::objectType ()),
140
- 'arraySubtotalesIVA ' => v::optional (v::objectType ()),
139
+ if ($ this ->ws === WebServiceEnum::WSFE ) {
140
+ $ wsReglasPlus = [
141
+ 'puntoVenta ' => v::in ($ this ->getAvailablePosNumbers ()),
141
142
'arrayOpcionales ' => v::optional (v::objectType ()),
142
- 'importeOtrosTributos ' => v::optional (v::floatVal ()->between (0 , 9999999999999.99 )),
143
143
];
144
- } elseif ($ this ->ws === 'wsmtxca ' ) {
145
- $ wsReglas = [
146
- 'cotizacionMoneda ' => v::notEmpty ()->between (0 , 9999.999999 ),
147
- 'numeroComprobante ' => v::optional (v::notEmpty ()->intVal ()->length (1 , 8 )),
148
- 'fechaEmision ' => v::optional (v::date ('Y-m-d ' )),
149
- 'fechaServicioDesde ' => v::optional (v::date ('Y-m-d ' )),
150
- 'fechaServicioHasta ' => v::optional (v::date ('Y-m-d ' )),
151
- 'fechaVencimientoPago ' => v::optional (v::date ('Y-m-d ' )),
144
+ } elseif ($ this ->ws === WebServiceEnum::WSMTXCA ) {
145
+ $ wsReglasPlus = [
146
+ // 'puntoVenta' => v::in($this->getAvailablePosNumbers()), not working on testing environment
147
+ 'puntoVenta ' => v::notEmpty ()->intVal ()->between (1 , 9999 )->length (1 , 4 ),
152
148
'codigoTipoAutorizacion ' => v::optional (v::in (['A ' , 'E ' ])),
153
149
'observaciones ' => v::optional (v::stringType ()->length (0 , 2000 )),
154
- 'importeOtrosTributos ' => v::optional (v::floatVal ()->between (0 , 9999999999999.99 )),
155
150
'arrayItems ' => v::notEmpty ()->objectType (),
156
- 'arraySubtotalesIVA ' => v::optional (v::objectType ()),
157
- 'arrayComprobantesAsociados ' => v::optional (v::objectType ()),
158
- 'arrayOtrosTributos ' => v::optional (v::objectType ()),
159
151
'fechaDesde ' => v::optional (v::date ('Y-m-d ' )),
160
152
'fechaHasta ' => v::optional (v::date ('Y-m-d ' )),
161
153
];
162
154
}
163
155
164
- return array_merge ($ reglasFeGenerales , $ wsReglas );
156
+ return array_merge ($ reglasFeGenerales , $ wsReglas, $ wsReglasPlus ?? [] );
165
157
}
166
158
167
159
// Devuelve mensajes de error personalizados.
@@ -194,12 +186,8 @@ private function getErrorMessages(): array
194
186
// Valida los datos de un array.
195
187
private function validarDatosArray (array $ array , string $ regla ): void
196
188
{
197
- if (empty ($ array )) {
198
- return ;
199
- }
200
-
201
189
// TODO: Los items tienen que ir si o si en el caso de fe wsmtxca
202
- foreach (reset ( $ array) as $ dato ) {
190
+ foreach ($ array as $ dato ) {
203
191
$ this ->validarDatos ($ dato , $ this ->getRules ($ regla ));
204
192
}
205
193
}
@@ -209,30 +197,30 @@ public function validateDataInvoice(): void
209
197
{
210
198
$ this ->validarDatos ($ this ->datos , $ this ->getRules ('fe ' ));
211
199
212
- if (property_exists ($ this ->datos , 'arrayOtrosTributos ' )) {
213
- $ this ->validarDatosArray ((array ) $ this ->datos ->arrayOtrosTributos , 'tributos ' );
214
- }
200
+ $ this ->validarDatosArray ($ this ->datos ->arrayOtrosTributos , 'tributos ' );
215
201
216
202
/** @phpstan-ignore-next-line */
217
203
if (property_exists ($ this ->datos , 'arraySubtotalesIVA ' )) {
218
204
$ this ->validarDatosArray ((array ) $ this ->datos ->arraySubtotalesIVA , 'iva ' );
219
205
}
220
206
221
- if (property_exists ($ this ->datos , 'arrayComprobantesAsociados ' )) {
222
- $ this ->validarDatosArray ((array ) $ this ->datos ->arrayComprobantesAsociados , 'comprobantesAsociados ' );
223
- }
207
+ $ this ->validarDatosArray ($ this ->datos ->comprobantesAsociados , 'comprobantesAsociados ' );
224
208
225
209
if ($ this ->ws === 'wsfe ' ) {
226
210
if (property_exists ($ this ->datos , 'arrayOpcionales ' )) {
227
211
$ this ->validarDatosArray ((array ) $ this ->datos ->arrayOpcionales , 'opcionales ' );
228
212
}
229
213
} elseif ($ this ->ws === 'wsmtxca ' ) {
230
- $ this ->validarDatosArray (( array ) $ this ->datos ->arrayItems , 'items ' );
214
+ $ this ->validarDatosArray ($ this ->datos ->items , 'items ' );
231
215
}
232
216
}
233
217
234
218
// Valida que los datos ingresados cumplan con determinadas reglas.
235
- public function validarDatos (stdClass $ datos , stdClass $ reglas ): void
219
+
220
+ /**
221
+ * @param InvoiceObject|stdClass $datos
222
+ */
223
+ public function validarDatos ($ datos , stdClass $ reglas ): void
236
224
{
237
225
$ validaciones = [];
238
226
0 commit comments