Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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'})