Corregidos errores al agregar donaciones huƩrfanas
[donaciones.git] / lib / archivos_pac.rb
blobf6793360d980bd3adc159a2e66d3548192ef1006
1 require 'rut'
2 require 'iconv'
4 class ArchivosPAC
6   def self.leer_bdu(archivo)
7     lineas = archivo.read.scan(/^.*$/)
8     mandatos = []
11     lineas.each do |linea|
12       if linea[9,1] == 'D'
13         codigo_banco = linea[0..2]
14         rut = linea[10..31].delete(' ').gsub(/^0*/,'')
15         mandatos << [rut, codigo_banco]
16       end
17     end
19     # TODO: comprobaciĆ³n de integridad del archivo
21     mandatos
22   end
24   def self.generar_cargos(fecha, mandatos)
25     texto_archivo = ""
26     monto_total = 0
28     fecha=fecha.to_s.delete("-")
30     mandatos.each do |mandato|
31       nombre = "#{mandato[:apellido_paterno]} #{mandato[:apellido_materno]} #{mandato[:nombres]}".chars.upcase[0,10]
32       monto = "%011d"%(mandato[:monto]*100)
33       monto_total += mandato[:monto]
34       rut = RUT.reducir(mandato[:rut])
35       if mandato[:alineacion] == "izquierda"
36         rut = "0"*(9-rut.size)+rut+" "*13
37       else
38         rut = "0"*(22-rut.size)+rut
39       end
41       texto_archivo << "#{mandato[:banco]}596001D#{rut} #{nombre}#{monto}#{fecha}#{fecha}..........\n"
42     end
44     cantidad_registros = "%06d"%mandatos.size
45     monto_total = "%09d00"%monto_total
47     # reg. control
48     texto_archivo << "001596001T"+" "*33+"#{monto_total}#{cantidad_registros}"+"."*20+"\n"
49     texto_archivo = Iconv.conv("ISO-8859-1", "UTF-8", texto_archivo)
50   end
53   def self.leer_cargos(archivo) #TODO
54     lineas = archivo.read.scan(/^.*$/)
55     cargos = []
57     lineas.each do |linea|
58       if linea[9,1] == 'D'
59         codigo_banco = linea[0..2]
60         rut = linea[10..31].delete(' ').gsub(/^0*/,'')
61         monto = linea[33..41].to_i
62         codigo_respuesta = linea[60..60]
64         cargos << {
65           :rut => rut,
66           :monto => monto,
67           :codigo_banco => codigo_banco,
68           :codigo_respuesta => codigo_respuesta,
69           :respuesta => respuesta(codigo_respuesta)
70         }
71         
72       end
73     end
75     cargos
76   end
78   def self.respuesta(codigo)
79     case codigo
80     when '3'
81       'cargo efectuado'
82     when '1', '2', '5', '6', '7', '8', 'A'
83       'cargo no efectuado'
84     when '0'
85       'registro rechazado'
86     end
87   end
88     
89 end