private void ComprobanteController_ComprobanteAutorizando(object sender, ComprobanteAutorizandoArgs args)
        {
            var comprobante = ( Comprobante )args.Comprobante;

            if (!Convert.ToBoolean(comprobante.Talonario.GetMemberValue(AFIPWsMtxcaModule.PropertyNameFacturaElectronicaMtxca)))
            {
                return;
            }

            //cargar identificadores y sesión de la AFIP. Si no hay una válida, se inicia una nueva sesión y se guardan los cambios en la DB
            var objSpace        = Application.CreateObjectSpace( );
            var identificadores = Identificadores.GetInstance(objSpace);

            if (identificadores.FacturaElectronicaEnte == null)
            {
                throw new Exception("Ente de factura electrónica no definida para esta empresa");
            }

            var sesionWsmtxca = identificadores.FacturaElectronicaEnte.GetSesion(ServiceName);

            objSpace.CommitChanges( );

            if (comprobante.AutorizadaResultado == ResultadoAutorizacion.Autorizada)
            {
                throw new Exception("Comprobante ya autorizado por la AFIP");
            }

            ComprobanteCAEResponseType comprobanteResponse;

            CodigoDescripcionType[] arrayObservaciones;
            CodigoDescripcionType[] arrayErrores;
            CodigoDescripcionType   evento;

            var resp = service.autorizarComprobante(GetAuth(sesionWsmtxca),
                                                    GetComprobanteType(( Comprobante )sender),
                                                    out comprobanteResponse,
                                                    out arrayObservaciones,
                                                    out arrayErrores,
                                                    out evento);

            comprobante.AutorizadaNotas = "";
            if (arrayErrores != null && arrayErrores.Length > 0)
            {
                var err = arrayErrores.Aggregate("", (current, error) => current + (error.codigo + " - " + error.descripcion + "\n"));
                //TODO errores de Encoding. No encontre otra manera de arreglarlo
                err = err.Replace("ó", "ó").Replace("ú", "ú");

                comprobante.AutorizadaNotas = err;
                throw new Exception("Error de autorización:\n" + err);
            }

            if (comprobanteResponse == null)
            {
                throw new Exception("Error de autorización:\nNo se obtuvieron datos");
            }

            comprobante.AutorizadaResultado = resp.ToString( );

            if (arrayObservaciones != null && arrayObservaciones.Length > 0)
            {
                var obs = arrayObservaciones.Aggregate("", (current, observacion) => current + (observacion.codigo + " - " + observacion.descripcion + "\n"));
                comprobante.AutorizadaNotas += obs;
            }

            comprobante.AutorizadaCodigo       = comprobanteResponse.CAE.ToString( );
            comprobante.AutorizadaCodigoFecVto = comprobanteResponse.fechaVencimientoCAE;

            args.Autorizado = comprobante.AutorizadaResultado == ResultadoAutorizacion.Autorizada;
        }
        private void ComprobanteController_ComprobanteAutorizando(object sender, ComprobanteAutorizandoArgs args)
        {
            var comprobante = (Comprobante)args.Comprobante;

            if (!Convert.ToBoolean(comprobante.Talonario.GetMemberValue(AFIPModule.PropertyNameFacturaElectronicaWsfeV1)))
            {
                return;
            }

            //cargar identificadores y sesión de la AFIP. Si no hay una válida, se inicia una nueva sesión y se guardan los cambios en la DB
            var objSpace        = Application.CreateObjectSpace( );
            var identificadores = Identificadores.GetInstance(objSpace);

            if (identificadores.FacturaElectronicaEnte == null)
            {
                throw new Exception("Ente de factura electrónica no definida para esta empresa");
            }

            var sesionWsfe = identificadores.FacturaElectronicaEnte.GetSesion(Sesion.ServicioWSFE);

            objSpace.CommitChanges( );

            if (comprobante.AutorizadaResultado == ResultadoAutorizacion.Autorizada)
            {
                throw new Exception("Comprobante ya autorizado por la AFIP");
            }

            var resp = ObtenerAutorizacion(sesionWsfe, GetDetRequest(comprobante));

            comprobante.AutorizadaNotas = "";
            if (resp.Errors != null && resp.Errors.Count > 0)
            {
                var err = resp.Errors.Aggregate("", (current, error) => current + (error.Code + " - " + error.Msg + "\n"));
                //TODO errores de Encoding. No encontre otra manera de arreglarlo
                err = err.Replace("ó", "ó").Replace("ú", "ú");

                comprobante.AutorizadaNotas = err;
                throw new Exception("Error de autorización:\n" + err);
            }

            if (resp.FeCabResp == null || resp.FeDetResp == null)
            {
                throw new Exception("Error de autorización:\nNo se obtuvieron datos");
            }

            comprobante.AutorizadaResultado = resp.FeCabResp.Resultado;

            if (resp.FeDetResp.Count == 1)
            {
                if (resp.FeDetResp[0].Observaciones != null && resp.FeDetResp[0].Observaciones.Count > 0)
                {
                    var obs = resp.FeDetResp[0].Observaciones.Aggregate("", (current, observacion) => current + (observacion.Code + " - " + observacion.Msg + "\n"));
                    comprobante.AutorizadaNotas += obs;
                }

                comprobante.AutorizadaCodigo = resp.FeDetResp[0].CAE;
                if (!string.IsNullOrWhiteSpace(resp.FeDetResp[0].CAEFchVto))
                {
                    comprobante.AutorizadaCodigoFecVto = new DateTime(Convert.ToInt32(resp.FeDetResp[0].CAEFchVto.Substring(0, 4)),
                                                                      Convert.ToInt32(resp.FeDetResp[0].CAEFchVto.Substring(4, 2)),
                                                                      Convert.ToInt32(resp.FeDetResp[0].CAEFchVto.Substring(6, 2)));
                }
            }

            args.Autorizado = comprobante.AutorizadaResultado == ResultadoAutorizacion.Autorizada;
        }