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
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
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
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']
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')