Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }