public CAEDetalleRespuesta ConvertirDetalle( ComprobanteType origen )
        {
            CAEDetalleRespuesta destino = new CAEDetalleRespuesta();

            destino.Cae = origen.codigoAutorizacion.ToString();
            destino.CaeFechaVencimiento = origen.fechaVencimiento.ToString( "yyyyMMdd" );
            destino.ComprobanteDesde = origen.numeroComprobante;
            destino.ComprobanteHasta = origen.numeroComprobante;
            destino.ComprobanteFecha = origen.fechaEmision.ToString( "yyyyMMdd" );
            destino.Concepto = origen.codigoConcepto;
            destino.DocumentoNumero = origen.numeroDocumento;
            destino.Resultado = origen.codigoTipoAutorizacion.ToString(); // ver si es este valor
            destino.TipoDocumento = origen.codigoTipoDocumento;
            destino.ImporteTotal = (double) origen.importeTotal;
            destino.ImporteExento = (double) origen.importeExento;
            destino.ImporteIVA = (double) origen.arraySubtotalesIVA.Sum( x => x.importe );
            destino.ImporteNeto = (double) origen.importeGravado;
            //destino.ImporteTotalConceptos = origen.impo;
            destino.ImporteTributos = (double) origen.importeOtrosTributos;
            destino.Observaciones = new List<Observacion>();
            if ( !string.IsNullOrEmpty( origen.observaciones ) )
            {
                destino.Observaciones.Add( new Observacion() { Mensaje = origen.observaciones } );
            }

            return destino;
        }
        public CAERespuestaFe Convertir( ResultadoSimpleType resultado, ComprobanteCAEResponseType caeResp, CodigoDescripcionType[] obs, CodigoDescripcionType[] errores )
        {
            CAERespuestaFe respuesta = new CAERespuestaFe();

            CAECabeceraRespuesta cabResp = new CAECabeceraRespuesta();
            cabResp.CantidadDeRegistros = 1;
            cabResp.Cuit = caeResp.cuit;
            cabResp.PuntoDeVenta = caeResp.numeroPuntoVenta;
            cabResp.TipoComprobante = caeResp.codigoTipoComprobante;
            cabResp.Resultado = resultado.ToString();
            cabResp.FechaProceso = caeResp.fechaEmision.ToString( "yyyyMMdd" );

            CAEDetalleRespuesta detResp = new CAEDetalleRespuesta();
            detResp.Cae = caeResp.CAE.ToString();
            detResp.CaeFechaVencimiento = caeResp.fechaVencimientoCAE.ToString( "yyyyMMdd" );
            detResp.ComprobanteDesde = caeResp.numeroComprobante;
            detResp.ComprobanteHasta = caeResp.numeroComprobante;
            detResp.Resultado = resultado.ToString();

            if ( obs != null && obs.Length > 0 )
            {
                detResp.Observaciones = this.ObtenerObservaciones( obs );
            }

            respuesta.Cabecera = cabResp;
            respuesta.Detalle = new List<CAEDetalleRespuesta>();
            respuesta.Detalle.Add( detResp );

            return respuesta;
        }
        private CAEDetalleRespuesta ConvertirUnDetalle( FECAEDetResponse det )
        {
            CAEDetalleRespuesta detResp = new CAEDetalleRespuesta();
            detResp.Concepto = det.Concepto;
            detResp.TipoDocumento = det.DocTipo;
            detResp.DocumentoNumero = det.DocNro;
            detResp.ComprobanteDesde = det.CbteDesde;
            detResp.ComprobanteHasta = det.CbteHasta;
            detResp.ComprobanteFecha = det.CbteFch;
            detResp.Resultado = det.Resultado;
            detResp.Cae = det.CAE;
            detResp.CaeFechaVencimiento = det.CAEFchVto;

            WrapperObservaciones wo = new WrapperObservaciones();
            detResp.Observaciones = wo.Convertir( det.Observaciones );

            return detResp;
        }
        public CAEDetalleRespuesta ConvertirDetalle( FECompConsResponse origen )
        {
            CAEDetalleRespuesta destino = new CAEDetalleRespuesta();

            destino.Cae = origen.CodAutorizacion;
            destino.CaeFechaVencimiento = origen.FchVto;
            destino.ComprobanteDesde = origen.CbteDesde;
            destino.ComprobanteHasta = origen.CbteHasta;
            destino.ComprobanteFecha = origen.CbteFch;
            destino.Concepto = origen.Concepto;
            destino.DocumentoNumero = origen.DocNro;
            destino.Resultado = origen.Resultado;
            destino.TipoDocumento = origen.DocTipo;
            destino.ImporteTotal = origen.ImpTotal;
            destino.ImporteExento = origen.ImpOpEx;
            destino.ImporteIVA = origen.ImpIVA;
            destino.ImporteNeto = origen.ImpNeto;
            destino.ImporteTotalConceptos = origen.ImpTotConc;
            destino.ImporteTributos = origen.ImpTrib;
            destino.Observaciones = this.ConvertirObservaciones( origen );

            return destino;
        }
        private CAERespuestaFe Respuesta_UltimoComprobante( FeCabecera cabFe, int ultimoNro, Autorizacion autorizacion )
        {
            string numero = this.FormatearNumero( cabFe, ultimoNro );
            string tipoComprobante = this.consultas.ObtenerCodigoComprobante( autorizacion, cabFe.TipoComprobante );

            CAERespuestaFe Respuesta = new CAERespuestaFe();
            Respuesta.Cabecera = new CAECabeceraRespuesta();
            Respuesta.Detalle = new List<CAEDetalleRespuesta>();
            Respuesta.Cabecera.CantidadDeRegistros = 1;
            Respuesta.Cabecera.FechaProceso = DateTime.Today.ToString();
            Respuesta.Cabecera.PuntoDeVenta = cabFe.PuntoDeVenta;
            Respuesta.Cabecera.TipoComprobante = cabFe.TipoComprobante;
            Respuesta.Cabecera.Resultado = "R";
            CAEDetalleRespuesta Detalle = new CAEDetalleRespuesta();
            Detalle.Observaciones = new List<Observacion>();
            Observacion Obs = new Observacion();
            Detalle.Cae = "";
            Detalle.CaeFechaVencimiento = "";
            Detalle.Resultado = "R";
            Obs.Mensaje = "El próximo comprobante " + tipoComprobante + " a procesar debe ser el número " + numero;
            Detalle.Observaciones.Add( Obs );
            Respuesta.Detalle.Add( Detalle );
            return Respuesta;
        }
        public CAERespuestaFe ObtenerRespuestaVacia()
        {
            CAERespuestaFe retorno = new CAERespuestaFe();
            retorno.Detalle = new List<CAEDetalleRespuesta>();
            CAEDetalleRespuesta item = new CAEDetalleRespuesta();
            item.Observaciones = new List<Observacion>();
            Observacion obs = new Observacion();
            item.Observaciones.Add( obs );
            retorno.Detalle.Add( item );

            return retorno;
        }
 public List<Observacion> Comparar( CAEDetalleRespuesta comprobanteAfip, FeDetalle comprobante )
 {
     BuscadorDeDiferencias buscador = new BuscadorDeDiferencias();
     return buscador.Obtener( comprobanteAfip, comprobante );
 }