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; }