valid method

  1. @override
bool valid([
  1. 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;
}