예제 #1
0
        public static string EnviarAFIPExpo(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.wsfexv1.Service objWSFEXV1;
                CrearTicketExpo(Sesion, out ticket, out objWS, out objWSFEXV1);
                
                ar.gov.afip.wsfexv1.ClsFEXRequest objFECabeceraRequest = new ar.gov.afip.wsfexv1.ClsFEXRequest();
                objFECabeceraRequest.Id = lc.cabecera_lote.id_lote;
                objFECabeceraRequest.Cbte_Tipo = Convert.ToInt16(lc.comprobante[0].cabecera.informacion_comprobante.tipo_de_comprobante);
                objFECabeceraRequest.Punto_vta = Convert.ToInt16(lc.cabecera_lote.punto_de_venta);
                objFECabeceraRequest.Cbte_nro = lc.comprobante[0].cabecera.informacion_comprobante.numero_comprobante;
                objFECabeceraRequest.Fecha_cbte = lc.comprobante[0].cabecera.informacion_comprobante.fecha_emision;
                objFECabeceraRequest.Tipo_expo = Convert.ToInt16(lc.comprobante[0].cabecera.informacion_comprobante.informacion_exportacion.tipo_exportacion);
                objFECabeceraRequest.Dst_cmp = Convert.ToInt16(lc.comprobante[0].cabecera.informacion_comprobante.informacion_exportacion.destino_comprobante);
                objFECabeceraRequest.Incoterms = lc.comprobante[0].cabecera.informacion_comprobante.informacion_exportacion.incoterms;
                objFECabeceraRequest.Incoterms_Ds = lc.comprobante[0].cabecera.informacion_comprobante.informacion_exportacion.descripcion_incoterms;
                if (lc.comprobante[0].extensiones != null)
                {
                    if (lc.comprobante[0].extensiones.extensiones_camara_facturas != null && lc.comprobante[0].extensiones.extensiones_camara_facturasSpecified == true)
                    {
                        objFECabeceraRequest.Idioma_cbte = Convert.ToInt16(lc.comprobante[0].extensiones.extensiones_camara_facturas.id_idioma);
                    }
                }
                objFECabeceraRequest.Cuit_pais_cliente = lc.comprobante[0].cabecera.informacion_comprador.nro_doc_identificatorio;
                objFECabeceraRequest.Cliente = lc.comprobante[0].cabecera.informacion_comprador.denominacion;

                //No es obligatorio si se asigna el Cuit_pais_cliente.
                //objFECabeceraRequest.Id_impositivo = "";

                objFECabeceraRequest.Domicilio_cliente = lc.comprobante[0].cabecera.informacion_comprador.domicilio_calle + " " + lc.comprobante[0].cabecera.informacion_comprador.domicilio_numero;
                
                objFECabeceraRequest.Forma_pago = lc.comprobante[0].cabecera.informacion_comprobante.condicion_de_pago;

                //No son obligatorias. String(c2000)
                //objFECabeceraRequest.Obs_comerciales = ""

                
                //No son obligatorias. String(c1000)
                //objFECabeceraRequest.Obs = "";
                
                //Clave de identificación tributaria del comprador. No es obligatorio si se ingresó valor en el campo Cuit_pais_cliente.
                //objFECabeceraRequest.Id_impositivo = "";

                if (lc.comprobante[0].cabecera.informacion_comprobante.informacion_exportacion.permiso_existente == "S")
                {
                    objFECabeceraRequest.Permiso_existente = lc.comprobante[0].cabecera.informacion_comprobante.informacion_exportacion.permiso_existente;
                    if (lc.comprobante[0].cabecera.informacion_comprobante.informacion_exportacion.permisos != null && lc.comprobante[0].cabecera.informacion_comprobante.informacion_exportacion.permisos.Length > 0)
                    {
                        int CantidadPermisos = 0;
                        foreach (FeaEntidades.InterFacturas.permisos pe in lc.comprobante[0].cabecera.informacion_comprobante.informacion_exportacion.permisos)
                        {
                            if (pe == null)
                            {
                                break;
                            }
                            CantidadPermisos += 1;
                        }
                        if (CantidadPermisos != 0)
                        {
                            ar.gov.afip.wsfexv1.Permiso[] arrayFEPermisosRequest = new ar.gov.afip.wsfexv1.Permiso[CantidadPermisos];
                            for (int i = 0; i < CantidadPermisos; i++)
                            {
                                ar.gov.afip.wsfexv1.Permiso p = new ar.gov.afip.wsfexv1.Permiso();
                                p.Id_permiso = lc.comprobante[0].cabecera.informacion_comprobante.informacion_exportacion.permisos[i].id_permiso;
                                p.Dst_merc = lc.comprobante[0].cabecera.informacion_comprobante.informacion_exportacion.permisos[i].destino_mercaderia;
                                arrayFEPermisosRequest[i] = p;
                            }
                            objFECabeceraRequest.Permisos = arrayFEPermisosRequest;
                        }
                    }
                }
                else if (lc.comprobante[0].cabecera.informacion_comprobante.informacion_exportacion.permiso_existente == "N")
                {
                    objFECabeceraRequest.Permiso_existente = lc.comprobante[0].cabecera.informacion_comprobante.informacion_exportacion.permiso_existente;
                }
                else
                {
                    objFECabeceraRequest.Permiso_existente = "";
                }

                if (lc.comprobante[0].cabecera.informacion_comprobante.referencias != null && lc.comprobante[0].cabecera.informacion_comprobante.referencias.Length > 0)
                {
                    int CantidadReferencias = 0;
                    foreach (FeaEntidades.InterFacturas.informacion_comprobanteReferencias re in lc.comprobante[0].cabecera.informacion_comprobante.referencias)
                    {
                        if (re == null)
                        {
                            break;
                        }
                        CantidadReferencias += 1;
                    }
                    if (CantidadReferencias != 0)
                    {
                        ar.gov.afip.wsfexv1.Cmp_asoc[] arrayFEReferenciasRequest = new ar.gov.afip.wsfexv1.Cmp_asoc[CantidadReferencias];
                        for (int i = 0; i < CantidadReferencias; i++)
                        {
                            //if (lc.comprobante[0].cabecera.informacion_comprobante.referencias[i].tipo_comprobante_afip == "S")
                            //{
                                ar.gov.afip.wsfexv1.Cmp_asoc r = new ar.gov.afip.wsfexv1.Cmp_asoc();
                                r.Cbte_tipo = Convert.ToInt16(lc.comprobante[0].cabecera.informacion_comprobante.referencias[i].codigo_de_referencia);
                                r.Cbte_punto_vta = Convert.ToInt16(lc.comprobante[0].cabecera.informacion_comprobante.referencias[i].dato_de_referencia.Substring(0, 4));
                                r.Cbte_nro = Convert.ToInt32(lc.comprobante[0].cabecera.informacion_comprobante.referencias[i].dato_de_referencia.Substring(5, 8));
                                arrayFEReferenciasRequest[i] = r;
                            //}
                        }
                        objFECabeceraRequest.Cmps_asoc = arrayFEReferenciasRequest;
                    }
                }

                ///* Obtengo último comprobante*/
                //ar.gov.afip.wsfexv1.ClsFEX_LastCMP lastCMP = new ar.gov.afip.wsfexv1.ClsFEX_LastCMP();
                //lastCMP.Cuit =  Convert.ToInt64(Sesion.Cuit.Nro);
                //lastCMP.Sign = ticket.ObjAutorizacionfexv1.Sign;
                //lastCMP.Token = ticket.ObjAutorizacionfexv1.Token;
                //lastCMP.Cbte_Tipo = Convert.ToInt16(lc.comprobante[0].cabecera.informacion_comprobante.tipo_de_comprobante);
                //lastCMP.Pto_venta = Convert.ToInt16(lc.comprobante[0].cabecera.informacion_comprobante.punto_de_venta);
                //ar.gov.afip.wsfexv1.FEXResponseLast_CMP lastcmpResponse = objWSFEXV1.FEXGetLast_CMP(lastCMP);
                //long UltNro = lastcmpResponse.FEXResult_LastCMP.Cbte_nro;
                
                //Consultar comprobante
                //ar.gov.afip.wsfexv1.ClsFEXGetCMP getCMP = new ar.gov.afip.wsfexv1.ClsFEXGetCMP();
                //getCMP.Cbte_tipo = Convert.ToInt16(lc.comprobante[0].cabecera.informacion_comprobante.tipo_de_comprobante);
                //getCMP.Punto_vta = Convert.ToInt16(lc.comprobante[0].cabecera.informacion_comprobante.punto_de_venta);
                //getCMP.Cbte_nro = lc.comprobante[0].cabecera.informacion_comprobante.numero_comprobante;
                //ar.gov.afip.wsfexv1.FEXGetCMPResponse cmpResponse = objWSFEXV1.FEXGetCMP(ticket.ObjAutorizacionfexv1, getCMP);

                //Código  de moneda. Consultar método FEXGetPARAM_MON para valores permitidos.
                objFECabeceraRequest.Moneda_Id = lc.comprobante[0].resumen.codigo_moneda;
                objFECabeceraRequest.Moneda_ctz = Convert.ToDecimal(Math.Round(lc.comprobante[0].resumen.tipo_de_cambio, 6));

                if (lc.comprobante[0].resumen.codigo_moneda == "PES")
                {
                    objFECabeceraRequest.Imp_total = Convert.ToDecimal(Math.Round(lc.comprobante[0].resumen.importe_total_factura, 3)); 
                }
                else if (lc.comprobante[0].resumen.codigo_moneda == "DOL")
                {
                    objFECabeceraRequest.Imp_total = Convert.ToDecimal(Math.Round(lc.comprobante[0].resumen.importes_moneda_origen.importe_total_factura, 3));
                }
                else
                {
                    throw new Exception("Moneda no permitida: " + lc.comprobante[0].resumen.codigo_moneda.ToString());
                }

                //Renglones
                int CantidadLineas = 0;
                if (lc.comprobante[0].detalle.linea != null)
                {
                    foreach (FeaEntidades.InterFacturas.linea li in lc.comprobante[0].detalle.linea)
                    {
                        if (li == null)
                        {
                            break;
                        }
                        CantidadLineas += 1;
                    }
                    if (CantidadLineas != 0)
                    {
                        ar.gov.afip.wsfexv1.Item[] items = new ar.gov.afip.wsfexv1.Item[CantidadLineas];
                        for (int j = 0; j < CantidadLineas; j++)
                        {
                            ar.gov.afip.wsfexv1.Item item = new ar.gov.afip.wsfexv1.Item();
                            item.Pro_codigo = lc.comprobante[0].detalle.linea[j].codigo_producto_vendedor;
                            if (lc.comprobante[0].detalle.linea[j].descripcion.Substring(0, 1) == "%")
                            {
                                item.Pro_ds = RN.Funciones.HexToString(lc.comprobante[0].detalle.linea[j].descripcion);
                            }
                            else
                            {
                                item.Pro_ds = lc.comprobante[0].detalle.linea[j].descripcion;
                            }
                            if (lc.comprobante[0].detalle.linea[j].cantidadSpecified == true)
                            {
                                item.Pro_qty = Convert.ToDecimal(lc.comprobante[0].detalle.linea[j].cantidad);
                            }
                            item.Pro_umed = Convert.ToInt32(lc.comprobante[0].detalle.linea[j].unidad);
                            if (lc.comprobante[0].resumen.codigo_moneda == "PES")
                            {
                                if (lc.comprobante[0].detalle.linea[j].precio_unitarioSpecified == true)
                                {
                                    item.Pro_precio_uni = Convert.ToDecimal(lc.comprobante[0].detalle.linea[j].precio_unitario);
                                }
                                item.Pro_total_item = Convert.ToDecimal(lc.comprobante[0].detalle.linea[j].importe_total_articulo);
                            }
                            else
                            {
                                if (lc.comprobante[0].detalle.linea[j].importes_moneda_origen.precio_unitarioSpecified == true)
                                {
                                    item.Pro_precio_uni = Convert.ToDecimal(lc.comprobante[0].detalle.linea[j].importes_moneda_origen.precio_unitario);
                                }
                                item.Pro_total_item = Convert.ToDecimal(lc.comprobante[0].detalle.linea[j].importes_moneda_origen.importe_total_articulo);
                            }
                            items[j] = item;
                        }
                        objFECabeceraRequest.Items = items;
                    }
                }

                string loteXML = "";
                SerializarCExpo(out loteXML, objFECabeceraRequest);
                try
                {
                    Funciones.GrabarLogTexto("Consultar.txt", loteXML);
                }
                catch
                {
                }
                
                ar.gov.afip.wsfexv1.FEXResponseAuthorize objFEResponse = new ar.gov.afip.wsfexv1.FEXResponseAuthorize();
                objFEResponse = objWSFEXV1.FEXAuthorize(ticket.ObjAutorizacionfexv1, objFECabeceraRequest);

                string respuesta = "";
                if (objFEResponse.FEXErr == null || objFEResponse.FEXErr.ErrMsg == "OK")
                {
                    respuesta += "Resultado: " + objFEResponse.FEXResultAuth.Resultado + "\\n";
                    if (objFEResponse.FEXResultAuth.Motivos_Obs != null && objFEResponse.FEXResultAuth.Motivos_Obs != "")
                    {
                        respuesta += objFEResponse.FEXResultAuth.Motivos_Obs + "\\n";
                    }
                    respuesta += "CAE: " + objFEResponse.FEXResultAuth.Cae;
                    Cae = objFEResponse.FEXResultAuth.Cae;
                    CaeFecVto = objFEResponse.FEXResultAuth.Fch_venc_Cae;
                }
                else
                {
                    respuesta += objFEResponse.FEXErr.ErrCode + "-" + objFEResponse.FEXErr.ErrMsg + ".\\n ";
                }
                return respuesta;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
예제 #2
0
 /// <remarks/>
 public void FEXAuthorizeAsync(ClsFEXAuthRequest Auth, ClsFEXRequest Cmp) {
     this.FEXAuthorizeAsync(Auth, Cmp, null);
 }
예제 #3
0
 /// <remarks/>
 public void FEXAuthorizeAsync(ClsFEXAuthRequest Auth, ClsFEXRequest Cmp, object userState) {
     if ((this.FEXAuthorizeOperationCompleted == null)) {
         this.FEXAuthorizeOperationCompleted = new System.Threading.SendOrPostCallback(this.OnFEXAuthorizeOperationCompleted);
     }
     this.InvokeAsync("FEXAuthorize", new object[] {
                 Auth,
                 Cmp}, this.FEXAuthorizeOperationCompleted, userState);
 }
예제 #4
0
 public FEXResponseAuthorize FEXAuthorize(ClsFEXAuthRequest Auth, ClsFEXRequest Cmp) {
     object[] results = this.Invoke("FEXAuthorize", new object[] {
                 Auth,
                 Cmp});
     return ((FEXResponseAuthorize)(results[0]));
 }