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



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

def accion
  @accion
end

#componenteObject



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

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

#composicionObject



117
118
119
# File 'lib/spf_barcode.rb', line 117

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/spf_barcode.rb', line 47

def decode

  if @barcode.length == 3
    case @barcode
    when '*900*' then @accion = 'OK'
    when '*901*' then @accion = 'ROTURA'

    when '*903*' then @accion = 'CONFIRMAROTURA'
    when '*904*' then @accion = 'CANCELAROTURA'

    when '*501*' then @accion = 'SELECCIONAR1'
    when '*502*' then @accion = 'SELECCIONAR2'
    when '*503*' then @accion = 'SELECCIONAR3'
    when '*504*' then @accion = 'SELECCIONAR4'
    when '*505*' then @accion = 'SELECCIONAR5'
    when '*506*' then @accion = 'SELECCIONAR6'
    when '*601*' then @accion = 'MOTIVO01'
    when '*602*' then @accion = 'MOTIVO02'
    when '*603*' then @accion = 'MOTIVO03'
    when '*604*' then @accion = 'MOTIVO04'
    when '*605*' then @accion = 'MOTIVO05'
    when '*606*' then @accion = 'MOTIVO06'
    when '*607*' then @accion = 'MOTIVO07'
    when '*608*' then @accion = 'MOTIVO08'
    when '*609*' then @accion = 'MOTIVO09'

    when '*701*' then @accion = 'MOMENTO01'
    when '*702*' then @accion = 'MOMENTO02'
    when '*703*' then @accion = 'MOMENTO03'
    when '*704*' then @accion = 'MOMENTO04'
    when '*705*' then @accion = 'MOMENTO05'
    when '*706*' then @accion = 'MOMENTO06'
    when '*707*' then @accion = 'MOMENTO07'
    when '*708*' then @accion = 'MOMENTO08'
    when '*709*' then @accion = 'MOMENTO09'
    end
  else

    decode_pedido
    decode_item
    decode_item_medida
    decode_objeto
  end
  self
end

#decode_cardinalidad_elemento(cardinalidad) ⇒ Object



137
138
139
140
141
142
143
# File 'lib/spf_barcode.rb', line 137

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



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

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



130
131
132
133
134
135
# File 'lib/spf_barcode.rb', line 130

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



149
150
151
# File 'lib/spf_barcode.rb', line 149

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



145
146
147
# File 'lib/spf_barcode.rb', line 145

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



109
110
111
# File 'lib/spf_barcode.rb', line 109

def elemento
  @elemento
end

#itemObject



101
102
103
# File 'lib/spf_barcode.rb', line 101

def item
  @item
end

#item_medidaObject



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

def item_medida
  @item_medida
end

#pedidoObject



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

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