public static string GetCAE(Comprobantes comprobante, out string logError, out string nroComprobante) { comprobante.Empresa = new Empresas(); comprobante.Empresa.Cuit = "33-67789425-9"; comprobante.Empresa.DNOrigen = "serialNumber=CUIT 33677894259,[email protected],CN=VISET,OU=VISET,O=VISET,ST=Buenos Aires,C=AR"; comprobante.Empresa.DNDestino = "CN=wsaahomo; O=afip; C=ar; serialNumber=CUIT 33693450239"; comprobante.Empresa.Id = Convert.ToInt32("2"); comprobante.Empresa.SenderName = "VISET"; comprobante.Empresa.CAI = "CAI1455"; comprobante.Empresa.CertificadoDestinoFileName = @"C:\Vero\Proyectos\MFD\MFDHOMO\Certificados\viset\CRT-root.cer"; comprobante.Empresa.CertificadoFileName = @"C:\Vero\Proyectos\MFD\MFDHOMO\Certificados\viset\viset.crt"; comprobante.Empresa.CertificadoPassword = "******"; comprobante.Empresa.LoginTicketFileName = @"C:\Vero\Proyectos\MFD\MFDHOMO\Certificados\viset\LoginTicketRequest.xml"; logError = String.Empty; string result = String.Empty; LoginTickets loginTicket = GetLoginTicket(comprobante.Empresa); nroComprobante = "-1"; if (loginTicket != null) { FEAuthRequest authRequest = new FEAuthRequest(); authRequest.Token = loginTicket.Token; authRequest.Sign = loginTicket.Sign; authRequest.cuit = Convert.ToInt64(comprobante.Empresa.Cuit.Replace("-", "")); ComprobantesAdapter adapter = new ComprobantesAdapter(comprobante); FERequest request = adapter.GenerarFERequest(comprobante.Id); Service service = new Service(); FEResponse response = service.FEAutRequest(authRequest, request); if (response.FedResp != null && response.FedResp[0].resultado == "R" && response.FedResp[0].motivo.StartsWith("11") && response.FedResp[0].cae == "NULL") { //Caso en que falla por correlatividad de comprobantes FERecuperaLastCMPResponse ultimoComEmitido = service.FERecuperaLastCMPRequest(authRequest, adapter.GenerarFELastCMPtype()); comprobante.NroCbante = comprobante.NroCbante.Substring(0, 5) + (ultimoComEmitido.cbte_nro + 1).ToString().PadLeft(8, '0'); adapter = new ComprobantesAdapter(comprobante); request = new FERequest(); //GeneraciĆ³n de otro ID long idDate = DateTime.Now.Year * 10000000000; idDate += DateTime.Now.Month * 100000000; idDate += DateTime.Now.Day * 1000000; idDate += DateTime.Now.Hour * 10000; idDate += DateTime.Now.Minute * 100; idDate += DateTime.Now.Second; request = adapter.GenerarFERequest(idDate); service = new Service(); response = service.FEAutRequest(authRequest, request); } else { if (response.FedResp != null && response.FedResp[0].resultado == "R" && !String.IsNullOrEmpty(response.FedResp[0].motivo)) { ArrayList motivos = new ArrayList(); motivos.AddRange(response.FedResp[0].motivo.Split(";".ToCharArray())); StringBuilder logMotivos = new StringBuilder(); if (motivos.Contains("01")) { logMotivos.Append("01 \"La cuit informada no corresponde a un responsable inscripto en el iva activo\\n"); } if (motivos.Contains("02")) { logMotivos.Append("02 \"La cuit informada no se encuentra autorizada a emitir comprobantes electronicos originales o el periodo de inicio autorizado es posterior al de la generacion de la solicitud\"\n"); } if (motivos.Contains("03")) { logMotivos.Append("03 \"La cuit informada registra inconvenientes con el domicilio fiscal\"\n"); } if (motivos.Contains("04")) { logMotivos.Append("04 \"El punto de venta informado no se encuentra declarado para ser utilizado en el presente regimen\"\n"); } if (motivos.Contains("05")) { logMotivos.Append("05 \"La fecha del comprobante indicada no puede ser anterior en mas de cinco dias, si se trata de una venta, o anterior o posterior en mas de diez dias, si se trata de una prestacion de servicios, consecutivos de la fecha de remision del archivo art. 22 De la rg nro 2177-\"\n"); } if (motivos.Contains("06")) { logMotivos.Append("06 \"La cuit informada no se encuentra autorizada a emitir comprobantes clase \"a\"\"\n"); } if (motivos.Contains("07")) { logMotivos.Append("07 \"Para la clase de comprobante solicitado -comprobante clase a- debera consignar en el campo codigo de documento identificatorio del comprador el codigo \"80\"\n"); } if (motivos.Contains("08")) { logMotivos.Append("08 \"La cuit indicada en el campo nro de identificacion del comprador es invalida\"\n"); } if (motivos.Contains("09")) { logMotivos.Append("09 \"La cuit indicada en el campo nro de identificacion del comprador no existe en el padron unico de contribuyentes\"\n"); } if (motivos.Contains("10")) { logMotivos.Append("10 \"La cuit indicada en el campo nro de identificacion del comprador no corresponde a un responsable inscripto en el iva activo\"\n"); } if (motivos.Contains("11")) { logMotivos.Append("11 \"El nro de comprobante desde informado no es correlativo al ultimo nro de comprobante registrado/hasta solicitado para ese tipo de comprobante y punto de venta\"\n"); } if (motivos.Contains("12")) { logMotivos.Append("12 \"El rango informado se encuentra autorizado con anterioridad para la misma cuit, tipo de comprobante y punto de venta\"\n"); } if (motivos.Contains("13")) { logMotivos.Append("13 \"La cuit indicada se encuentra comprendida en el regimen establecido por la resolucion general nro 2177 y/o en el titulo I de la resolucion general nro 1361 art. 24 De la rg nro 2177\"\n"); } if (logMotivos.Length > 0) { logError = logMotivos.ToString(); } } } nroComprobante = comprobante.NroCbante; try { result = response.FedResp[0].cae; } catch (Exception ex) { nroComprobante = "-1"; result = ex.Message; } } return(result); }
private static string GetCAE(Comprobantes comprobante, out string logError, out string nroComprobante, ref long idCabecera, bool autogenerarNroComprobante) { logError = String.Empty; string result = String.Empty; LoginTickets loginTicket = GetLoginTicket(comprobante.Empresa); nroComprobante = "-1"; if (loginTicket != null) { Service service = new Service(); //service.Timeout = 500000; FEAuthRequest authRequest = new FEAuthRequest(); authRequest.Token = loginTicket.Token; authRequest.Sign = loginTicket.Sign; authRequest.cuit = Convert.ToInt64(comprobante.Empresa.Cuit.Replace("-", "")); ComprobantesAdapter adapter = new ComprobantesAdapter(comprobante, comprobante.Empresa); //if (autogenerarNroComprobante) //{ // FERecuperaLastCMPResponse ultimoComEmitido = service.FERecuperaLastCMPRequest(authRequest, adapter.GenerarFELastCMPtype()); // comprobante.NroCbante = comprobante.Empresa.PuntoDeVenta.Value.ToString().PadLeft(4, '0')+"-" + (ultimoComEmitido.cbte_nro + 1).ToString().PadLeft(8, '0'); //} //idCabecera = comprobante.Id; FERequest request = adapter.GenerarFERequest(idCabecera); FEResponse response = null; try { response = service.FEAutRequest(authRequest, request); } catch (Exception ex) { throw ex; } if (autogenerarNroComprobante && response.FedResp != null && response.FedResp[0].resultado == "R" && response.FedResp[0].motivo.StartsWith("11") && response.FedResp[0].cae == "NULL") { FERecuperaLastCMPResponse ultimoComEmitido = service.FERecuperaLastCMPRequest(authRequest, adapter.GenerarFELastCMPtype()); comprobante.NroCbante = comprobante.Empresa.PuntoDeVenta.Value.ToString().PadLeft(4, '0') + "-" + (ultimoComEmitido.cbte_nro + 1).ToString().PadLeft(8, '0'); //Caso en que falla por correlatividad de comprobantes adapter = new ComprobantesAdapter(comprobante, comprobante.Empresa); request = new FERequest(); ////GeneraciĆ³n de otro ID long idDate = DateTime.Now.Year * 10000000000; idDate += DateTime.Now.Month * 100000000; idDate += DateTime.Now.Day * 1000000; idDate += DateTime.Now.Hour * 10000; idDate += DateTime.Now.Minute * 100; idDate += DateTime.Now.Second; idCabecera = idDate; request = adapter.GenerarFERequest(idCabecera); service = new Service(); response = service.FEAutRequest(authRequest, request); } if (response.FedResp == null && response.RError != null) { return(response.RError.perrmsg); } if (response.FedResp != null && response.FedResp[0].resultado == "R" && !String.IsNullOrEmpty(response.FedResp[0].motivo)) { ArrayList motivos = new ArrayList(); motivos.AddRange(response.FedResp[0].motivo.Split(";".ToCharArray())); StringBuilder logMotivos = new StringBuilder(); if (motivos.Contains("01")) { logMotivos.Append("01 \"La cuit informada no corresponde a un responsable inscripto en el iva activo\\n"); } if (motivos.Contains("02")) { logMotivos.Append("02 \"La cuit informada no se encuentra autorizada a emitir comprobantes electronicos originales o el periodo de inicio autorizado es posterior al de la generacion de la solicitud\"\n"); } if (motivos.Contains("03")) { logMotivos.Append("03 \"La cuit informada registra inconvenientes con el domicilio fiscal\"\n"); } if (motivos.Contains("04")) { logMotivos.Append("04 \"El punto de venta informado no se encuentra declarado para ser utilizado en el presente regimen\"\n"); } if (motivos.Contains("05")) { logMotivos.Append("05 \"La fecha del comprobante indicada no puede ser anterior en mas de cinco dias, si se trata de una venta, o anterior o posterior en mas de diez dias, si se trata de una prestacion de servicios, consecutivos de la fecha de remision del archivo art. 22 De la rg nro 2177-\"\n"); } if (motivos.Contains("06")) { logMotivos.Append("06 \"La cuit informada no se encuentra autorizada a emitir comprobantes clase \"a\"\"\n"); } if (motivos.Contains("07")) { logMotivos.Append("07 \"Para la clase de comprobante solicitado -comprobante clase a- debera consignar en el campo codigo de documento identificatorio del comprador el codigo \"80\"\n"); } if (motivos.Contains("08")) { logMotivos.Append("08 \"La cuit indicada en el campo nro de identificacion del comprador es invalida\"\n"); } if (motivos.Contains("09")) { logMotivos.Append("09 \"La cuit indicada en el campo nro de identificacion del comprador no existe en el padron unico de contribuyentes\"\n"); } if (motivos.Contains("10")) { logMotivos.Append("10 \"La cuit indicada en el campo nro de identificacion del comprador no corresponde a un responsable inscripto en el iva activo\"\n"); } if (motivos.Contains("11")) { logMotivos.Append("11 \"El nro de comprobante desde informado no es correlativo al ultimo nro de comprobante registrado/hasta solicitado para ese tipo de comprobante y punto de venta\"\n"); } if (motivos.Contains("12")) { logMotivos.Append("12 \"El rango informado se encuentra autorizado con anterioridad para la misma cuit, tipo de comprobante y punto de venta\"\n"); } if (motivos.Contains("13")) { logMotivos.Append("13 \"La cuit indicada se encuentra comprendida en el regimen establecido por la resolucion general nro 2177 y/o en el titulo I de la resolucion general nro 1361 art. 24 De la rg nro 2177\"\n"); } if (logMotivos.Length > 0) { logError = logMotivos.ToString(); } } nroComprobante = comprobante.NroCbante; service.Dispose(); try { result = response.FedResp[0].cae; comprobante.IdCabeceraWS = idCabecera; try { CaeCounter wsCaeCounter = new CaeCounter(); bool produccion = !service.Url.Contains("h**o"); wsCaeCounter.SetCAEByCUIT(comprobante.Empresa.Cuit, result, comprobante.NroCbante, idCabecera, produccion); } catch (Exception ex) { string err = ex.Message; //Por el momento no se hace nada si falla el wsCaeCounter } } catch (Exception ex) { nroComprobante = "-1"; result = ex.Message; } } return(result); }