forked from jazzido/GPB
-
Notifications
You must be signed in to change notification settings - Fork 0
/
import_jsonlines.py
85 lines (61 loc) · 2.96 KB
/
import_jsonlines.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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
import re
import sys
import simplejson
import logging
import random
import os
from pprint import pprint
from django.db.models import ObjectDoesNotExist
from django.db.models import Q
from django.db import transaction, connection
import gpbweb.core.models as models
from datetime import datetime
logging.basicConfig(level=logging.INFO)
log = logging.getLogger(__name__)
imported_compras = set()
def _import_compra(c):
proveedor, proveedor_created = models.Proveedor.objects.get_or_create(nombre=c['proveedor'])
reparticion, reparticion_created = models.Reparticion.objects.get_or_create(nombre=c['destino'])
if int(c['orden_compra']) in imported_compras:
return
compra = models.Compra(orden_compra=int(c['orden_compra']),
importe=str(c['importe']),
fecha=datetime(*map(int, c['fecha'].split('-'))),
proveedor=proveedor,
destino=reparticion)
compra.save()
imported_compras.add(int(c['orden_compra']))
def _import_compralinea(cl):
try:
compra = models.Compra.objects.get(orden_compra=int(cl['orden_compra']), fecha__year=os.environ.get('ANIO', datetime.now().year))
#log.info('getting compra: %s' % compra)
except ObjectDoesNotExist:
#log.info('could not get compra with orden_compra = %s' % int(cl['orden_compra']))
return
# ['CompraLineaItem', {'importe_total': 77.0, 'cantidad': '1', 'unidad_medida': 'UNIDAD/ES', 'orden_compra': '1356', 'detalle': 'FILTRO DE ACEITE P/VEHICULO - MARCA FIAT - MODELO DUCATO MAXI CARGO 2.8 P/D- PIEZA PH - 4847 A - MARCA MOTOR FIAT - MODELO MOTOR DUCATO MAXI CARGO 2.8 P/D - TIPO DIESEL - REPUESTO ORIGINAL - FRAM.', 'importe': 77.0}]
if ('importe' not in cl) or ('cantidad' not in cl): return
cant = re.match(r'(\d+)', cl['cantidad'])
if cant is None: return
cli = models.CompraLineaItem(compra=compra,
importe_unitario=str(cl['importe']),
cantidad=int(cant.groups()[0]),
detalle=cl['detalle'])
cli.save()
def import_compras(compras):
# ['CompraItem', {'proveedor': u'CASTA\xd1O EDUARDO ANIBAL', 'fecha': '2009-08-10', 'destino': u'Secretar\xeda de Salud', 'tipo_compra': 'CDVP', 'orden_compra': '1327', 'observaciones': 'FIAT DUCATO MAXICARGO 2.8 TD-PAT.GYQ 769', 'importe': 350.0}]
for c in compras:
transaction.commit_on_success(_import_compra(c))
def import_compra_lineas(compra_lineas):
for cl in compra_lineas:
transaction.commit_on_success(_import_compralinea(cl))
def load_lines():
compras = []
compra_lineas = []
for line in sys.stdin:
r = simplejson.loads(line)
if r[0] == "CompraItem": compras.append(r[1])
elif r[0] == "CompraLineaItem": compra_lineas.append(r[1])
import_compras(compras)
import_compra_lineas(compra_lineas)
if __name__ == '__main__':
load_lines()