Пример #1
0
def auftraege(mindate=None, maxdate=None, additional_conditions=None, limit=None):
    """
    Alle Aufträge ermitteln

    additional_conditions kann SQL-Bedingungen enthalten, die
    die Auftragssuche einschränken.

    TODO: Wenn Datum in additional_conditions, dann Datumsfelder überprüfen und ggf. konvertieren
    """

    warnings.warn("husoftm.auftraege is deprecated, use husoftm2.auftraege instead",
                  DeprecationWarning, stacklevel=2)
    conditions = ["AKSTAT<>'X'"]

    if mindate and maxdate:
        conditions.append("AKDTER BETWEEN %s AND %s" % (date2softm(mindate), date2softm(maxdate)))
    elif mindate:
        conditions.append("AKDTER > %s" % date2softm(mindate))
    elif maxdate:
        conditions.append("AKDTER < %s" % date2softm(maxdate))

    # You should REALLY know what you are doing!
    if additional_conditions:
        conditions.extend(additional_conditions)

    condition = " AND ".join(conditions)
    rows = get_connection().query('AAK00', ordering=['AKAUFN DESC', 'AKDTLT'], condition=condition, limit=limit)
    return rows
Пример #2
0
def bestellungen(mindate=None, maxdate=None, additional_conditions=None, limit=None):
    """Liefert eine Liste mit allen bestellten aber nicht stornierten Wareneingängen.

    >>> bestellungen()
    [{'artnr': u'64114',
      'bestellmenge': 300,
      'bestellnr': 43042,
      'created_by': 62,
      'dateifuehrungsschluessel': u'',
      'geliefert_kz': 0,
      'gelieferte_menge': 0,
      'lager': 16,
      'liefer_date': datetime.date(2009, 12, 24),
      'lieferant': u'90088',
      'menge_offen': 300,
      'position': 11,
      'status': u'',
      'streckengeschaeft': 0,
      'termin1_date': datetime.date(2009, 12, 24),
      'termin2_date': datetime.date(2009, 12, 24),
      'updated_by': 62,
      'wunsch2_date': datetime.date(2009, 12, 24),
      'wunsch_date': None,
      'zugang_date': None},
      ...]

    """

    conditions = ["BPSTAT<>'X'"]

    if mindate and maxdate:
        conditions.append("BPDTER BETWEEN %s AND %s" % (date2softm(mindate), date2softm(maxdate)))
    elif mindate:
        conditions.append("BPDTER > %s" % date2softm(mindate))
    elif maxdate:
        conditions.append("BPDTER < %s" % date2softm(maxdate))

    # You should REALLY know what you are doing!
    if additional_conditions:
        conditions.extend(additional_conditions)

    condition = " AND ".join(conditions)

    rows = get_connection().query('EBP00', ordering=['BPBSTN DESC', 'BPDTLT'], condition=condition, limit=limit)
    # AND BPKZAK=0 to get only the open ones
    return rows
Пример #3
0
def bestellungskoepfe(mindate=None, maxdate=None, additional_conditions=None, limit=None):
    conditions = ["BLSTAT<>'X'"]

    if mindate and maxdate:
        conditions.append("BPDTER BETWEEN %s AND %s" % (date2softm(mindate), date2softm(maxdate)))
    elif mindate:
        conditions.append("BPDTER > %s" % date2softm(mindate))
    elif maxdate:
        conditions.append("BPDTER < %s" % date2softm(maxdate))

    # You should REALLY know what you are doing!
    if additional_conditions:
        conditions.extend(additional_conditions)

    condition = " AND ".join(conditions)
    rows = get_connection('bestellungen.bestellungskoepfe').query('EBL00', ordering=['BLBSTN DESC', 'BLDTBE'], condition=condition, limit=limit)
    return rows
Пример #4
0
def rechnungen_for_kunde(kundennr, mindate=None):
    """Liefert eine Liste mit Rechnungsnummern zurück.

    Dies sind allerdings nur Rechnungen, die aus der Warenwirtschaft faktiuriert wurden. 'Rechnungen'
    (eigentlich mauell erstellte offenene Forderungen) aus der Buchhaltung sind hier nicht berücksichtigt.
    Die Nummern werden gemäss https://cybernetics.hudora.biz/intern/trac/wiki/NummernKreise
    mit dem Prefix RG zurückgegeben.
    """
    conditions = ["FKKDNR=%s" % sql_quote(pad('FKKDNR', kundennr))]
    if mindate:
        conditions.append("FKDTER >= %s AND FKRGNR <> 0" % date2softm(mindate))
    rows = get_connection().query(['AFK00'], fields=['FKRGNR'],
                   condition=" AND ".join(conditions))
    return ["RG%s" % row[0] for row in rows if str(row[0]) != '0']
Пример #5
0
def verkaufspreis(artnr, kundennr, bestelldatum=datetime.date.today()):
    """
    Verkaufspreis in Abh. von kundennr und artnr ermitteln.

    Höchste Priorität hat der für einen Kunden hinterlegt Preis.
    Zweithöchste Prio hat der für die Preisliste (Kundengruppe) hinterlegte Preis
    Niedrigste Prio hat der Listenpreis aus den Artikelstammdaten.

    Rückgabe ist ein dict mit Preis und Herkunft des Preises.

    >>> verkaufspreis('04711', 99954)
    {'preis': Decimal('14.00'), 'herkunft': 'Preisliste 95'}

    >>> verkaufspreis('04711', 98000)
    {'preis': Decimal('13.65'), 'herkunft': 'Listenpreis'}

    >>> verkaufspreis('04711', 94763)
    {'preis': Decimal('13.00'), 'herkunft': 'Kundenpreis'}

    """

    # Kundennr als Zeichenkette
    kundennr_str = sql_quote("%8s" % int(kundennr))
    date_str = sql_quote(date2softm(bestelldatum))
    artnr_str = sql_quote(artnr)

    # 1. Preis für Kunde hinterlegt?
    condition = ("PNSANR=PRSANR and PRANW='A' and PRSTAT=' ' and PNSTAT=' ' AND "
                 "PRARTN = %s and PRDTBI >= %s AND PRDTVO <= %s" % (artnr_str, date_str, date_str))

    condition_kunde = condition + " AND PRKDNR = %s" % kundennr_str
    rows = get_connection().query(['XPN00', 'XPR00'], fields=["PNPRB"], ordering='PRDTVO', condition=condition_kunde)

    if rows:
        return dict(preis=rows[0][0], herkunft='Kundenpreis')

    # 2. Preis aus Preislistennr. des Kunden ermitteln
    kdgruppe = get_connection().query('XXA00', fields='XAKGRP', condition='XAKDNR = %s' % kundennr_str)
    if kdgruppe and kdgruppe[0][0]:
        kdgruppe = kdgruppe[0][0]
        condition_gruppe = condition + " AND PRPRLK = %s" % sql_quote(kdgruppe)
        rows = get_connection().query(['XPN00', 'XPR00'], ordering='PRDTVO', condition=condition_gruppe)
        if rows:
            return dict(preis=rows[0]['preis'], herkunft='Preisliste %s' % kdgruppe)

    # 3. Listenpreis aus Artikelstammdaten
    return dict(preis=preis(artnr), herkunft='Listenpreis')