generated from dopt-python/py311
255 lines
8.7 KiB
Python
255 lines
8.7 KiB
Python
import polars as pl
|
|
import sqlalchemy as sql
|
|
from sqlalchemy import Column, Table
|
|
|
|
from umbreit.types import PolarsNullValues, PolarsSchema
|
|
|
|
metadata = sql.MetaData()
|
|
|
|
|
|
class OracleBoolean(sql.types.TypeDecorator):
|
|
impl = sql.VARCHAR(1)
|
|
cache_ok = True
|
|
|
|
def process_bind_param(
|
|
self,
|
|
value: bool | None,
|
|
dialect,
|
|
) -> str | None:
|
|
if value is None:
|
|
return None
|
|
return "Y" if value else "N"
|
|
|
|
def process_result_value(
|
|
self,
|
|
value: sql.VARCHAR | None,
|
|
dialect,
|
|
) -> bool | None:
|
|
if value is None:
|
|
return None
|
|
return value == "Y"
|
|
|
|
|
|
ext_bedpbed = Table(
|
|
"ext_bedpbed",
|
|
metadata,
|
|
Column("BEDARFNR", sql.Integer, primary_key=True, autoincrement=False, nullable=False),
|
|
Column(
|
|
"BEDP_SEQUENZ", sql.Integer, primary_key=True, autoincrement=False, nullable=False
|
|
),
|
|
Column("BEDP_TITELNR", sql.Integer, nullable=False),
|
|
Column("BEDP_MAN", sql.Integer, nullable=False),
|
|
Column("VERLAGSNR", sql.Integer, nullable=False),
|
|
Column("PRODUKT_GR", sql.Integer, nullable=True),
|
|
Column("BEARBEITER", sql.String(10), nullable=False),
|
|
Column("BEDP_MENGE_BEDARF", sql.Integer, nullable=True),
|
|
Column("BEDP_MENGE_VERKAUF", sql.Integer, nullable=True),
|
|
Column("BEDP_MENGE_ANFRAGE", sql.Integer, nullable=True),
|
|
Column("BEDP_MENGE_BESTELLUNG", sql.Integer, nullable=True),
|
|
Column("BEDP_MENGE_FREI", sql.Integer, nullable=True),
|
|
Column("BEDP_MENGE_BEDARF_VM", sql.Integer, nullable=True),
|
|
Column("BEDP_BESTELLWEG", sql.String(2), nullable=True),
|
|
Column("BEDP_DATUM_LIEFERUNG", sql.Date, nullable=True),
|
|
)
|
|
|
|
ext_bedpbed_schema_map: PolarsSchema = {
|
|
"BEDARFNR": pl.UInt32,
|
|
"BEDP_SEQUENZ": pl.UInt32,
|
|
"BEDP_TITELNR": pl.UInt32,
|
|
"BEDP_MAN": pl.UInt8,
|
|
"VERLAGSNR": pl.UInt32,
|
|
"PRODUKT_GR": pl.UInt8,
|
|
"BEARBEITER": pl.String,
|
|
"BEDP_MENGE_BEDARF": pl.UInt32,
|
|
"BEDP_MENGE_VERKAUF": pl.UInt32,
|
|
"BEDP_MENGE_ANFRAGE": pl.UInt32,
|
|
"BEDP_MENGE_BESTELLUNG": pl.UInt32,
|
|
"BEDP_MENGE_FREI": pl.UInt32,
|
|
"BEDP_MENGE_BEDARF_VM": pl.UInt32,
|
|
"BEDP_BESTELLWEG": pl.String,
|
|
"BEDP_DATUM_LIEFERUNG": pl.Date,
|
|
}
|
|
|
|
ext_bedpbed_null_values: PolarsNullValues = {
|
|
"BEDP_MENGE_BEDARF": "-1",
|
|
}
|
|
|
|
ext_titel_info = Table(
|
|
"ext_titel_info",
|
|
metadata,
|
|
Column("TI_NUMMER", sql.Integer, primary_key=True, autoincrement=False, nullable=False),
|
|
Column("MANDFUEHR", sql.Integer, primary_key=True, autoincrement=False, nullable=False),
|
|
Column("TI_KURZTEXT", sql.String(225), nullable=False),
|
|
Column("VERLAGSNR", sql.Integer, nullable=False),
|
|
Column("VERLAG_SUCHBEGRIFF", sql.String(225), nullable=False),
|
|
Column("MELDENUMMER", sql.Integer, nullable=False),
|
|
Column("DATUM_LIEFERBAR", sql.DateTime, nullable=False),
|
|
Column("MENGE_VORMERKER", sql.Integer, nullable=True),
|
|
Column("PRODUKTGRUPPE", sql.Integer, nullable=False),
|
|
Column("PRODUKTGRUPPE_TYP", sql.String(3), nullable=False),
|
|
Column("EINKAEUFER", sql.String(10), nullable=False),
|
|
Column("BESTAND_VERFUEGBAR", sql.Integer, nullable=False),
|
|
)
|
|
|
|
ext_titel_info_schema_map: PolarsSchema = {
|
|
"TI_NUMMER": pl.UInt32,
|
|
"MANDFUEHR": pl.UInt8,
|
|
"TI_KURZTEXT": pl.String,
|
|
"VERLAGSNR": pl.UInt32,
|
|
"VERLAG_SUCHBEGRIFF": pl.String,
|
|
"MELDENUMMER": pl.UInt8,
|
|
"DATUM_LIEFERBAR": pl.Datetime,
|
|
"MENGE_VORMERKER": pl.UInt32,
|
|
"PRODUKTGRUPPE": pl.UInt16,
|
|
"PRODUKTGRUPPE_TYP": pl.String,
|
|
"EINKAEUFER": pl.String,
|
|
"BESTAND_VERFUEGBAR": pl.UInt64,
|
|
}
|
|
|
|
ext_titel_info_null_values: PolarsNullValues = {}
|
|
|
|
EXT_BESPBES_INFO = Table(
|
|
"EXT_BESPBES_INFO",
|
|
metadata,
|
|
Column("BES_DATUM", sql.Date, nullable=False),
|
|
Column("BESP_DAT_ERW", sql.Date, nullable=False),
|
|
Column("BESP_MENGE", sql.Integer, nullable=False),
|
|
Column("BESP_STATUS", sql.Integer, nullable=False),
|
|
Column("BESP_GRUND", sql.String(2), nullable=True),
|
|
Column("BESP_MAND", sql.Integer, nullable=False),
|
|
Column("BESP_TITELNR", sql.Integer, nullable=False),
|
|
Column("BESPAA", sql.String(1), nullable=True),
|
|
Column("BESP_ART", sql.String(1), nullable=True),
|
|
Column("BESVAK999", sql.String(1), nullable=True),
|
|
)
|
|
|
|
EXT_BESPBES_INFO_schema_map: PolarsSchema = {
|
|
"BES_DATUM": pl.Date,
|
|
"BESP_DAT_ERW": pl.Date,
|
|
"BESP_MENGE": pl.UInt32,
|
|
"BESP_STATUS": pl.UInt8,
|
|
"BESP_GRUND": pl.String,
|
|
"BESP_MAND": pl.UInt8,
|
|
"BESP_TITELNR": pl.UInt32,
|
|
"BESPAA": pl.String,
|
|
"BESP_ART": pl.String,
|
|
"BESVAK999": pl.String,
|
|
}
|
|
|
|
EXT_BESPBES_INFO_null_values: PolarsNullValues = {}
|
|
|
|
EXT_AUFPAUF = Table(
|
|
"EXT_AUFPAUF",
|
|
metadata,
|
|
Column("TITELNR", sql.Integer, primary_key=True, autoincrement=False, nullable=False),
|
|
Column("AUFTRAGSNUMMER", sql.Integer, nullable=False),
|
|
Column("AUFTRAGS_DATUM", sql.DateTime, nullable=False),
|
|
Column("AUFTRAGS_ART", sql.Integer, nullable=False),
|
|
Column("EINGANGS_ART", sql.String(2), nullable=False),
|
|
Column("DATUM_LIEFERUNG", sql.DateTime, nullable=True),
|
|
Column("AUFTRAGS_STATUS", sql.String(1), nullable=False),
|
|
Column("KUNDE_LIEFERUNG", sql.Integer, nullable=False),
|
|
Column("KUNDE_RECHNUNG", sql.Integer, nullable=False),
|
|
Column("MANDANT", sql.Integer, nullable=False),
|
|
Column("AUFP_POSITION", sql.Integer, nullable=False),
|
|
Column("AUFP_MENGE_AUFTRAG", sql.Integer, nullable=False),
|
|
Column("AUFP_MENGE_GELIEFERT", sql.Integer, nullable=False),
|
|
Column("AUFP_VORMERKUNG", sql.String(1), nullable=True),
|
|
Column("AUFP_DATUM_ANLAGE", sql.DateTime, nullable=False),
|
|
)
|
|
|
|
EXT_AUFPAUF_schema_map: PolarsSchema = {
|
|
"TITELNR": pl.UInt32,
|
|
"AUFTRAGSNUMMER": pl.UInt32,
|
|
"AUFTRAGS_DATUM": pl.Datetime,
|
|
"AUFTRAGS_ART": pl.UInt8,
|
|
"DATUM_LIEFERUNG": pl.Date,
|
|
"AUFTRAGS_STATUS": pl.String,
|
|
"KUNDE_LIEFERUNG": pl.UInt32,
|
|
"KUNDE_RECHNUNG": pl.UInt32,
|
|
"MANDANT": pl.UInt8,
|
|
"AUFP_POSITION": pl.UInt16,
|
|
"AUFP_MENGE_AUFTRAG": pl.UInt32,
|
|
"AUFP_MENGE_GELIEFERT": pl.UInt32,
|
|
"AUFP_VORMERKUNG": pl.String,
|
|
"AUFP_DATUM_ANLAGE": pl.Datetime,
|
|
}
|
|
|
|
EXT_AUFPAUF_null_values: PolarsNullValues = {}
|
|
|
|
# // queries and temp data
|
|
raw_data_query_schema_map: PolarsSchema = ext_bedpbed_schema_map.copy()
|
|
raw_data_query_schema_map.update(ext_titel_info_schema_map)
|
|
|
|
tmp_data = Table(
|
|
"EXT_TMP_BEDP_TINFO",
|
|
metadata,
|
|
Column("BEDARFNR", sql.Integer, primary_key=True, autoincrement=False, nullable=False),
|
|
Column(
|
|
"BEDP_SEQUENZ", sql.Integer, primary_key=True, autoincrement=False, nullable=False
|
|
),
|
|
Column("BEDP_TITELNR", sql.Integer, nullable=False),
|
|
Column("BEDP_MAN", sql.Integer, nullable=False),
|
|
Column("BEDP_MENGE_BEDARF_VM", sql.Integer, nullable=True),
|
|
Column("MELDENUMMER", sql.Integer, nullable=False),
|
|
Column("VERLAGSNR", sql.Integer, nullable=False),
|
|
Column("MENGE_VORMERKER", sql.Integer, nullable=True),
|
|
Column("MANDFUEHR", sql.Integer, primary_key=True, autoincrement=False, nullable=False),
|
|
)
|
|
|
|
tmp_data_schema_map = raw_data_query_schema_map
|
|
|
|
csv_tables: tuple[tuple[Table, PolarsSchema, PolarsNullValues], ...] = (
|
|
(ext_bedpbed, ext_bedpbed_schema_map, ext_bedpbed_null_values),
|
|
(ext_titel_info, ext_titel_info_schema_map, ext_titel_info_null_values),
|
|
(EXT_AUFPAUF, EXT_AUFPAUF_schema_map, EXT_AUFPAUF_null_values),
|
|
(EXT_BESPBES_INFO, EXT_BESPBES_INFO_schema_map, EXT_BESPBES_INFO_null_values),
|
|
)
|
|
|
|
# ** results
|
|
# ** Umbreit
|
|
EXT_DOPT_ERGEBNIS = Table(
|
|
"EXT_DOPT_ERGEBNIS",
|
|
metadata,
|
|
Column("ID", sql.Integer, nullable=False, primary_key=True, autoincrement=True),
|
|
Column("BEDARF_NR", sql.Integer, nullable=False),
|
|
Column("BEDARF_SEQUENZ", sql.Integer, nullable=False),
|
|
Column("VORLAGE", OracleBoolean, nullable=False),
|
|
Column("WF_ID", sql.Integer, nullable=False),
|
|
Column("BEST_MENGE", sql.Integer, nullable=True),
|
|
Column("FREIGABE_AUTO", OracleBoolean, nullable=False),
|
|
)
|
|
|
|
|
|
results_schema_map: PolarsSchema = {
|
|
"ID": pl.UInt64,
|
|
"BEDARF_NR": pl.UInt32,
|
|
"BEDARF_SEQUENZ": pl.UInt32,
|
|
"VORLAGE": pl.Boolean,
|
|
"WF_ID": pl.UInt16,
|
|
"BEST_MENGE": pl.UInt32,
|
|
"FREIGABE_AUTO": pl.Boolean,
|
|
}
|
|
|
|
map_data_to_result: dict[str, str] = {
|
|
"BEDARFNR": "BEDARF_NR",
|
|
"BEDP_SEQUENZ": "BEDARF_SEQUENZ",
|
|
}
|
|
|
|
# ** local
|
|
results_local = Table(
|
|
"results",
|
|
metadata,
|
|
Column("id", sql.Integer, nullable=False, primary_key=True, autoincrement=True),
|
|
Column("bedarf_nr", sql.Integer, nullable=False),
|
|
Column("bedarf_sequenz", sql.Integer, nullable=False),
|
|
Column("vorlage", sql.Boolean, nullable=False),
|
|
Column("wf_id", sql.Integer, nullable=False),
|
|
Column("best_menge", sql.Integer, nullable=True),
|
|
Column("freigabe_auto", sql.Boolean, nullable=False),
|
|
)
|
|
|
|
results_local_schema_map: PolarsSchema = {
|
|
k.lower(): v for (k, v) in results_schema_map.items()
|
|
}
|