Пример #1
0
        protected void btnGetCAE_Click(object sender, EventArgs e)
        {
            try
            {
                Settings oSettings = new Settings(ddlEmpresa.SelectedItem.Value);

                AfipConnection afipConnFex = new AfipConnection("wsfex", oSettings);
                AfipConnection afipConnFe = new AfipConnection("wsfe", oSettings);
                AfipConnection afipConnFeB = new AfipConnection("wsbfe", oSettings);

                wsfex.Service fexService = new wsfex.Service();
                fexService.Url = oSettings.UrlAFIPwsfex;

                wsfe.Service feService = new wsfe.Service();
                feService.Url = oSettings.UrlAFIPwsfe;

                wsfeb.Service febService = new wsfeb.Service();
                febService.Url = oSettings.UrlAFIPwsbfe;

                wsfex.ClsFEX_LastCMP afipLastEx = new wsfex.ClsFEX_LastCMP();
                wsfex.ClsFEXAuthRequest objFEXAuthRequest = new wsfex.ClsFEXAuthRequest();
                wsfex.FEXGetCMPResponse objFEXGetCMPResponse = new wsfex.FEXGetCMPResponse();
                wsfex.ClsFEXRequest objFEXRequest = new wsfex.ClsFEXRequest();
                wsfex.FEXResponseAuthorize fexResponse = new wsfex.FEXResponseAuthorize();

                wsfe.FEAuthRequest objFEAuthRequest = new wsfe.FEAuthRequest();
                wsfe.FECompConsultaReq objFERequest = new wsfe.FECompConsultaReq();
                wsfe.FECompConsultaResponse feResponse = new wsfe.FECompConsultaResponse();

                //wsfe.FELastCMPtype objFELastCMType = new wsfe.FELastCMPtype();
                //wsfe.FEConsultaCAEResponse objFEConsultaCAEResponse = new wsfe.FEConsultaCAEResponse();
                //wsfe.FEConsultaCAEReq objCMPFE = new wsfe.FEConsultaCAEReq();
                //wsfe.FEResponse feResponse = new wsfe.FEResponse();
                //wsfe.FERequest objFERequest = new wsfe.FERequest();

                wsfeb.BFEGetCMPResponse objBFEGetCMPResponse = new wsfeb.BFEGetCMPResponse();
                wsfeb.ClsBFEGetCMP objCMP = new wsfeb.ClsBFEGetCMP();
                wsfeb.ClsBFEAuthRequest objBFEAuthRequest = new wsfeb.ClsBFEAuthRequest();

                DataTable returnDTable = new DataTable();

                SQLEngine sqlEngine = new SQLEngine();

                switch (ddlTipoComprobanteCAE.SelectedValue)
                {
                    case "1":
                    case "2":
                    case "3":
                    case "6":
                    case "7":
                    case "8":
                        lblErrorMessages.Text = "";

                        if (afipConnFeB.ConnectionErrorDescription == string.Empty)
                        {
                            objBFEAuthRequest.Cuit = afipConnFeB.Cuit;
                            objBFEAuthRequest.Sign = afipConnFeB.Sign;
                            objBFEAuthRequest.Token = afipConnFeB.Token;

                            objCMP.Punto_vta = Convert.ToInt16(ddlSucursalCAE.SelectedValue);
                            objCMP.Tipo_cbte = Convert.ToInt16(ddlTipoComprobanteCAE.SelectedValue);
                            objCMP.Cbte_nro = Convert.ToInt64(txtNroComprobante.Text);

                            objBFEGetCMPResponse = febService.BFEGetCMP(objBFEAuthRequest, objCMP);

                            if (objBFEGetCMPResponse.BFEResultGet != null && objBFEGetCMPResponse.BFEResultGet.Fch_venc_Cae != null)
                            {
                                lblCAE.Text = objBFEGetCMPResponse.BFEResultGet.Cae;
                                lblVto.Text = objBFEGetCMPResponse.BFEResultGet.Fch_venc_Cae;//objBFEGetCMPResponse.BFEResultGet.Fch_venc_Cae.Substring(3, 2) + "/" + objBFEGetCMPResponse.BFEResultGet.Fch_venc_Cae.Substring(4, 2) + "/" + objBFEGetCMPResponse.BFEResultGet.Fch_venc_Cae.Substring(0, 4);
                            }
                            else
                            {
                                objFEAuthRequest.Cuit = afipConnFe.Cuit;
                                objFEAuthRequest.Sign = afipConnFe.Sign;
                                objFEAuthRequest.Token = afipConnFe.Token;

                                objFERequest.CbteNro = Convert.ToInt64(txtNroComprobante.Text);
                                objFERequest.CbteTipo = Convert.ToInt16(ddlTipoComprobanteCAE.SelectedValue);
                                objFERequest.PtoVta = Convert.ToInt16(ddlSucursalCAE.SelectedValue);

                                feResponse = feService.FECompConsultar(objFEAuthRequest, objFERequest);

                                if (feResponse.ResultGet != null && feResponse.ResultGet.CodAutorizacion != null)
                                {
                                    lblCAE.Text = feResponse.ResultGet.CodAutorizacion;
                                    lblVto.Text = feResponse.ResultGet.FchVto; //.Substring(6, 2) + "/" + feResponse.FecResp.fecha_cae.Substring(4, 2) + "/" + feResponse.FecResp.fecha_cae.Substring(0, 4); ;
                                }
                                else
                                {
                                    lblCAE.Text = "Comprobante inexistente.";
                                    lblVto.Text = "XX/XX/XXXX";
                                }

                                ////si es bienes y servicios hay que reprocesar para obtener CAE, lo busco en la base
                                //returnDTable = sqlEngine.GetItems("cbtecabecera", "*", "NroComprobanteDesde = '" + FillWithCeros(txtNroComprobante.Text) + "' and PuntoVenta = '" + ddlSucursalCAE.SelectedValue + "' and TipoComprobante = '" + ddlTipoComprobanteCAE.SelectedValue + "'", 0);

                                //if (returnDTable.Rows.Count > 0)
                                //{
                                //    if (returnDTable.Rows[0]["BatchUniqueId"].ToString() != string.Empty)
                                //    {
                                //        wsfe.FECabeceraRequest objFECabeceraRequest = new wsfe.FECabeceraRequest();
                                //        objFECabeceraRequest.cantidadreg = 0;
                                //        objFECabeceraRequest.id = Convert.ToInt64(returnDTable.Rows[0]["BatchUniqueId"].ToString());
                                //        objFECabeceraRequest.presta_serv = 0;

                                //        wsfe.FEDetalleRequest[] aObjFEDetalleRequest = new wsfe.FEDetalleRequest[1];

                                //        wsfe.FEDetalleRequest objFEDetalleRequest = new wsfe.FEDetalleRequest();
                                //        objFEDetalleRequest.tipo_doc = Convert.ToInt16(returnDTable.Rows[0]["CompradorCodigoDocumento"]);
                                //        objFEDetalleRequest.nro_doc = (long)Convert.ToDouble(returnDTable.Rows[0]["CompradorNroDocumento"]);
                                //        objFEDetalleRequest.tipo_cbte = Convert.ToInt16(returnDTable.Rows[0]["TipoComprobante"]);
                                //        objFEDetalleRequest.punto_vta = Convert.ToInt16(returnDTable.Rows[0]["PuntoVenta"]);
                                //        objFEDetalleRequest.cbt_desde = (long)Convert.ToDouble(returnDTable.Rows[0]["NroComprobanteDesde"]);
                                //        objFEDetalleRequest.cbt_hasta = (long)Convert.ToDouble(returnDTable.Rows[0]["NroComprobanteHasta"]);
                                //        objFEDetalleRequest.imp_total = Convert.ToDouble(returnDTable.Rows[0]["Importe"]);
                                //        objFEDetalleRequest.imp_tot_conc = Convert.ToDouble(returnDTable.Rows[0]["ImporteNoGravado"]);
                                //        objFEDetalleRequest.imp_neto = Convert.ToDouble(returnDTable.Rows[0]["ImporteGravado"]);
                                //        objFEDetalleRequest.impto_liq = Convert.ToDouble(returnDTable.Rows[0]["ImporteImpuestoLiquidado"]);
                                //        objFEDetalleRequest.impto_liq_rni = Convert.ToDouble(returnDTable.Rows[0]["ImporteRNI_Percepcion"]);
                                //        objFEDetalleRequest.imp_op_ex = Convert.ToDouble(returnDTable.Rows[0]["ImporteExento"]);

                                //        // Las fechas deben venir en formato "YYYY-MM-DD"
                                //        objFEDetalleRequest.fecha_cbte = Convert.ToDateTime(returnDTable.Rows[0]["FechaComprobante"]).ToString("yyyyMMdd");
                                //        objFEDetalleRequest.fecha_serv_desde = Convert.ToDateTime(returnDTable.Rows[0]["FechaDesdeServicioFacturado"]).ToString("yyyyMMdd");
                                //        objFEDetalleRequest.fecha_serv_hasta = Convert.ToDateTime(returnDTable.Rows[0]["FechaHastaServicioFacturado"]).ToString("yyyyMMdd");
                                //        objFEDetalleRequest.fecha_venc_pago = Convert.ToDateTime(returnDTable.Rows[0]["FechaVencimientoPago"]).ToString("yyyyMMdd");
                                //        aObjFEDetalleRequest[0] = objFEDetalleRequest;

                                //        objFERequest.Fecr = objFECabeceraRequest;
                                //        objFERequest.Fedr = aObjFEDetalleRequest;

                                //        feResponse = feService.FEAutRequest(objFEAuthRequest, objFERequest);

                                //        if (feResponse.FedResp != null && feResponse.FedResp[0].cae != null)
                                //        {
                                //            lblCAE.Text = feResponse.FedResp[0].cae;
                                //            lblVto.Text = feResponse.FedResp[0].fecha_vto; //.Substring(6, 2) + "/" + feResponse.FecResp.fecha_cae.Substring(4, 2) + "/" + feResponse.FecResp.fecha_cae.Substring(0, 4); ;
                                //        }
                                //        else
                                //        {
                                //            lblCAE.Text = "Comprobante inexistente.";
                                //            lblVto.Text = "XX/XX/XXXX";
                                //        }
                                //    }
                                //    else
                                //    {
                                //        lblCAE.Text = "Comprobante sin BatchUniqueId.";
                                //        lblVto.Text = "XX/XX/XXXX";
                                //    }
                                //}
                                //else
                                //{
                                //    lblCAE.Text = "Comprobante inexistente.";
                                //    lblVto.Text = "XX/XX/XXXX";
                                //}
                            }
                        }
                        else
                        {
                            lblNumCbte.Text = "XXXXXXXX";
                            Page.ClientScript.RegisterStartupScript(this.GetType(), "Popup", "alert('Error de login con AFIP, vuelva a intentar la operacion en unos minutos.')", true);
                        }
                        break;

                    case "19":
                    case "20":
                    case "21":

                        lblErrorMessages.Text = "";
                        if (afipConnFex.ConnectionErrorDescription == string.Empty)
                        {
                            //si es bienes y servicios hay que reprocesar para obtener CAE, lo busco en la base
                            returnDTable = sqlEngine.GetItems("cbtecabecera", "*", "NroComprobanteDesde = '" + FillWithCeros(txtNroComprobante.Text) + "' and PuntoVenta = '" + ddlSucursalCAE.SelectedValue + "' and TipoComprobante = '" + ddlTipoComprobanteCAE.SelectedValue + "' and BatchUniqueId IS NOT NULL", 0);

                            objFEXAuthRequest.Cuit = afipConnFex.Cuit;
                            objFEXAuthRequest.Sign = afipConnFex.Sign;
                            objFEXAuthRequest.Token = afipConnFex.Token;

                            if (returnDTable.Rows.Count > 0)
                            {
                                if (returnDTable.Rows[0]["BatchUniqueId"].ToString() != string.Empty)
                                {
                                    objFEXRequest.Id = (long)Convert.ToDouble(returnDTable.Rows[0]["BatchUniqueId"]);
                                    objFEXRequest.Tipo_cbte = Convert.ToInt16(returnDTable.Rows[0]["TipoComprobante"]);
                                    objFEXRequest.Punto_vta = Convert.ToInt16(returnDTable.Rows[0]["PuntoVenta"]);
                                    objFEXRequest.Cbte_nro = (long)Convert.ToDouble(returnDTable.Rows[0]["NroComprobanteDesde"]);
                                    objFEXRequest.Tipo_expo = Convert.ToInt16(returnDTable.Rows[0]["TipoExportacion"]);
                                    objFEXRequest.Permiso_existente = returnDTable.Rows[0]["PermisoExistente"].ToString();
                                    objFEXRequest.Dst_cmp = Convert.ToInt16(sqlEngine.ObtenerEquivalencia("EquivAFIPPais", ddlEmpresa.SelectedItem.Value, returnDTable.Rows[0]["PaisComprador"].ToString()));
                                    objFEXRequest.Cliente = returnDTable.Rows[0]["CompradorRazonSocial"].ToString();
                                    objFEXRequest.Domicilio_cliente = returnDTable.Rows[0]["CompradorDireccion"].ToString();
                                    objFEXRequest.Moneda_Id = returnDTable.Rows[0]["CodigoMoneda"].ToString();
                                    objFEXRequest.Moneda_ctz = Convert.ToDouble(returnDTable.Rows[0]["TasaCambio"]);
                                    objFEXRequest.Imp_total = Convert.ToDouble(returnDTable.Rows[0]["ImporteMonedaFacturacion"]);
                                    objFEXRequest.Idioma_cbte = Convert.ToInt16(returnDTable.Rows[0]["Idioma"]);
                                    objFEXRequest.Id_impositivo = returnDTable.Rows[0]["CompradorNroDocumento"].ToString();
                                    objFEXRequest.Fecha_cbte = Convert.ToDateTime(returnDTable.Rows[0]["FechaComprobante"]).ToString("yyyyMMdd");
                                    objFEXRequest.Forma_pago = returnDTable.Rows[0]["FormaPagoDescrip"].ToString();
                                    objFEXRequest.Obs = returnDTable.Rows[0]["Observaciones"].ToString();
                                    objFEXRequest.Obs_comerciales = returnDTable.Rows[0]["ObservacionesComerciales"].ToString();
                                    objFEXRequest.Incoterms = returnDTable.Rows[0]["IncoTerms"].ToString();

                                    fexResponse = fexService.FEXAuthorize(objFEXAuthRequest, objFEXRequest);

                                    if (fexResponse.FEXResultAuth != null && fexResponse.FEXResultAuth.Cae != null)
                                    {
                                        lblCAE.Text = fexResponse.FEXResultAuth.Cae;
                                        lblVto.Text = fexResponse.FEXResultAuth.Fch_venc_Cae;//.Substring(6, 2) + "/" + fexResponse.FEXResultAuth.Fch_venc_Cae.Substring(4, 2) + "/" + fexResponse.FEXResultAuth.Fch_venc_Cae.Substring(0, 4);
                                    }
                                    else
                                    {
                                        lblCAE.Text = "Comprobante inexistente.";
                                        lblVto.Text = "XX/XX/XXXX";
                                    }
                                }
                                else
                                {
                                    lblCAE.Text = "Comprobante sin BatchUniqueId.";
                                    lblVto.Text = "XX/XX/XXXX";
                                }
                            }
                            else
                            {
                                lblCAE.Text = "Comprobante inexistente.";
                                lblVto.Text = "XX/XX/XXXX";
                            }
                        }
                        else
                        {
                            lblNumCbte.Text = "XXXXXXXX";
                            Page.ClientScript.RegisterStartupScript(this.GetType(), "Popup", "alert('Error de login con AFIP, vuelva a intentar la operacion en unos minutos.')", true);
                        }

                        break;
                }
                sqlEngine.Close();
            }
            catch (Exception ex)
            {
                lblNumCbte.Text = "XXXXXXXX";
                lblErrorMessages.Text = "Error: " + ex.Message;
            }
        }
Пример #2
0
        //TODO: correr en otro thread o utilizar updatepanel para mostrar barra de estado
        protected void CheckAfipFeService(Settings oSettings)
        {
            try
            {
                wsfe.Service afipFeService = new wsfe.Service();
                afipFeService.Url = oSettings.UrlAFIPwsfe;

                wsfe.DummyResponse dumResp = afipFeService.FEDummy();

                if (dumResp.AppServer == "OK" && dumResp.AuthServer == "OK" && dumResp.DbServer == "OK")
                {
                    lblBienes.ForeColor = System.Drawing.Color.Green;
                    lblBienes.Text = "OK";
                }
                else
                {
                    lblBienes.ForeColor = System.Drawing.Color.Red;
                    lblBienes.Text = "ERROR";
                }
            }
            catch
            {
                lblBienes.ForeColor = System.Drawing.Color.Red;
                lblBienes.Text = "ERROR";
            }
        }
Пример #3
0
        public string ProcesarLoteFacturasBienesServicios(string EmpresaID, string xmlDocument)
        {
            #region Inicialización

            Settings oSettings = new Settings(EmpresaID);

            wsfe.Service afipFeService = new wsfe.Service();
            afipFeService.Url = oSettings.UrlAFIPwsfe;

            wsfe.FEAuthRequest afipObjFEAuthRequest = new wsfe.FEAuthRequest();
            wsfe.CbteTipo afipObjFELastCMType = new wsfe.CbteTipo();
            wsfe.FECAEResponse feResponse = new wsfe.FECAEResponse();

            ResponseBatch batchResponse = new ResponseBatch();
            RequestBatch loteDocs = new RequestBatch();

            string url = oSettings.UrlFEWebService;
            string SQLID = "0";
            string estadoDocumento = string.Empty;
            string cae = string.Empty;
            string FechaVencimiento = string.Empty;
            string strEquivalenciaErrorFields = string.Empty;

            bool bRegistrarInicio = false;
            bool bEquivalenciaError = false;

            //Cargar el lote recibido
            loteDocs.LoadXMLString(xmlDocument);

            #endregion

            #region Registrar Inicio

            try
            {
                bRegistrarInicio = sqlEngine.LogBatchStart(ref loteDocs);

                SQLID = loteDocs.RequestHeaders[0].SQLID;

                //DEBUG LINE
                if (Convert.ToBoolean( oSettings.ActivarDebug ))
                    Utils.Utils.DebugLine(Utils.Utils.SerializeObject(loteDocs), oSettings.PathDebug + "\\" + SQLID + "-P1.RequestBatch-" + DateTime.Now.Hour.ToString("00") + DateTime.Now.Minute.ToString("00") + DateTime.Now.Second.ToString("00") + DateTime.Now.Millisecond.ToString("000") + ".xml");
            }
            catch (Exception ex)
            {
                sqlEngine.LogError(SQLID, "0", "ProcesarLoteFacturasBienesServicios", ex.Message);
                bRegistrarInicio = false;
            }

            #endregion

            //Si pudo crear el registro en la base continuo
            if (bRegistrarInicio)
            {
                #region Verificar Login con AFIP

                AfipConnection afipConn = new AfipConnection("wsfe", oSettings);
                if (afipConn.ConnectionErrorDescription == string.Empty)
                {
                    //Inicializo el objeto AuthRequest de la Afip
                    afipObjFEAuthRequest.Cuit = afipConn.Cuit;
                    afipObjFEAuthRequest.Sign = afipConn.Sign;
                    afipObjFEAuthRequest.Token = afipConn.Token;
                }
                else
                {
                    try
                    {
                        sqlEngine.LogError(SQLID, "0", "AfipConnection", afipConn.ConnectionErrorDescription);
                        sqlEngine.LogBatchEnd(SQLID, "Error", cae, FechaVencimiento);
                    }
                    catch (Exception ex)
                    {
                        sqlEngine.LogError(SQLID, "0", "FEService-AFIP Login", "Error: " + ex.Message);
                    }
                }

                AfipFE afipFE = new AfipFE(ref afipFeService, ref afipObjFEAuthRequest, ref afipObjFELastCMType);

                #endregion

                if (afipConn.ConnectionErrorDescription == string.Empty)
                {
                    #region Buscar Equivalencias

                    bEquivalenciaError = BuscarEquivalencias(ref loteDocs, oSettings, ref strEquivalenciaErrorFields);

                    #endregion

                    //Si no hay errores de equivalencia continuo
                    if (!bEquivalenciaError)
                    {
                        #region Hacer el pedido a AFIP

                        try
                        {
                            if (afipConn.IsConnected)
                            {
                                feResponse = afipFE.FEAuthRequest(loteDocs, oSettings);

                                //DEBUG LINE
                                if (Convert.ToBoolean(oSettings.ActivarDebug))
                                    Utils.Utils.DebugLine(Utils.Utils.SerializeObject(feResponse), oSettings.PathDebug + "\\" + SQLID + "-P3.FEResponse-" + DateTime.Now.Hour.ToString("00") + DateTime.Now.Minute.ToString("00") + DateTime.Now.Second.ToString("00") + DateTime.Now.Millisecond.ToString("000") + ".xml");
                            }
                            else
                            {
                                sqlEngine.LogError(SQLID, "0", "Respuesta AFIP", "Sin Conexion. Descripcion: " + afipConn.ConnectionErrorDescription);
                                feResponse.Errors = new wsfe.Err[1];
                                feResponse.Errors[0] = new wsfe.Err();
                                feResponse.Errors[0].Code = 0;
                                feResponse.Errors[0].Msg = afipConn.ConnectionErrorDescription;
                            }
                        }
                        catch (Exception ex)
                        {
                            sqlEngine.LogError(SQLID, "0", "Respuesta AFIP", "Error: " + ex.Message);
                        }

                        #endregion
                    }
                }

                #region Armar y devolver respuesta

                //Armar info del lote
                if (feResponse.FeCabResp != null)
                {
                    batchResponse.BatchUniqueId = loteDocs.BatchUniqueId;
                    batchResponse.CUITInformante = feResponse.FeCabResp.Cuit.ToString();
                    batchResponse.FechaCAE = feResponse.FeCabResp.FchProceso;
                    batchResponse.CantidadComprobantes = feResponse.FeCabResp.CantReg.ToString();
                    batchResponse.Resultado = feResponse.FeCabResp.Resultado;

                    batchResponse.Reproceso = feResponse.FeCabResp.Reproceso;

                    if (feResponse.Errors != null && feResponse.Errors.Length > 0 && feResponse.Errors[0] != null)
                    {
                        batchResponse.CodigoError = feResponse.Errors[0].Code.ToString();
                        batchResponse.MensajeError = feResponse.Errors[0].Msg.ToString();
                    }
                }
                else
                {
                    batchResponse.BatchUniqueId = "0";
                    batchResponse.Resultado = "R";
                    batchResponse.CantidadComprobantes = loteDocs.CantidadComprobantes;

                    if (feResponse.Errors != null && feResponse.Errors.Length > 0 && feResponse.Errors[0] != null)
                    {
                        batchResponse.CodigoError = feResponse.Errors[0].Code.ToString();
                        batchResponse.MensajeError = feResponse.Errors[0].Msg.ToString();
                    }
                    else if(afipConn.ConnectionErrorDescription != string.Empty)
                    {
                        batchResponse.Resultado = "E";
                        batchResponse.CodigoError = "669";
                        batchResponse.MensajeError = afipConn.ConnectionErrorDescription;
                    }
                    else if (bEquivalenciaError)
                    {
                        batchResponse.Resultado = "E";
                        batchResponse.CodigoError = "Equivalencias";
                        batchResponse.MensajeError = "No se encontró equivalencia con AFIP. Campos: " + strEquivalenciaErrorFields;
                    }
                }

                //Armar info de los documentos
                if (feResponse.FeDetResp != null)
                {
                    for (int i = 0; i < feResponse.FeDetResp.Length; i++)
                    {
                        ResponseHeader thisHeader = new ResponseHeader();
                        if (feResponse.FeDetResp[i].CAE == "NULL")
                            feResponse.FeDetResp[i].CAE = "";
                        thisHeader.CAE = feResponse.FeDetResp[i].CAE;
                        thisHeader.CodigoDocumentoComprador = feResponse.FeDetResp[i].DocTipo.ToString();
                        thisHeader.NroDocumentoComprador = feResponse.FeDetResp[i].DocNro.ToString();
                        thisHeader.TipoComprobante = feResponse.FeCabResp.CbteTipo.ToString();
                        thisHeader.NroComprobanteDesde = feResponse.FeDetResp[i].CbteDesde.ToString();
                        thisHeader.NroComprobanteHasta = feResponse.FeDetResp[i].CbteHasta.ToString();
                        thisHeader.Importe = loteDocs.RequestHeaders[i].Importe;
                        thisHeader.ImporteNoGravado = loteDocs.RequestHeaders[i].ImporteNoGravado;
                        thisHeader.ImporteGravado = loteDocs.RequestHeaders[i].ImporteGravado;
                        thisHeader.ImporteImpuestoLiquidado = loteDocs.RequestHeaders[i].ImporteImpuestoLiquidado;
                        thisHeader.ImporteRNI_Percepcion = loteDocs.RequestHeaders[i].ImporteRNI_Percepcion;
                        thisHeader.ImporteExento = loteDocs.RequestHeaders[i].ImporteExento;
                        thisHeader.Resultado = feResponse.FeDetResp[i].Resultado;

                        thisHeader.FechaComprobante = feResponse.FeDetResp[i].CbteFch;
                        thisHeader.FechaVencimiento = feResponse.FeDetResp[i].CAEFchVto;

                        thisHeader.PuntoVenta = loteDocs.RequestHeaders[i].PuntoVenta;
                        thisHeader.LetraComprobante = loteDocs.RequestHeaders[i].LetraComprobante;
                        thisHeader.NroInternoERP = loteDocs.RequestHeaders[i].NroInternoERP;
                        thisHeader.SQLID = loteDocs.RequestHeaders[i].SQLID;

                        wsfe.FERecuperaLastCbteResponse feLastCMPRespose = afipFE.FERecuperaUltimoComprobante(thisHeader.TipoComprobante, thisHeader.PuntoVenta);
                        thisHeader.UltimoNroComprobanteUsado = feLastCMPRespose.CbteNro.ToString();

                        if (feResponse.Errors != null && feResponse.Errors.Length > 0 && feResponse.Errors[0] != null)
                        {
                            thisHeader.Motivo = feResponse.Errors[0].Code.ToString();
                            thisHeader.MotivoDescripcion = feResponse.Errors[0].Msg;

                            if (thisHeader.Motivo == "10016")
                                thisHeader.MotivoDescripcion += " UltimoNroComprobanteUsado: " + thisHeader.UltimoNroComprobanteUsado;
                        }

                        //NUEVO DESDE VERSION 1 DE AFIP
                        if (feResponse.FeDetResp[i].Observaciones != null)
                        {
                            foreach (wsfe.Obs wsObs in feResponse.FeDetResp[i].Observaciones)
                            {
                                ResponseHeaderObs resObs = new ResponseHeaderObs();

                                resObs.Codigo = wsObs.Code.ToString();
                                resObs.Msg = wsObs.Msg;

                                if (resObs.Codigo == "10016")
                                    resObs.Msg += " UltimoNroComprobanteUsado: " + thisHeader.UltimoNroComprobanteUsado;

                                thisHeader.Observaciones.Add(resObs);
                            }
                        }

                        thisHeader.FechaDesdeServicioFacturado = feResponse.FeDetResp[i].CbteDesde.ToString();
                        thisHeader.FechaHastaServicioFacturado = feResponse.FeDetResp[i].CbteHasta.ToString();
                        thisHeader.FechaVencimientoPago = loteDocs.RequestHeaders[i].FechaVencimientoPago;

                        batchResponse.ResponseHeaders.Add(thisHeader);
                    }
                }
                else
                {
                    for (int i = 0; i < loteDocs.RequestHeaders.Count; i++)
                    {
                        ResponseHeader thisHeader = new ResponseHeader();

                        thisHeader.CAE = "";
                        thisHeader.TipoComprobante = loteDocs.RequestHeaders[i].TipoComprobante;
                        thisHeader.PuntoVenta = loteDocs.RequestHeaders[i].PuntoVenta;
                        thisHeader.NroComprobanteDesde = loteDocs.RequestHeaders[i].NroComprobanteDesde;
                        thisHeader.NroComprobanteHasta = loteDocs.RequestHeaders[i].NroComprobanteHasta;
                        thisHeader.Importe = loteDocs.RequestHeaders[i].Importe;
                        thisHeader.ImporteNoGravado = loteDocs.RequestHeaders[i].ImporteNoGravado;
                        thisHeader.ImporteGravado = loteDocs.RequestHeaders[i].ImporteGravado;
                        thisHeader.ImporteImpuestoLiquidado = loteDocs.RequestHeaders[i].ImporteImpuestoLiquidado;
                        thisHeader.ImporteRNI_Percepcion = loteDocs.RequestHeaders[i].ImporteRNI_Percepcion;
                        thisHeader.ImporteExento = loteDocs.RequestHeaders[i].ImporteExento;
                        thisHeader.FechaComprobante = loteDocs.RequestHeaders[i].FechaComprobante;
                        thisHeader.Motivo = batchResponse.CodigoError;
                        thisHeader.MotivoDescripcion = batchResponse.MensajeError;
                        thisHeader.FechaDesdeServicioFacturado = loteDocs.RequestHeaders[i].FechaDesdeServicioFacturado;
                        thisHeader.FechaHastaServicioFacturado = loteDocs.RequestHeaders[i].FechaHastaServicioFacturado;
                        thisHeader.FechaVencimientoPago = loteDocs.RequestHeaders[i].FechaVencimientoPago;
                        thisHeader.NroInternoERP = loteDocs.RequestHeaders[i].NroInternoERP;
                        thisHeader.LetraComprobante = loteDocs.RequestHeaders[i].LetraComprobante;
                        thisHeader.SQLID = loteDocs.RequestHeaders[i].SQLID;

                        batchResponse.ResponseHeaders.Add(thisHeader);
                    }
                }

                //DEBUG LINE
                if (Convert.ToBoolean(oSettings.ActivarDebug))
                    Utils.Utils.DebugLine(Utils.Utils.SerializeObject(batchResponse), oSettings.PathDebug + "\\" + SQLID + "-P4.ResponseBatch-" + DateTime.Now.Hour.ToString("00") + DateTime.Now.Minute.ToString("00") + DateTime.Now.Second.ToString("00") + DateTime.Now.Millisecond.ToString("000") + ".xml");

                #endregion

                #region Registrar Fin

                //TODO: VERIFICAR ESTA PARTE CAPTURA MAL LOS ERRORES
                switch (batchResponse.Resultado)
                {
                    case "A":
                        estadoDocumento = "Aceptado";
                        cae = batchResponse.ResponseHeaders[0].CAE;
                        FechaVencimiento = batchResponse.ResponseHeaders[0].FechaVencimiento;

                        break;
                    case "R":
                        estadoDocumento = "Rechazado";
                        cae = "";
                        FechaVencimiento = "";
                        break;

                    default:
                        if (batchResponse.Reproceso.ToLower() == "s")
                        {
                            estadoDocumento = "Rechazado";
                            cae = batchResponse.ResponseHeaders[0].CAE;
                            FechaVencimiento = batchResponse.ResponseHeaders[0].FechaVencimiento;
                        }
                        else
                        {
                            estadoDocumento = "Error";
                            cae = "";
                            FechaVencimiento = "";
                        }
                        break;
                }

                try
                {
                    sqlEngine.LogBatchEnd(SQLID, estadoDocumento, cae, FechaVencimiento);
                }
                catch (Exception ex)
                {
                    sqlEngine.LogError(SQLID, "0", "Respuesta Recibida", "Error: " + ex.Message);
                }

                #endregion
            }

            return batchResponse.GetXMLString();
        }
Пример #4
0
        protected void btnObtenerNum_Click(object sender, EventArgs e)
        {
            Settings oSettings = new Settings(ddlEmpresa.SelectedItem.Value);

            AfipConnection afipConnFex = new AfipConnection("wsfex", oSettings);
            AfipConnection afipConnFe = new AfipConnection("wsfe", oSettings);

            wsfex.Service afipFexService = new wsfex.Service();
            afipFexService.Url = oSettings.UrlAFIPwsfex;

            wsfe.Service feService = new wsfe.Service();
            feService.Url = oSettings.UrlAFIPwsfe;

            wsfex.ClsFEX_LastCMP afipLastEx = new wsfex.ClsFEX_LastCMP();

            wsfe.FEAuthRequest afipObjFEAuthRequest = new wsfe.FEAuthRequest();

            switch (ddlTipoComprobante.SelectedValue)
            {
                case "1":
                case "2":
                case "3":
                case "6":
                case "7":
                case "8":
                    try
                    {
                        lblErrorMessages.Text = "";
                        if (afipConnFe.ConnectionErrorDescription == string.Empty)
                        {
                            //Inicializo el objeto AuthRequest de la Afip
                            afipObjFEAuthRequest.Cuit = afipConnFe.Cuit;
                            afipObjFEAuthRequest.Sign = afipConnFe.Sign;
                            afipObjFEAuthRequest.Token = afipConnFe.Token;

                            wsfe.FERecuperaLastCbteResponse objFERecuperaLastCMPResponse = new wsfe.FERecuperaLastCbteResponse();

                            objFERecuperaLastCMPResponse = feService.FECompUltimoAutorizado(afipObjFEAuthRequest, Convert.ToInt16(ddlSucursales.SelectedValue), Convert.ToInt16(ddlTipoComprobante.SelectedValue));

                            lblNumCbte.Text = (objFERecuperaLastCMPResponse.CbteNro + 1).ToString();
                            lblNumCbte.Text = FillWithCeros(lblNumCbte.Text);
                        }
                        else
                        {
                            lblNumCbte.Text = "XXXXXXXX";
                            lblErrorMessages.Text = "Error de login con AFIP.<br>Error: " + afipConnFe.ConnectionErrorDescription;
                        }
                    }
                    catch (Exception ex)
                    {
                        lblNumCbte.Text = "XXXXXXXX";
                        lblErrorMessages.Text = "Error: " + ex.Message;
                    }

                    //wsfe.FETributoResponse trires = feService.FEParamGetTiposTributos(afipObjFEAuthRequest);
                    break;

                case "19":
                case "20":
                case "21":
                    try
                    {
                        lblErrorMessages.Text = "";
                        if (afipConnFex.ConnectionErrorDescription == string.Empty)
                        {
                            //Inicializo el objeto AuthRequest de la Afip
                            afipLastEx.Cuit = afipConnFex.Cuit;
                            afipLastEx.Sign = afipConnFex.Sign;
                            afipLastEx.Token = afipConnFex.Token;
                            afipLastEx.Pto_venta = Convert.ToInt16(ddlSucursales.SelectedItem.Text);
                            afipLastEx.Tipo_cbte = Convert.ToInt16(ddlTipoComprobante.SelectedItem.Value);

                            wsfex.FEXResponseLast_CMP lastResp = afipFexService.FEXGetLast_CMP(afipLastEx);

                            lblNumCbte.Text = (lastResp.FEXResult_LastCMP.Cbte_nro + 1).ToString();
                            lblNumCbte.Text = FillWithCeros(lblNumCbte.Text);
                        }
                        else
                        {
                            lblNumCbte.Text = "XXXXXXXX";
                            lblErrorMessages.Text = "Error de login con AFIP.<br>Error: " + afipConnFex.ConnectionErrorDescription;
                        }
                    }
                    catch (Exception ex)
                    {
                        lblNumCbte.Text = "XXXXXXXX";
                        lblErrorMessages.Text = "Error: " + ex.Message;
                    }

                    break;
            }
        }
Пример #5
0
 public AfipFE(ref wsfe.Service afipFeService, ref wsfe.FEAuthRequest afipObjFEAuthRequest, ref wsfe.CbteTipo afipObjFELastCMType)
 {
     feService = afipFeService;
     objFEAuthRequest = afipObjFEAuthRequest;
     objFELastCMType = afipObjFELastCMType;
 }