I have the following You can not call create unless the parent is saved
try saving @p
before and enter an infinite save cycle. some idea because I share my code thanks.
class EncabezadosController < ApplicationController
files = Dir.glob("#{Rails.root}/lib/oc/*.txt").select do |item| #abre cualquier archivo sin conocer el nombre
next if File.directory? item # busca al siguiente archivo
#def nose
File.foreach(item).with_object([]) do |line, result| # recorre el archivo item linea por linea para guardar el encabezado
puts line
if line.start_with?('UNH') #leo linea que empiece por UNH
clave1 = 'ORDEN DE COMPRA'
end
if line.start_with?('BGM')#leo linea que empiece por
clave2 = line[0..2]
@codigooc = line[6...26]
if line.include?('BGM2')
tipooc = 'ORDEN DE COMPRA '
cajas = line[-1]
else
tipooc = 'ORDEN DE COMPRA SUGERIDA'
end
if cajas = '1'
@dtipooc = 'CANCELACION'
end
if cajas = '9'
@dtipooc = 'ORIGINAL'
end
if cajas = '6'
@dtipooc = 'PROPUESTA'
end
end#line GBM
if line.start_with?('DTM137')
fechag2 = Date.new.strftime("%Y/%m/%d")
clave = line[0..5]
fechag = line[6...14]
@fechag2 = fechag
@fechag2.unpack('A2A4A2').rotate.join('/')
end
if line.start_with?('DTM ')
fechaen2 = Date.new.strftime("%Y/%m/%d")
clave = line[0..2]
fechaen = line[6...14]
@fechaen2 = fechaen
end
if line.start_with?('DTM157')#
fechalist2 = Date.new.strftime("%Y/%m/%d")
fechalist = line[6...14]
@fechalist2 = fechalist
end
if line.start_with?('NADBY')
clave = line[0..4]
@comprador = line[6...-1]#valor original 6..1 modificado por pruebebas
end
if line.start_with?('NADSU')
clave = line[0..4]
@proveedor = line[6...-1]
end
#aqui obtengo el nombre de el proveedor
if line.start_with?('CTAOC') and line.include?('LA VINOTECA LIMITADA') or line.include?('AVDA.MANUEL MONT 1452') or line.include?('3433607')
clave = line[0..4]
@emisor = "LA VINOTECA LIMITADA"
end
#aqui obtengo el nombre del emisor
if line.start_with?('CTAOC') and !line.include?('LA VINOTECA LIMITADA') and !line.include?('AVDA.MANUEL MONT 1452') and !line.include?('3433607')
@emisor2 = line[6...-1]
end
if line.start_with?('PAT')
clave = line[0..2]
@tpago = line[5]
@tpago2 = @tpago.to_s
@dias_entrega = line[7..8]
@dias_entrega2 = @dentrega.to_s
@dias_pagar = line [-3..-1]
@dpagar2 = @dpagar.to_s
#result << "#{clave} , codigo #{tpago} , condiciones normales #{tpago} , dias para entrega #{dentrega} , Dias para pagar #{dpagar} "
end
if line.start_with?('TODNC')#tipo flete
clave = line[0..4]
@flete1 = 'flete por cuenta del vendedor sin costo'
else
@flete1 = 'flete por cuenta del comprador'
end
if line.start_with?('LOC')
clave = line[0..2]
lugar = line[5]
codigolugar = line[6...-1]
@codigolugar2 = codigolugar
end
end#do
#@p = Encabezado.new( numero_oc:@codigooc , tipo_oc:@dtipooc , fecha_g:@fechag2 , lugar_entrega:@codigolugar2 , inf_comprador:@emisor2 , fecha_en: @fechaen2 , fecha_list: @fechalist2 , d_comprador:@comprador , emisor:@emisor, codic_pago:@tpago2 , diascredito:@dpagar , text:@flete1 , diasentrega:@dentrega2)
#.new luego del ciclo porque necesito generar el vinculo de la tabla encabezado con detalles
@p = Encabezado.new( numero_oc: @codigooc , tipo_oc: @dtipooc , fecha_g: @fechag2 , lugar_entrega: @codigolugar2, inf_comprador: @emisor2, fecha_en: @fechaen2, fecha_list: @fechalist2, d_comprador: @comprador,emisor: @emisor, codic_pago: @flete1, dias_credito: @dpagar, monto_total: @Monototal, dias_entrega:@dentrega2, status_oc: "Inicial")
File.foreach(item).with_object([]) do |line, result| #recorro la linea del mismo archivo solo para guardar el detalle
puts "procensando linea #{line} ..."
case
when line.start_with?('BGM') #numero oc
clave2 = line[0..2]
@codigooc2 = line[6...26]
when line.start_with?('LIN') # indica el numero item y codigo
@cproducto = line[9..-2]
@numeroitem = line[7..8]
@numeroitem2 = @numeroitem.to_s
when line.start_with?('IMD') #indica la descripcion
@desproducto = line[8..-1]
when line.start_with?('QTY 21') # indica la cantidad pedida y el tipo de unidad de caja
@cantidadpedida = line[19..20]
@caja = line[-3..-1]
pedido = '?????????????????????'
when line.start_with?('QTY129') # cantidad de unidades que trae una caja
@cantidadunidades = line[-6..-4]
@tunidad = 'Unidades Simples'
#Detalle.last.destroy
when line.start_with?('MOA203') #precio neto del producto
@precioneto = line[7..-1] # not [-10..-1
@precioneto2 = @precioneto.to_f.round(3).to_f
when line.start_with?('MOA 204') #monto del descuento pueden haber hasta dos descuentos en una oc
@tdescu = 'Descuento'
@valordescu = line[-10..-1]
when line.start_with?('PRIAAA') #precio neto de lista de precio por unidad
pedido = line[-3..-1]
@valorcd = line[-16..-8]
# @tcaja2 = unitOfMeasure(pedido)
when (line.start_with?('ALCA') and (line.include?('DE1') or line.include?('DE2')))
@cdescuento = 'DESCUENTO'
when line.start_with?('ALCC') && (line.include?('CA1') || line.include?('CA1'))
@ccargo = 'CARGO'
if line.start_with?('PCD')
@porcentaje = line[-6..-1] #
@porcentaje2 = line[-6..-1]
end
when line.start_with?('MOA 23') #valor en monto del cargo
@tcargo = 'Cargo'
@valorcargo = line[-10..-1]
when line.start_with?('MOA 86') # monto a pagar total factura
clave = line[0..2]
importe = line[-9..-1]
when line.start_with?('CNT')
@items2 = line[-2..-1]
else
puts 'empieza con otra cosa'
end
#@p.detalles.create( numero_oc:@codigooc, cod_prod:@cproducto,descrip:@desproducto, numero_item:@numeroitem2, cantidadpedida:@cantidadpedida , precio_unit: @precioneto2 )
@p.detalles.create( numero_oc:@codigooc, cod_prod: @cproducto, descripcion: @desproducto, numero_item: @numeroitem2, cantidad_pedida: @cantidadpedida , precio_unit: @precioneto2 , tipo_caja: @cantidadunidades , total_linea: @precioneto2, p_descu1: @porcentaje , monto_descu1: @valordescu, p_descu2: @porcentajedescu2, monto_descu2:"" , p_cargo1:"" , monto_cargo1: @valorcargo)
end #do
@p.save
File.delete(item) if File.exist?(item)
end #dir
#borra cada archivo leido para evitar duplicidad
end #clase
@p
Aucun commentaire:
Enregistrer un commentaire