Class: Arca::WSFE
Constant Summary collapse
- WSDL =
{ development: "https://wswhomo.afip.gov.ar/wsfev1/service.asmx?WSDL", production: "https://servicios1.afip.gov.ar/wsfev1/service.asmx?WSDL", test: "#{Root}/test/fixtures/wsfe/wsfe.wsdl" }.freeze
Instance Attribute Summary collapse
-
#cuit ⇒ Object
readonly
Returns the value of attribute cuit.
-
#wsaa ⇒ Object
readonly
Returns the value of attribute wsaa.
Instance Method Summary collapse
- #actividades ⇒ Object
- #auth ⇒ Object
- #autorizar_comprobantes(opciones) ⇒ Object
- #cant_max_registros_x_lote ⇒ Object
- #comprobante_to_request(comprobante, opciones) ⇒ Object
- #consultar_caea(fecha) ⇒ Object
- #consultar_caea_sin_movimientos(caea, pto_vta) ⇒ Object
- #consultar_comprobante(opciones) ⇒ Object
- #cotizacion(moneda_id) ⇒ Object
- #dummy ⇒ Object
- #fecha_inicio_quincena_siguiente ⇒ Object
- #informar_caea_sin_movimientos(caea, pto_vta) ⇒ Object
- #informar_comprobantes_caea(opciones) ⇒ Object
-
#initialize(options = {}) ⇒ WSFE
constructor
A new instance of WSFE.
- #periodo_para_consulta_caea(fecha) ⇒ Object
- #periodo_para_solicitud_caea ⇒ Object
- #puntos_venta ⇒ Object
- #solicitar_caea ⇒ Object
- #tipos_comprobantes ⇒ Object
- #tipos_concepto ⇒ Object
- #tipos_condicion_iva_receptor(clase_cmp: nil) ⇒ Object
- #tipos_documentos ⇒ Object
- #tipos_iva ⇒ Object
- #tipos_monedas ⇒ Object
- #tipos_opcional ⇒ Object
- #tipos_tributos ⇒ Object
- #ultimo_comprobante_autorizado(opciones) ⇒ Object
Methods included from TypeConversions
Constructor Details
#initialize(options = {}) ⇒ WSFE
Returns a new instance of WSFE.
17 18 19 20 21 22 |
# File 'lib/arca/wsfe.rb', line 17 def initialize( = {}) @cuit = [:cuit] @wsaa = WSAA.new .merge(service: "wsfe") @client = Client.new Hash([:savon]).reverse_merge(wsdl: WSDL[@wsaa.env], convert_request_keys_to: :camelcase) end |
Instance Attribute Details
#cuit ⇒ Object (readonly)
Returns the value of attribute cuit.
15 16 17 |
# File 'lib/arca/wsfe.rb', line 15 def cuit @cuit end |
#wsaa ⇒ Object (readonly)
Returns the value of attribute wsaa.
15 16 17 |
# File 'lib/arca/wsfe.rb', line 15 def wsaa @wsaa end |
Instance Method Details
#actividades ⇒ Object
69 70 71 72 |
# File 'lib/arca/wsfe.rb', line 69 def actividades r = request :fe_param_get_actividades, auth x2r get_array(r, :actividades_tipo), id: :integer, orden: :integer end |
#auth ⇒ Object
193 194 195 |
# File 'lib/arca/wsfe.rb', line 193 def auth { auth: wsaa.auth.merge(cuit: cuit) } end |
#autorizar_comprobantes(opciones) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/arca/wsfe.rb', line 94 def autorizar_comprobantes(opciones) comprobantes = opciones[:comprobantes] mensaje = { "FeCAEReq" => { "FeCabReq" => opciones.select_keys(:cbte_tipo, :pto_vta).merge(cant_reg: comprobantes.size), "FeDetReq" => { "FECAEDetRequest" => comprobantes.map { |comprobante| comprobante_to_request(comprobante, opciones) } } } } mensaje = r2x(mensaje, cbte_fch: :date, fch_serv_desde: :date, fch_serv_hasta: :date, fch_vto_pago: :date) r = request :fecae_solicitar, auth.merge(mensaje) r = Array.wrap(r[:fe_det_resp][:fecae_det_response]).map do |h| obs = Array.wrap(h[:observaciones] ? h[:observaciones][:obs] : nil) h.select_keys(:cae, :cae_fch_vto, :resultado).merge(cbte_nro: h[:cbte_desde], observaciones: obs) end x2r r, cae_fch_vto: :date, fch_serv_desde: :date, fch_serv_hasta: :date, fch_vto_pago: :date, cbte_nro: :integer, code: :integer end |
#cant_max_registros_x_lote ⇒ Object
189 190 191 |
# File 'lib/arca/wsfe.rb', line 189 def cant_max_registros_x_lote request(:fe_comp_tot_x_request, auth)[:reg_x_req].to_i end |
#comprobante_to_request(comprobante, opciones) ⇒ Object
114 115 116 117 118 119 120 121 122 |
# File 'lib/arca/wsfe.rb', line 114 def comprobante_to_request(comprobante, opciones) nro = comprobante.delete :cbte_nro iva = comprobante.delete :imp_iva iva_receptor_id = comprobante.delete :condicion_iva_receptor_id comprobante.delete :tributos if comprobante[:imp_trib] == 0 comprobante.merge! cbte_desde: nro, cbte_hasta: nro, "ImpIVA" => iva, "CondicionIVAReceptorId" => iva_receptor_id comprobante.merge! periodo_asoc: opciones[:periodo_asoc] if opciones[:periodo_asoc] comprobante end |
#consultar_caea(fecha) ⇒ Object
134 135 136 |
# File 'lib/arca/wsfe.rb', line 134 def consultar_caea(fecha) convertir_rta_caea request(:fecaea_consultar, auth.merge(periodo_para_consulta_caea(fecha))) end |
#consultar_caea_sin_movimientos(caea, pto_vta) ⇒ Object
176 177 178 179 |
# File 'lib/arca/wsfe.rb', line 176 def consultar_caea_sin_movimientos(caea, pto_vta) r = request :fecaea_sin_movimiento_consultar, auth.merge("CAEA" => caea, "PtoVta" => pto_vta) x2r get_array(r, :fecaea_sin_mov), pto_vta: :integer end |
#consultar_comprobante(opciones) ⇒ Object
185 186 187 |
# File 'lib/arca/wsfe.rb', line 185 def consultar_comprobante(opciones) request(:fe_comp_consultar, auth.merge(fe_comp_cons_req: opciones))[:result_get] end |
#cotizacion(moneda_id) ⇒ Object
90 91 92 |
# File 'lib/arca/wsfe.rb', line 90 def cotizacion(moneda_id) request(:fe_param_get_cotizacion, auth.merge(mon_id: moneda_id))[:result_get][:mon_cotiz].to_f end |
#dummy ⇒ Object
24 25 26 |
# File 'lib/arca/wsfe.rb', line 24 def dummy request :fe_dummy end |
#fecha_inicio_quincena_siguiente ⇒ Object
147 148 149 150 |
# File 'lib/arca/wsfe.rb', line 147 def fecha_inicio_quincena_siguiente hoy = Date.today hoy.day <= 15 ? hoy.change(day: 16) : hoy.next_month.change(day: 1) end |
#informar_caea_sin_movimientos(caea, pto_vta) ⇒ Object
172 173 174 |
# File 'lib/arca/wsfe.rb', line 172 def informar_caea_sin_movimientos(caea, pto_vta) request :fecaea_sin_movimiento_informar, auth.merge("CAEA" => caea, "PtoVta" => pto_vta) end |
#informar_comprobantes_caea(opciones) ⇒ Object
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/arca/wsfe.rb', line 152 def informar_comprobantes_caea(opciones) comprobantes = opciones[:comprobantes] mensaje = { "FeCAEARegInfReq" => { "FeCabReq" => opciones.select_keys(:cbte_tipo, :pto_vta).merge(cant_reg: comprobantes.size), "FeDetReq" => { "FECAEADetRequest" => comprobantes.map do |comprobante| comprobante_to_request(comprobante.merge("CAEA" => comprobante.delete(:caea)), opciones) end } } } r = request :fecaea_reg_informativo, auth.merge(r2x(mensaje, cbte_fch: :date)) r = Array.wrap(r[:fe_det_resp][:fecaea_det_response]).map do |h| obs = Array.wrap(h[:observaciones] ? h[:observaciones][:obs] : nil) h.select_keys(:caea, :resultado).merge(cbte_nro: h[:cbte_desde], observaciones: obs) end x2r r, cbte_nro: :integer, code: :integer end |
#periodo_para_consulta_caea(fecha) ⇒ Object
142 143 144 145 |
# File 'lib/arca/wsfe.rb', line 142 def periodo_para_consulta_caea(fecha) orden = fecha.day <= 15 ? 1 : 2 { orden: orden, periodo: fecha.strftime("%Y%m") } end |
#periodo_para_solicitud_caea ⇒ Object
138 139 140 |
# File 'lib/arca/wsfe.rb', line 138 def periodo_para_solicitud_caea periodo_para_consulta_caea fecha_inicio_quincena_siguiente end |
#puntos_venta ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/arca/wsfe.rb', line 74 def puntos_venta r = request :fe_param_get_ptos_venta, auth # Extract standard fields: nro, fch_baja, bloqueado # Also extract emision_tipo (EmisionTipo), pve_nombre_fantasia (pveNombreFantasia), # and pve_dominio (pveDominio) if present in response # Note: WSDL only shows Nro, EmisionTipo, Bloqueado, FchBaja, but actual response # may include additional fields like pveNombreFantasia and pveDominio x2r get_array(r, :pto_venta), nro: :integer, fch_baja: :date, bloqueado: :boolean, emision_tipo: nil, # String field, no conversion needed pve_nombre_fantasia: nil, # String field, may not be in WSDL but could be in response pve_dominio: nil # String field, may not be in WSDL but could be in response end |
#solicitar_caea ⇒ Object
124 125 126 127 128 129 130 131 132 |
# File 'lib/arca/wsfe.rb', line 124 def solicitar_caea convertir_rta_caea request(:fecaea_solicitar, auth.merge(periodo_para_solicitud_caea)) rescue Arca::ResponseError => e if e.code? 15_008 consultar_caea fecha_inicio_quincena_siguiente else raise end end |
#tipos_comprobantes ⇒ Object
28 29 30 31 |
# File 'lib/arca/wsfe.rb', line 28 def tipos_comprobantes r = request :fe_param_get_tipos_cbte, auth x2r get_array(r, :cbte_tipo), id: :integer, fch_desde: :date, fch_hasta: :date end |
#tipos_concepto ⇒ Object
43 44 45 46 |
# File 'lib/arca/wsfe.rb', line 43 def tipos_concepto r = request :fe_param_get_tipos_concepto, auth x2r get_array(r, :concepto_tipo), id: :integer, fch_desde: :date, fch_hasta: :date end |
#tipos_condicion_iva_receptor(clase_cmp: nil) ⇒ Object
63 64 65 66 67 |
# File 'lib/arca/wsfe.rb', line 63 def tipos_condicion_iva_receptor(clase_cmp: nil) params = clase_cmp ? auth.merge("ClaseCmp" => clase_cmp) : auth r = request :fe_param_get_condicion_iva_receptor, params x2r get_array(r, :condicion_iva_receptor), id: :integer end |
#tipos_documentos ⇒ Object
38 39 40 41 |
# File 'lib/arca/wsfe.rb', line 38 def tipos_documentos r = request :fe_param_get_tipos_doc, auth x2r get_array(r, :doc_tipo), id: :integer, fch_desde: :date, fch_hasta: :date end |
#tipos_iva ⇒ Object
53 54 55 56 |
# File 'lib/arca/wsfe.rb', line 53 def tipos_iva r = request :fe_param_get_tipos_iva, auth x2r get_array(r, :iva_tipo), id: :integer, fch_desde: :date, fch_hasta: :date end |
#tipos_monedas ⇒ Object
48 49 50 51 |
# File 'lib/arca/wsfe.rb', line 48 def tipos_monedas r = request :fe_param_get_tipos_monedas, auth x2r get_array(r, :moneda), fch_desde: :date, fch_hasta: :date end |
#tipos_opcional ⇒ Object
33 34 35 36 |
# File 'lib/arca/wsfe.rb', line 33 def tipos_opcional r = request :fe_param_get_tipos_opcional, auth x2r get_array(r, :tipos_opcional), id: :integer, fch_desde: :date, fch_hasta: :date end |
#tipos_tributos ⇒ Object
58 59 60 61 |
# File 'lib/arca/wsfe.rb', line 58 def tipos_tributos r = request :fe_param_get_tipos_tributos, auth x2r get_array(r, :tributo_tipo), id: :integer, fch_desde: :date, fch_hasta: :date end |
#ultimo_comprobante_autorizado(opciones) ⇒ Object
181 182 183 |
# File 'lib/arca/wsfe.rb', line 181 def ultimo_comprobante_autorizado(opciones) request(:fe_comp_ultimo_autorizado, auth.merge(opciones))[:cbte_nro].to_i end |