valid method
bool
valid(
[ - dynamic x
])
override
Implementation
@override
bool valid([x]) {
if (x == null) return true;
if (x.isEmpty) return true;
var ecf = this;
// validaciones de tipo y numero de ncf
if (ecf.Encabezado.IdDoc.eNCF.isEmpty) {
throw ChalonaResponse.error('El ncf no puede estar vacio', {});
}
if (ecf.Encabezado.IdDoc.eNCF.value.length != 13) {
throw ChalonaResponse.error('El ncf no contiene 13 digitos', {});
}
var tipo = ecf.Encabezado.IdDoc.eNCF.value.substring(1, 3);
if (tipo != ecf.Encabezado.IdDoc.TipoeCF.value) {
throw ChalonaResponse.error(
'El tipo de comprobante especificado no coincide con el numero de comprobante',
{});
}
if (ecf.DetallesItems.isEmpty && !ecf.isRFCE) {
throw 'No hay detalles en el comprobante';
}
// VALIDACIONES TIPO 44
if (tipo == '44') {
if (ecf.Encabezado.Totales.TotalITBIS.value +
ecf.Encabezado.Totales.ITBIS1.value +
ecf.Encabezado.Totales.MontoGravadoI1.value >
0) {
throw ChalonaResponse.error(
'Los comprobantes tipo 44 no pueden tener ITBIS ni monto gravado',
{});
}
if (ecf.Encabezado.Totales.MontoExento.value !=
ecf.Encabezado.Totales.MontoTotal.value) {
throw ChalonaResponse.error(
'En los comprobantes tipo 44 el monto exento no puede ser diferente al monto total',
{});
}
ecf.Encabezado.IdDoc.IndicadorMontoGravado.value = '';
for (var detail in ecf.DetallesItems) {
detail.IndicadorFacturacion.value = 4;
}
}
// VALIVANDO SI HAY DESCUENTO
var hay_descuento = false;
var valor = Number();
var monto_gravado1 = Number();
var monto_gravado2 = Number();
var monto_gravado3 = Number();
for (var detail in ecf.DetallesItems) {
// si no hay descuento se limpia la tabla de subdescuentos
if (detail.DescuentoMonto.value == 0) {
detail.TablaSubDescuento.clear();
} else {
hay_descuento = true;
}
valor += detail.MontoItem.value;
// se sumariza los diferentes montos gravados
if (detail.IndicadorFacturacion.value == 1) {
monto_gravado1 += detail.MontoItem.value;
} else if (detail.IndicadorFacturacion.value == 2) {
monto_gravado2 += detail.MontoItem.value;
} else if (detail.IndicadorFacturacion.value == 3) {
monto_gravado3 += detail.MontoItem.value;
}
}
ecf.Encabezado.Totales.MontoGravadoTotal.value =
(monto_gravado1 + monto_gravado2 + monto_gravado3).value;
if (valor.value !=
ecf.Encabezado.Totales.MontoGravadoTotal.value +
ecf.Encabezado.Totales.MontoExento.value) {
throw 'El monto gravado mas el monto exento no coincide con el valor sumado del detalle';
}
if (monto_gravado1 != ecf.Encabezado.Totales.MontoGravadoI1.value) {
throw 'La suma de los montos gravados a 18% no coincide su valor en la cabecera';
}
if (monto_gravado2 != ecf.Encabezado.Totales.MontoGravadoI2.value) {
throw 'La suma de los montos gravados a 16% no coincide su valor en la cabecera';
}
if (monto_gravado3 != ecf.Encabezado.Totales.MontoGravadoI3.value) {
throw 'La suma de los montos gravados a 3% no coincide su valor en la cabecera';
}
if (!hay_descuento) {
ecf.DescuentosORecargos.clear();
}
return true;
}