commit a22b07ab5d20f63c6f76df397fbec6350c904657 Author: Celso Gonzalez Date: Fri Nov 2 17:27:32 2018 +0100 first commit diff --git a/enlshop.py b/enlshop.py new file mode 100644 index 0000000..7554209 --- /dev/null +++ b/enlshop.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import csv +import glob +import email +import quopri +import decimal + +pedidos = {} +totales = {} +pasta = {'confirmada': 0, 'fallo': 0, 'recibida': 0} + +translations = { + 'Pack de Biocards': 'Biocard Pack', + 'Camiseta Recursion Prime - L': 'Recursion Prime t-shirt - Blanco / White', + 'Camiseta Recursion Prime - Negro / Black': 'Recursion Prime t-shirt - Negro / Black', + 'Camiseta Recursion Prime - Verde / Green': 'Recursion Prime t-shirt - Verde / Green', + 'Camiseta Recursion Prime - XXXL': 'Recursion Prime t-shirt - Verde / Green', + 'Dessuadora Recursion Prime - M': 'Recursion Prime hoodie - M', + 'Samarreta Recursion Prime - Negro / Black': 'Recursion Prime t-shirt - Negro / Black', + 'Sudadera Recursion Prime - L': 'Recursion Prime hoodie - L', +} + + +def check_tpv(lines): + pago_ok = False + for line in lines: + if 'Se ha realizado el pago correcto' in line: + pago_ok = True + elif u'Número de operación' in line: + pedido = int(line.split(':')[1]) + elif '- Importe:' in line: + importe = decimal.Decimal(line.split(':')[1]) + if pago_ok: + return pedido, importe + return None + +def check_paypal(lines): + pago_ok = False + for line in lines: + if 'Pago enviado a enlighthouse.es@gmail.com' in line: + pago_ok = True + elif u'Pago €' in line: + importe = decimal.Decimal(line.split(' ')[1][1:].replace(',', '.')) + elif 'Id. de factura' in line: + pedido = int(line.split(' ')[3][3:]) + if pago_ok: + return pedido, importe + return None + + + + + +def check_file(item): + with open(item) as fp: + msg = email.message_from_file(fp) + + for part in msg.walk(): + if part.get_content_type() == 'text/plain': + texto = part.get_payload(decode=True) + #print(part.get_encode()) + texto = texto.decode('utf-8') + lines = texto.split('\n') + lines = [ line.strip() for line in lines ] + lines = list(filter(None, lines)) + elif part.get_content_type() == 'text/html': + html = quopri.decodestring(part.get_payload()) + if 'TPV' in msg['Subject']: + pedido, importe = check_tpv(lines) + elif 'Notifi' in msg['Subject']: + pedido, importe = check_paypal(lines) + else: + print 'WTF: ', item + return + + try: + if pedidos[pedido]['importe'] == importe: + pasta['confirmada'] += importe + for item in pedidos[pedido]['producto']: + producto, talla, cantidad = item + if (producto, talla) in totales: + totales[(producto, talla)] += cantidad + else: + totales[(producto, talla)] = cantidad + else: + print 'FAIL ', pedidos[pedido], importe + pasta['fallo'] += importe + except KeyError: + print 'NO DATA ', pedido, importe + pasta['recibida'] += importe + + + + +with open('orders.csv') as ficheroPedidos: + reader = csv.reader(ficheroPedidos) + for item in reader: + try: + idPedido = int(item[0]) + except ValueError: + continue + if item[10] in translations: + item[10] = translations[item[10]] + if idPedido in pedidos: + pedidos[idPedido]['producto'].append((item[10], item[11], int(item[12]))) + pedidos[idPedido]['importe'] += int(item[12]) * decimal.Decimal(item[13]) + else: + pedidos[idPedido] = { + 'pedido': idPedido, + 'producto': [(item[10], item[11], int(item[12]))], + 'importe': int(item[12]) * decimal.Decimal(item[13]) + } + +mails = glob.glob('Pagos/*/*') +for item in mails: + check_file(item) + + +for k,v in totales.items(): + print k,v +print pasta