def _create_order(api, customer, useremail, form_data, documents=None, orderlines=None): """ speichert einen neuen Auftrag via RobotRock """ order = {'customer': customer.kundennr, 'erfasst_von': useremail, 'source': 'FF'} # drei moegliche Quellen: "FF": Fullfillment, # "SV": Serviceauftrag, # "WS": Webshop # Service-Aufträge als solche markieren if customer.kundennr == '66663': order['source'] = 'SV' # zuerst bauen wir uns die Basis-Felder zusammen fields = ['kundenauftragsnr', 'name1', 'name2', 'strasse', 'plz', 'ort', 'land', 'phone', 'mobil', 'mail'] for field in fields: order[field] = form_data[field] # haben wir eine einzelne Bestellposition bekommen? ic = CreateApiResource('inventory/Price') eap = CreateApiResource('inventory/EAP') order['orderlines'] = [] if 'orderline_artnr' in form_data: artnr = form_data['orderline_artnr'] preis = ic.preis(artnr) name = eap.fetch(artnr).get('name', '???') order['orderlines'].append({'artnr': artnr, 'name': name, 'menge': form_data['orderline_menge'], 'preis': preis}) # oder haben wir eine ganze Liste von Bestellpositionen? if orderlines: for form in orderlines: artnr = form.cleaned_data['artnr'] preis = ic.preis(artnr) order['orderlines'].append({'artnr': artnr, 'name': form.cleaned_data['name'], 'menge': form.cleaned_data['menge'], 'preis': preis}) # sollen wir noch Zusatzdokumente anhaengen? if documents is None: documents = [] order['dokumente'] = [] for filename, data in documents: #try: order['dokumente'].append({'name': filename, 'content': data.encode('base64')}) #except Exception as ex: # pass # Handling-Gebühren als eigenständige Position order['additional_expenses'] = customer.additional_expenses # XXX: CB: Warum wird die api Variable bis hierher durchgeschleift? # Reicht es nicht, api hier erst zu initialisieren return api.create(order)
class LieferscheinGenerator(JasperGenerator): """ Der Generator fuer die Lieferschein-PDFs bei Serviceauftraegen """ def __init__(self): super(LieferscheinGenerator, self).__init__() self.reportname = os.path.abspath(os.path.join(os.path.dirname(__file__), 'reports', 'Lieferschein.jrxml')) self.xpath = 'lieferscheine/lieferschein/position' self.root = ET.Element('lieferscheine') self.eap = CreateApiResource('inventory/EAP') def generate_xml(self, data): """ erzeugt das XML-File mit den Lieferscheindaten als Eingabe fuer Jasper """ os.environ['PYJASPER_SERVLET_URL'] = getattr(settings, 'PYJASPER_SERVLET_URL', None) ET.SubElement(self.root, 'generator').text = '__revision__' return self.lieferschein2xml(*data) def lieferschein2xml(self, order_form, orderlines_formset): """ Generic functionality to turn a Lieferschein object into XML.""" sendung = ET.SubElement(self.root, 'lieferschein') data = order_form.cleaned_data ET.SubElement(sendung, 'designator').text = data['kundenauftragsnr'] ET.SubElement(sendung, 'lieferscheinnr').text = '' ET.SubElement(sendung, 'liefer_date').text = '' ET.SubElement(sendung, 'kommissionierbelegnr').text = '' ET.SubElement(sendung, 'auftragsnr').text = '' ET.SubElement(sendung, 'auftragsnr_kunde').text = data['kundenauftragsnr'] ET.SubElement(sendung, 'warenempfaenger').text = data.get('name1', '') ET.SubElement(sendung, 'name1').text = data.get('name1', '') ET.SubElement(sendung, 'name2').text = data.get('name2', '') ET.SubElement(sendung, 'strasse').text = data.get('strasse') ET.SubElement(sendung, 'plz').text = data.get('plz') ET.SubElement(sendung, 'ort').text = data.get('ort') ET.SubElement(sendung, 'land').text = data.get('land') ET.SubElement(sendung, 'anfangstext').text = data.get('freitext', '') for form in orderlines_formset.forms: artnr = form.cleaned_data.get('artnr') product = self.eap.fetch(artnr) pos = ET.SubElement(sendung, 'position') ET.SubElement(pos, 'menge').text = str(form.cleaned_data['menge']) ET.SubElement(pos, 'artnr').text = artnr ET.SubElement(pos, 'name').text = form.cleaned_data['name'] ET.SubElement(pos, 'ean').text = product.get('ean', '') return self.root
def check_availability(request): """ Verfügbarkeit einer Bestellposition überprüfen. Wenn der entsprechende Artikel fuer den jeweiligen Kunden lieferbar ist wird ein HTML-Snippet mit der Orderline gerendert und zurueckgeliefert, damit es dann in der Tabelle der Bestellpositionen angezeigt werden kann. """ # ueberprueft die Parameter artnr = request.GET.get('artnr') try: menge = int(request.GET.get('menge')) except ValueError: return render_to_json({'result': 'does_not_exist', 'reason': 'invalid article or quantity'}) if not (menge and artnr): return render_to_json({'result': 'does_not_exist', 'reason': 'invalid article or quantity'}) # eap Infos holen api = CreateApiResource('inventory/EAP') eap = api.fetch(artnr) if not eap: return render_to_json({'result': 'does_not_exist', 'reason': 'invalid article or quantity'}) try: # zuerst die Verfuegbarkeit if not filter(lambda entry: entry['articles'] and entry['automatisch_moeglich'], CreateApiResource('inventory/Alternatives').read(menge, artnr)): NonAvailable.objects.create(menge=menge, artnr=artnr, customer=request.customer.designator) return render_to_json({'result': 'not_available'}) # jetzt den Preis und den Namen api = CreateApiResource('inventory/Price') preis = api.preis(artnr, request.customer.kundennr) * menge, form = OrderlineForm(prefix='form-%d' % int(time()), initial={'menge': menge, 'artnr': artnr, 'preis': '%.2f EUR' % preis, 'name': eap.get('name', '???')}); t = loader.get_template('beliza/orders/orderline.html') html = t.render(Context({'form': form})) return render_to_json({'result': 'ok', 'html': html}) except Exception, exc: print "------------> debug 100, %s" % exc if str(exc).find('unbekannt') != -1: return render_to_json({'result': 'does_not_exist'})