Class: BarcodeOptimaDecode

Inherits:
Object
  • Object
show all
Defined in:
lib/spf_barcode.rb

Instance Method Summary collapse

Constructor Details

#initialize(barcode) ⇒ BarcodeOptimaDecode

Returns a new instance of BarcodeOptimaDecode.



3
4
5
6
7
# File 'lib/spf_barcode.rb', line 3

def initialize(barcode)
  @barcode = barcode
  @accion = ''
  valida_length_barcode
end

Instance Method Details

#accionObject

PARA LOS CODIGOS DE BARRA, SE LES PIDE ACCION Y NUMERO



69
70
71
# File 'lib/spf_barcode.rb', line 69

def accion
  @accion
end

#componenteObject



93
94
95
# File 'lib/spf_barcode.rb', line 93

def componente
  @componente || @elemento.try(:componente)
end

#composicionObject



97
98
99
# File 'lib/spf_barcode.rb', line 97

def composicion
  @composicion || @elemento.try(:componente).try(:composicion) || @componente.try(:composicion)
end

#decodeObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/spf_barcode.rb', line 47

def decode

  if @barcode[/C\d\d\d/]
    @tipo = @barcode[1]
    @numero = @barcode[2..3].to_i.to_s # 01=> 1
    case @tipo
    when '9' then @accion = 'PROCESO'
    when '7' then @accion = 'MOMENTO'
    when '6' then @accion = 'MOTIVO'
    when '5' then @accion = 'SELECCIONAR'
    end
  else

    decode_pedido
    decode_item
    decode_item_medida
    decode_objeto
  end
  self
end

#decode_cardinalidad_elemento(cardinalidad) ⇒ Object



117
118
119
120
121
122
123
# File 'lib/spf_barcode.rb', line 117

def decode_cardinalidad_elemento(cardinalidad)
  elementos_materiales = @item.composicion.get_elementos_materiales_ordenados
  elementos_materiales.each do |elemento|
    return elemento if elemento.cardinalidad == cardinalidad
  end
  false
end

#decode_cardinalidad_item(cardinalidad) ⇒ Object



103
104
105
106
107
108
# File 'lib/spf_barcode.rb', line 103

def decode_cardinalidad_item(cardinalidad)
  @pedido.items.order(:id).each do |item|
    return item if item.cardinalidad == cardinalidad
  end
  false
end

#decode_cardinalidad_item_medida(cardinalidad) ⇒ Object



110
111
112
113
114
115
# File 'lib/spf_barcode.rb', line 110

def decode_cardinalidad_item_medida(cardinalidad)
  @item.item_medidas.order(:id).each do |item_medida|
    return item_medida if item_medida.cardinalidad == cardinalidad
  end
  false
end

#decode_composicionObject



129
130
131
# File 'lib/spf_barcode.rb', line 129

def decode_composicion
  @item.composicion
end

#decode_itemObject



20
21
22
23
# File 'lib/spf_barcode.rb', line 20

def decode_item
  cardinalidad_item = @barcode[8..9].to_i
  @item = decode_cardinalidad_item(cardinalidad_item) || (raise "Error al obtener el item decodificando el código de barra")
end

#decode_item_medidaObject



25
26
27
28
# File 'lib/spf_barcode.rb', line 25

def decode_item_medida
  cardinalidad_item_medida = @barcode[10..12].to_i
  @item_medida = decode_cardinalidad_item_medida(cardinalidad_item_medida) || (raise "Error al obtener la medida decodificando el código de barra")
end

#decode_objetoObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/spf_barcode.rb', line 30

def decode_objeto
  barcode_header = @barcode[0..1].to_i
  barcode_objeto = @barcode[13..14].to_i

  case barcode_header
  when 80 then
    @elemento = decode_cardinalidad_elemento(barcode_objeto) || (raise "Error al obtener el elemento decodificando el código de barra")
  when 81 then
    @componente = decode_orden_componente(barcode_objeto) || (raise "Error al obtener el componente decodificando el código de barra")
  when 82 then
    @composicion = decode_composicion || (raise "Error al obtener la composición decodificando el código de barra")
  else
  end


end

#decode_orden_componente(orden) ⇒ Object



125
126
127
# File 'lib/spf_barcode.rb', line 125

def decode_orden_componente(orden)
  @item.composicion.componentes.select{|c| c.orden == orden}.compact[0]
end

#decode_pedidoObject



16
17
18
# File 'lib/spf_barcode.rb', line 16

def decode_pedido
  @pedido = Pedido.find_by_id(@barcode[2..7]) || (raise "Error al obtener el pedido decodificando el código de barra")
end

#elementoObject



89
90
91
# File 'lib/spf_barcode.rb', line 89

def elemento
  @elemento
end

#itemObject



81
82
83
# File 'lib/spf_barcode.rb', line 81

def item
  @item
end

#item_medidaObject



85
86
87
# File 'lib/spf_barcode.rb', line 85

def item_medida
  @item_medida
end

#numeroObject



72
73
74
# File 'lib/spf_barcode.rb', line 72

def numero
  @numero
end

#pedidoObject



77
78
79
# File 'lib/spf_barcode.rb', line 77

def pedido
  @pedido
end

#valida_length_barcodeObject

desactivo la validacion para que también pueda leer codigos viejos: 8800111100101 001111-001-001



12
13
14
# File 'lib/spf_barcode.rb', line 12

def valida_length_barcode
  # raise "Error: la cantidad de dígitos del barcode es incorrecta. Debe ser 15. Es #{@barcode.length}" unless @barcode.length == 15 
end