示例#1
0
 /// <remarks/>
 public void FECAESolicitarAsync(FEAuthRequest Auth, FECAERequest FeCAEReq, object userState) {
     if ((this.FECAESolicitarOperationCompleted == null)) {
         this.FECAESolicitarOperationCompleted = new System.Threading.SendOrPostCallback(this.OnFECAESolicitarOperationCompleted);
     }
     this.InvokeAsync("FECAESolicitar", new object[] {
                 Auth,
                 FeCAEReq}, this.FECAESolicitarOperationCompleted, userState);
 }
示例#2
0
 public FECAEResponse FECAESolicitar(FEAuthRequest Auth, FECAERequest FeCAEReq) {
     object[] results = this.Invoke("FECAESolicitar", new object[] {
                 Auth,
                 FeCAEReq});
     return ((FECAEResponse)(results[0]));
 }
示例#3
0
 /// <remarks/>
 public void FECAESolicitarAsync(FEAuthRequest Auth, FECAERequest FeCAEReq) {
     this.FECAESolicitarAsync(Auth, FeCAEReq, null);
 }
示例#4
0
        public static string EnviarAFIP(out string Cae, out string CaeFecVto, FeaEntidades.InterFacturas.lote_comprobantes lc, Entidades.Sesion Sesion)
        {
            try
            {
                Cae = "";
                CaeFecVto = "";
                LoginTicket ticket;
                ar.gov.afip.wsw.Service objWS;
                ar.gov.afip.wsfev1.Service objWSFEV1;
                CrearTicket(Sesion, out ticket, out objWS, out objWSFEV1);

                ar.gov.afip.wsfev1.FECAERequest objFERequest = new ar.gov.afip.wsfev1.FECAERequest();
                ar.gov.afip.wsfev1.FECAECabRequest objFECabeceraRequest = new ar.gov.afip.wsfev1.FECAECabRequest();
                int CantidadComprobantes = 1;
                objFECabeceraRequest.CantReg = CantidadComprobantes;
                objFECabeceraRequest.CbteTipo = lc.comprobante[0].cabecera.informacion_comprobante.tipo_de_comprobante;  //Comprobante.Codigo;
                objFECabeceraRequest.PtoVta = lc.cabecera_lote.punto_de_venta;
                objFERequest.FeCabReq = objFECabeceraRequest;

                ///* Obtengo última transacción y sumo 1 */
                //FEArn.ar.gov.afip.wsfev1.fe.FEUltNroResponse objFEUltNroResponse = new FEArn.ar.gov.afip.wsw.FEUltNroResponse();
                //objFEUltNroResponse = objWS.FEUltNroRequest(ticket.ObjAutorizacion);

                //Comprobante.IdTransaccion = objFEUltNroResponse.nro.value + 1;
                //objFECabeceraRequest.id = Comprobante.IdTransaccion;
                //objFECabeceraRequest.presta_serv = Convert.ToInt32(Comprobante.Presta_serv);
                //objFERequest.Fecr = objFECabeceraRequest;

                //FEArn.ar.gov.afip.wsw.FEDetalleRequest[] arrayFEDetalleRequest = new FEArn.ar.gov.afip.wsw.FEDetalleRequest[CantidadComprobantes];
                ar.gov.afip.wsfev1.FECAEDetRequest[] arrayFEDetalleRequest = new ar.gov.afip.wsfev1.FECAEDetRequest[CantidadComprobantes];
                //FEArn.ar.gov.afip.wsw.FEDetalleRequest objFEDetalleRequest = new FEArn.ar.gov.afip.wsw.FEDetalleRequest();
                ar.gov.afip.wsfev1.FECAEDetRequest objFEDetalleRequest = new ar.gov.afip.wsfev1.FECAEDetRequest();

                ///* Obtengo último comprobante*/
                //FEArn.ar.gov.afip.wsw.FERecuperaLastCMPResponse objFERecuperaLastCMPResponse = new FEArn.ar.gov.afip.wsw.FERecuperaLastCMPResponse();
                ar.gov.afip.wsfev1.FERecuperaLastCbteResponse UltNro = new ar.gov.afip.wsfev1.FERecuperaLastCbteResponse();
                UltNro = objWSFEV1.FECompUltimoAutorizado(ticket.ObjAutorizacionfev1, lc.cabecera_lote.punto_de_venta, lc.comprobante[0].cabecera.informacion_comprobante.tipo_de_comprobante);
                //UltNro.CbteNro;

                ar.gov.afip.wsfev1.FETributoResponse arrayFETributoResponse = new ar.gov.afip.wsfev1.FETributoResponse();
                arrayFETributoResponse = objWSFEV1.FEParamGetTiposTributos(ticket.ObjAutorizacionfev1);

                //FEArn.ar.gov.afip.wsw.FELastCMPtype tipoComprobante = new FEArn.ar.gov.afip.wsw.FELastCMPtype();
                //tipoComprobante.PtoVta = Comprobante.PuntoVenta;
                //tipoComprobante.TipoCbte = Comprobante.Codigo;
                //objFERecuperaLastCMPResponse = objWS.FERecuperaLastCMPRequest(ticket.ObjAutorizacion, tipoComprobante);
                //Comprobante.IdComprobante = objFERecuperaLastCMPResponse.cbte_nro;

                objFEDetalleRequest.Concepto = lc.comprobante[0].cabecera.informacion_comprobante.codigo_concepto; //1-Productos  2-Servicios  3-Productos y Servicios
                objFEDetalleRequest.CbteFch = lc.comprobante[0].cabecera.informacion_comprobante.fecha_emision;             // Comprobante.Fecha_cbte.ToString("yyyyMMdd");
                if (lc.comprobante[0].cabecera.informacion_comprobante.codigo_concepto != 1)
                {
                    objFEDetalleRequest.FchServDesde = lc.comprobante[0].cabecera.informacion_comprobante.fecha_serv_desde;     // Comprobante.Fecha_serv_desde.ToString("yyyyMMdd");
                    objFEDetalleRequest.FchServHasta = lc.comprobante[0].cabecera.informacion_comprobante.fecha_serv_hasta;     // Comprobante.Fecha_serv_hasta.ToString("yyyyMMdd");
                    objFEDetalleRequest.FchVtoPago = lc.comprobante[0].cabecera.informacion_comprobante.fecha_vencimiento;      // Comprobante.Fecha_venc_pago.ToString("yyyyMMdd");
                }
                if (lc.comprobante[0].resumen.codigo_moneda == "PES")
                {
                    objFEDetalleRequest.ImpNeto = lc.comprobante[0].resumen.importe_total_neto_gravado;                         // Comprobante.Imp_neto;
                    objFEDetalleRequest.ImpOpEx = lc.comprobante[0].resumen.importe_operaciones_exentas;                        // Comprobante.Imp_op_ex;
                    objFEDetalleRequest.ImpTotConc = lc.comprobante[0].resumen.importe_total_concepto_no_gravado;               // Comprobante.Imp_tot_conc;
                    objFEDetalleRequest.ImpTotal = lc.comprobante[0].resumen.importe_total_factura;                             // Comprobante.Imp_total;
                    objFEDetalleRequest.ImpIVA = lc.comprobante[0].resumen.impuesto_liq;                                        // Comprobante.Impto_liq;
                    objFEDetalleRequest.impto_liq_rni = lc.comprobante[0].resumen.impuesto_liq_rni;
                }
                else if (lc.comprobante[0].resumen.codigo_moneda == "DOL")
                {
                    objFEDetalleRequest.ImpNeto = lc.comprobante[0].resumen.importes_moneda_origen.importe_total_neto_gravado;                         // Comprobante.Imp_neto;
                    objFEDetalleRequest.ImpOpEx = lc.comprobante[0].resumen.importes_moneda_origen.importe_operaciones_exentas;                        // Comprobante.Imp_op_ex;
                    objFEDetalleRequest.ImpTotConc = lc.comprobante[0].resumen.importes_moneda_origen.importe_total_concepto_no_gravado;               // Comprobante.Imp_tot_conc;
                    objFEDetalleRequest.ImpTotal = lc.comprobante[0].resumen.importes_moneda_origen.importe_total_factura;                             // Comprobante.Imp_total;
                    objFEDetalleRequest.ImpIVA = lc.comprobante[0].resumen.importes_moneda_origen.impuesto_liq;                                        // Comprobante.Impto_liq;
                    objFEDetalleRequest.impto_liq_rni = lc.comprobante[0].resumen.importes_moneda_origen.impuesto_liq_rni;
                }
                else
                {
                    throw new Exception("Moneda no permitida: " + lc.comprobante[0].resumen.codigo_moneda.ToString());
                }
                
                objFEDetalleRequest.DocNro = lc.comprobante[0].cabecera.informacion_comprador.nro_doc_identificatorio;      // Comprobante.Nro_doc;
                //objFEDetalleRequest.punto_vta = Comprobante.PuntoVenta;
                //objFEDetalleRequest.tipo_cbte = Comprobante.Codigo;
                objFEDetalleRequest.DocTipo = lc.comprobante[0].cabecera.informacion_comprador.codigo_doc_identificatorio;  // Comprobante.TipoDoc;
                objFEDetalleRequest.MonId = lc.comprobante[0].resumen.codigo_moneda;
                objFEDetalleRequest.MonCotiz = lc.comprobante[0].resumen.tipo_de_cambio;
                string TipoComp = lc.comprobante[0].cabecera.informacion_comprobante.tipo_de_comprobante.ToString();

                //Referencias
                if (lc.comprobante[0].cabecera.informacion_comprobante.referencias != null)
                {
                    if (lc.comprobante[0].cabecera.informacion_comprobante.referencias.Length > 0)
                    {
                        int CantReferenciasAFIP = 0;
                        for (int j = 0; j < lc.comprobante[0].cabecera.informacion_comprobante.referencias.Length; j++)
                        {
                            if (lc.comprobante[0].cabecera.informacion_comprobante.referencias[j] == null)
                            {
                                break;
                            }
                            if (lc.comprobante[0].cabecera.informacion_comprobante.referencias[j].tipo_comprobante_afip == "S")
                            {
                                CantReferenciasAFIP += 1;
                            }
                            
                        }
                        if (CantReferenciasAFIP != 0)
                        {
                            objFEDetalleRequest.CbtesAsoc = new ar.gov.afip.wsfev1.CbteAsoc[CantReferenciasAFIP];
                        }
                        CantReferenciasAFIP = 0;

                        for (int j = 0; j < lc.comprobante[0].cabecera.informacion_comprobante.referencias.Length; j++)
                        {
                            if (lc.comprobante[0].cabecera.informacion_comprobante.referencias[j] == null)
                            {
                                break;
                            }
                            if (lc.comprobante[0].cabecera.informacion_comprobante.referencias[j].tipo_comprobante_afip == "S")
                            {
                                objFEDetalleRequest.CbtesAsoc[CantReferenciasAFIP] = new ar.gov.afip.wsfev1.CbteAsoc();
                                objFEDetalleRequest.CbtesAsoc[CantReferenciasAFIP].Tipo = lc.comprobante[0].cabecera.informacion_comprobante.referencias[j].codigo_de_referencia;
                                objFEDetalleRequest.CbtesAsoc[CantReferenciasAFIP].PtoVta = Convert.ToInt32(lc.comprobante[0].cabecera.informacion_comprobante.referencias[j].dato_de_referencia.Substring(0, 4));
                                objFEDetalleRequest.CbtesAsoc[CantReferenciasAFIP].Nro = Convert.ToInt32(lc.comprobante[0].cabecera.informacion_comprobante.referencias[j].dato_de_referencia.Substring(5, 8));
                                CantReferenciasAFIP += 1;
                            }
                        }
                    }
                }

                //Impuestos
                double impTrib = 0;
                if (lc.comprobante[0].resumen.impuestos.Length > 0)
                {
                    if (lc.comprobante[0].resumen.impuestos[0] != null)
                    {
                        int CantTrib = 0;
                        int CantAlicIVA = 0;
                        for (int j = 0; j < lc.comprobante[0].resumen.impuestos.Length; j++)
                        {
                            if (lc.comprobante[0].resumen.impuestos[j].codigo_impuesto != 1)
                            {
                                CantTrib += 1;
                            }
                            else
                            {
                                CantAlicIVA += 1;
                            }
                        }
                        if (CantTrib != 0)
                        {
                            objFEDetalleRequest.Tributos = new ar.gov.afip.wsfev1.Tributo[CantTrib];
                        }
                        CantTrib = 0;
                        
                        ar.gov.afip.wsfev1.AlicIva[] ivas = new ar.gov.afip.wsfev1.AlicIva[CantAlicIVA];
                        CantAlicIVA = 0;
                        for (int j = 0; j < lc.comprobante[0].resumen.impuestos.Length; j++)
                        {

                            switch (lc.comprobante[0].resumen.impuestos[j].codigo_impuesto)
                            {
                                case 1:
                                    double baseImponible = 0;
                                    ivas[CantAlicIVA] = new ar.gov.afip.wsfev1.AlicIva();
                                    //No funciona por el redondeo.
                                    //"PES"
                                    //baseImponible += Math.Round((lc.comprobante[0].resumen.impuestos[j].importe_impuesto * 100) / lc.comprobante[0].resumen.impuestos[j].porcentaje_impuesto, 2);
                                    //"DOL"
                                    //baseImponible += Math.Round((lc.comprobante[0].resumen.impuestos[j].importe_impuesto_moneda_origen * 100) / lc.comprobante[0].resumen.impuestos[j].porcentaje_impuesto, 2);

                                    //Obtener o Calcular la base imponible
                                    if (lc.comprobante[0].resumen.codigo_moneda == "PES")
                                    {
                                        baseImponible = lc.comprobante[0].resumen.impuestos[j].base_imponible;
                                    }
                                    else
                                    {
                                        baseImponible = lc.comprobante[0].resumen.impuestos[j].base_imponible_moneda_origen;
                                    }
                                    if (baseImponible == 0)
                                    {
                                        baseImponible = CalcularBaseImponible(lc, lc.comprobante[0].resumen.impuestos[j].porcentaje_impuesto);
                                    }
                                    //Informar la base imponible y el código de impuesto según la alícuota.
                                    if (lc.comprobante[0].resumen.impuestos[j].porcentaje_impuesto == 0)
                                    {
                                        ivas[CantAlicIVA].BaseImp = baseImponible;
                                        ivas[CantAlicIVA].Id = 3;
                                    }
                                    if (lc.comprobante[0].resumen.impuestos[j].porcentaje_impuesto == 10.5)
                                    {
                                        ivas[CantAlicIVA].BaseImp = baseImponible;
                                        ivas[CantAlicIVA].Id = 4;
                                    }
                                    else if (lc.comprobante[0].resumen.impuestos[j].porcentaje_impuesto == 21)
                                    {
                                        ivas[CantAlicIVA].BaseImp = baseImponible;
                                        ivas[CantAlicIVA].Id = 5;
                                    }
                                    else if (lc.comprobante[0].resumen.impuestos[j].porcentaje_impuesto == 27)
                                    {
                                        ivas[CantAlicIVA].BaseImp = baseImponible;
                                        ivas[CantAlicIVA].Id = 6;
                                    }
                                    else if (lc.comprobante[0].resumen.impuestos[j].porcentaje_impuesto == 5)
                                    {
                                        ivas[CantAlicIVA].BaseImp = baseImponible;
                                        ivas[CantAlicIVA].Id = 8;
                                    }
                                    else if (lc.comprobante[0].resumen.impuestos[j].porcentaje_impuesto == 2.5)
                                    {
                                        
                                        ivas[CantAlicIVA].BaseImp = baseImponible;
                                        ivas[CantAlicIVA].Id = 9;
                                    }
                                    else
                                    {
                                        throw new Exception("Problemas para encontrar el código de la alícuota cuyo porcentaje es: " + lc.comprobante[0].resumen.impuestos[j].porcentaje_impuesto.ToString());
                                    }

                                    //Importe del impuesto
                                    if (lc.comprobante[0].resumen.codigo_moneda == "PES")
                                    {
                                        ivas[CantAlicIVA].Importe = Math.Round(lc.comprobante[0].resumen.impuestos[j].importe_impuesto, 2);
                                    }
                                    else
                                    {
                                        ivas[CantAlicIVA].Importe = Math.Round(lc.comprobante[0].resumen.impuestos[j].importe_impuesto_moneda_origen, 2);
                                    }
                                    CantAlicIVA += 1;
                                    break;
                                case 2:  //Internos
                                case 3:  //Otros
                                case 4:  //Nacionales
                                case 5:  //IB - Provinciales
                                case 6:  //Municipales
                                    objFEDetalleRequest.Tributos[CantTrib] = new ar.gov.afip.wsfev1.Tributo();
                                    objFEDetalleRequest.Tributos[CantTrib].Alic = lc.comprobante[0].resumen.impuestos[j].porcentaje_impuesto;
                                    objFEDetalleRequest.Tributos[CantTrib].BaseImp = 0;  //Math.Round((lc.comprobante[0].resumen.impuestos[j].importe_impuesto * 100) / lc.comprobante[0].resumen.impuestos[j].porcentaje_impuesto, 2);
                                    if (lc.comprobante[0].resumen.impuestos[j].codigo_impuesto == 2)
                                    {
                                        objFEDetalleRequest.Tributos[CantTrib].Id = 4;  //"AFIP - Impuestos Internos"
                                    }
                                    else if (lc.comprobante[0].resumen.impuestos[j].codigo_impuesto == 3)
                                    {
                                        objFEDetalleRequest.Tributos[CantTrib].Id = 99; //"AFIP - Otro"
                                    }
                                    else if (lc.comprobante[0].resumen.impuestos[j].codigo_impuesto == 4)
                                    {
                                        objFEDetalleRequest.Tributos[CantTrib].Id = 1;  //"AFIP - Impuestos nacionales"
                                    }
                                    else if (lc.comprobante[0].resumen.impuestos[j].codigo_impuesto == 5)
                                    {
                                        objFEDetalleRequest.Tributos[CantTrib].Id = 2;  //"AFIP - Impuestos provinciales"
                                    }
                                    else if (lc.comprobante[0].resumen.impuestos[j].codigo_impuesto == 6)
                                    {
                                        objFEDetalleRequest.Tributos[CantTrib].Id = 3;  //"AFIP - Impuestos municipales"
                                    }
                                    if (lc.comprobante[0].resumen.codigo_moneda == "PES")
                                    {
                                        objFEDetalleRequest.Tributos[CantTrib].Importe = Math.Round(lc.comprobante[0].resumen.impuestos[j].importe_impuesto, 2);
                                    }
                                    else
                                    {
                                        objFEDetalleRequest.Tributos[CantTrib].Importe = Math.Round(lc.comprobante[0].resumen.impuestos[j].importe_impuesto_moneda_origen, 2);
                                    }
                                    objFEDetalleRequest.Tributos[CantTrib].Desc = lc.comprobante[0].resumen.impuestos[j].descripcion;
                                    if (lc.comprobante[0].resumen.codigo_moneda == "PES")
                                    {
                                        impTrib += Math.Round(lc.comprobante[0].resumen.impuestos[j].importe_impuesto, 2);
                                    }
                                    else
                                    {
                                        impTrib += Math.Round(lc.comprobante[0].resumen.impuestos[j].importe_impuesto_moneda_origen, 2);
                                    }
                                    CantTrib += 1;
                                    break;
                                default:
                                    throw new Exception("Problemas para enviar el comprobante, código de impuesto incorrecto o inexistente. Código: " + lc.comprobante[0].resumen.impuestos[j].codigo_impuesto.ToString());
                            }
                        }
                        if (ivas != null && ivas.Length > 0)
                        {
                            objFEDetalleRequest.Iva = ivas;
                        }
                    }
                }
                objFEDetalleRequest.ImpTrib = impTrib; //Total de tributos;
                
                //objFEDetalleRequest.Tributos

                arrayFEDetalleRequest[0] = objFEDetalleRequest;
                //for (int c = 0; c < CantidadComprobantes; c++)
                //{
                    //Comprobante.IdComprobante = Comprobante.IdComprobante + 1;
                    objFEDetalleRequest.CbteDesde = lc.comprobante[0].cabecera.informacion_comprobante.numero_comprobante;  //Comprobante.IdComprobante;
                    objFEDetalleRequest.CbteHasta = lc.comprobante[0].cabecera.informacion_comprobante.numero_comprobante;  //Comprobante.IdComprobante;
                    arrayFEDetalleRequest[0] = objFEDetalleRequest;
                //}
                objFERequest.FeDetReq = arrayFEDetalleRequest;

                string loteXML = "";
                SerializarC(out loteXML, objFERequest);
                try
                {
                    Funciones.GrabarLogTexto("Consultar.txt", loteXML);
                }
                catch
                { 
                }

                ar.gov.afip.wsfev1.FECAEResponse objFEResponse = new ar.gov.afip.wsfev1.FECAEResponse();
                objFEResponse = objWSFEV1.FECAESolicitar(ticket.ObjAutorizacionfev1, objFERequest);

                string respuesta = "";
                if (objFEResponse.Errors == null)
                {
                    //if (objFEResponse.FeCabResp.Resultado == "A")
                    //{
                    for (int i = 0; i < objFEResponse.FeDetResp.Length; i++)
                    {
                        respuesta += "Resultado: " + objFEResponse.FeDetResp[i].Resultado + "\\n";
                        if (objFEResponse.FeDetResp[i].Observaciones != null)
                        {
                            for (int j = 0; j < objFEResponse.FeDetResp[i].Observaciones.Length; j++)
                            {
                                respuesta += objFEResponse.FeDetResp[i].Observaciones[j].Code.ToString() + "-" + objFEResponse.FeDetResp[i].Observaciones[j].Msg + "\\n";
                            }
                        }
                        respuesta += "CAE: " + objFEResponse.FeDetResp[i].CAE;
                        Cae = objFEResponse.FeDetResp[i].CAE;
                        CaeFecVto = objFEResponse.FeDetResp[i].CAEFchVto;
                    }
                    //}
                }
                else
                {
                    for (int i = 0; i < objFEResponse.Errors.Length; i++)
                    {
                        respuesta += objFEResponse.Errors[i].Code + "-" + objFEResponse.Errors[i].Msg + ".\\n ";
                        if (objFEResponse.Errors[i].Code == 10016)
                        {
                            try
                            {
                                respuesta += "Ultimo nro. de comprobante enviado: " + UltNro.CbteNro + ".\\n";
                            }
                            catch
                            {
                            }
                        }
                    }
                }
                return respuesta;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }