12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- # -*- coding: utf-8 -*-
- import BeautifulSoup
- import datetime
- import dingguo
- import email
- import re
- def parse_order_confirmation_mail(mail):
- assert isinstance(mail, email.message.Message)
- doc = BeautifulSoup.BeautifulSoup(
- mail.get_payload()[1].get_payload(decode = True).decode('utf-8')
- )
-
- if doc.find(text = re.compile(ur'Thomann')) is None:
- raise Exception('no thomann order confirmation')
-
- order = dingguo.Order(
- customer_id = doc.find(text = re.compile(ur'Kundennummer')).parent.nextSibling.text,
- order_id = doc.find(text = re.compile(ur'Auftragsnummer')).parent.nextSibling.text,
- order_date = datetime.datetime.strptime(
- doc.find(text = re.compile(ur'Auftragsdatum')).parent.nextSibling.text,
- '%d.%m.%Y %H:%M',
- ).date(),
- platform = u'thomann',
- )
-
- for product_id_label_tag in doc.findAll(text = re.compile(ur'Artikelnummer')):
- article_tag = product_id_label_tag.findParents('td')[1]
- name_quantity_tag = article_tag.find('strong')
- quantity, name = re.match(ur'(\d)x (.*)', name_quantity_tag.text).groups()
- currency, price = re.match(
- ur'(.) (\d+,\d+)',
- product_id_label_tag.parent.nextSibling.text,
- ).groups()
- order.items.append(dingguo.Article(
- features = name_quantity_tag.parent.nextSibling.text,
- name = name,
- price_brutto = dingguo.Sum(float(price.replace(',', '.')), currency),
- product_id = product_id_label_tag.nextSibling.text,
- quantity = int(quantity),
- ))
- return [order]
|