/// <summary> /// Devuelve la suma de los importes totales de todos los comprobantes. /// </summary> public double ImporteTotal() { double Res = 0; foreach (ComprobanteAsociado Comprob in this) { Res += decimal.ToDouble(Comprob.ImporteTotal()); } return(Res); }
/// <summary> /// Solicitar un CAE para uno o más comprobantes. /// </summary> /// <param name="solCae">Los datos para la solicitud del CAE.</param> /// <returns>La cantidad de comprobantes aprobados, o 0 si todos fueron rechazados.</returns> public int SolictarCae(SolicitudCae solCae) { using (var Clie = new ServiceSoapClient()) { var DetallesComprobantes = new FECAEDetRequest[solCae.Comprobantes.Count]; var i = 0; foreach (ComprobanteAsociado Comprob in solCae.Comprobantes) { var DetalleComprobante = new FECAEDetRequest { Concepto = (int)Comprob.Conceptos, DocTipo = (int)Comprob.Cliente.DocumentoTipo, DocNro = Comprob.Cliente.DocumentoNumero, CbteDesde = Comprob.Numero, CbteHasta = Comprob.Numero, CbteFch = DateTime.Now.ToString("yyyyMMdd"), ImpTotal = Math.Round(decimal.ToDouble(Comprob.ImporteTotal()), 2), ImpTotConc = Math.Round(decimal.ToDouble(Comprob.ImporteNetoNoGravado), 2), ImpNeto = Math.Round(decimal.ToDouble(Comprob.ImporteNetoGravado), 2), ImpOpEx = Math.Round(decimal.ToDouble(Comprob.ImporteExento), 2), ImpIVA = Math.Round(decimal.ToDouble(Comprob.ImporteIva()), 2), //ImpTrib = Comprob.TotalTributos(), MonId = "PES", MonCotiz = 1, /* CbtesAsoc = new CbteAsoc[1] * { * new CbteAsoc() * { * Nro = 0, * PtoVta = 0, * Tipo = Tablas.ComprobantesTipos.NotaDeCreditoA * } * } */ }; // Si es un comprobante con servicios, agregar los campos obligatorios if ((Comprob.Conceptos | Tablas.Conceptos.Servicios) == Tablas.Conceptos.Servicios) { DetalleComprobante.FchServDesde = Comprob.ServicioFechaDesde.ToString("yyyyMMdd"); DetalleComprobante.FchServHasta = Comprob.ServicioFechaHasta.ToString("yyyyMMdd"); DetalleComprobante.FchVtoPago = Comprob.FechaVencimientoPago.ToString("yyyyMMdd"); } // Agregar la tabla de alícuotas if (Comprob.ImportesAlicuotas != null && Comprob.ImportesAlicuotas.Count > 0) { DetalleComprobante.Iva = new AlicIva[Comprob.ImportesAlicuotas.Count]; var j = 0; foreach (ImporteAlicuota Alic in Comprob.ImportesAlicuotas) { DetalleComprobante.Iva[j++] = new AlicIva { Id = (int)Alic.Alicuota, BaseImp = Math.Round(decimal.ToDouble(Alic.BaseImponible), 2), Importe = Math.Round(decimal.ToDouble(Alic.Importe), 2) }; } } DetallesComprobantes[i++] = DetalleComprobante; } // Crear la solicitud var CaeReq = new FECAERequest { FeCabReq = new FECAECabRequest { CantReg = solCae.Comprobantes.Count, PtoVta = solCae.PuntoDeVenta, CbteTipo = (int)solCae.TipoComprobante, }, FeDetReq = DetallesComprobantes }; // Llamar al WS para hacer la solicitud var Res = Clie.FECAESolicitar(this.CrearFEAuthRequest(), CaeReq); var Aprobados = 0; solCae.Observaciones = new List <Observacion>(); /* if (Res.FeCabResp.Resultado == "R") { * // Todo el lote rechazado * foreach (var Er in Res.Errors) { * solCae.Observaciones.Add(new Observacion(Er.Code, Er.Msg)); * } * } else { */ // Aprobado total o parcial var ci = 0; foreach (var De in Res.FeDetResp) { var Comprob = solCae.Comprobantes[ci++]; Comprob.Cae = new Cae(); if (De.Resultado == "A") { // Aprobado Comprob.Cae.CodigoCae = De.CAE; Comprob.Cae.Vencimiento = DateTime.ParseExact(De.CAEFchVto, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture); Comprob.Numero = System.Convert.ToInt32(De.CbteDesde); Aprobados++; } if (De.Observaciones != null && De.Observaciones.Count <Obs>() > 0) { Comprob.Obs = new Observacion(De.Observaciones[0].Code, De.Observaciones[0].Msg, Comprob); foreach (var Er in De.Observaciones) { solCae.Observaciones.Add(new Observacion(Er.Code, Er.Msg, Comprob)); } } } /* } */ return(Aprobados); } }