91 lines
2.6 KiB
Python
91 lines
2.6 KiB
Python
import socket
|
|
import fdb
|
|
|
|
|
|
def get_medicus_connection():
|
|
"""
|
|
Připojí se k Firebird medicus.fdb podle názvu počítače.
|
|
Vrátí fdb.Connection nebo vyhodí RuntimeError pro neznámý počítač.
|
|
"""
|
|
computer_name = socket.gethostname().upper()
|
|
dsn_map = {
|
|
"LEKAR": r"localhost:M:\medicus\data\medicus.fdb",
|
|
"SESTRA": r"192.168.1.10:m:\medicus\data\medicus.fdb",
|
|
"LENOVO": r"192.168.1.10:m:\medicus\data\medicus.fdb",
|
|
}
|
|
dsn = dsn_map.get(computer_name, r"localhost:c:\medicus 3\data\medicus.fdb")
|
|
print(f"[medicus_db] Připojuji se jako {computer_name} → {dsn}")
|
|
return fdb.connect(dsn=dsn, user="SYSDBA", password="masterkey", charset="win1250")
|
|
|
|
|
|
class MedicusDB:
|
|
|
|
def __init__(self, host, db_path, user="SYSDBA", password="masterkey", charset="WIN1250"):
|
|
self.conn = fdb.connect(
|
|
host=host,
|
|
database=db_path,
|
|
user=user,
|
|
password=password,
|
|
charset=charset
|
|
)
|
|
self.cur = self.conn.cursor()
|
|
|
|
def get_fak_kapitace(self, as_dict=False):
|
|
sql = """
|
|
SELECT
|
|
fak.id,
|
|
fak.cisfak,
|
|
fak.poj,
|
|
fak.kapdetail
|
|
FROM fak
|
|
WHERE fak.kapdetail IS NOT NULL
|
|
AND fak.kapdetail <> ''
|
|
"""
|
|
if as_dict:
|
|
return self.query_dict(sql)
|
|
return self.query(sql)
|
|
|
|
def query(self, sql, params=None):
|
|
self.cur.execute(sql, params or ())
|
|
return self.cur.fetchall()
|
|
|
|
def query_dict(self, sql, params=None):
|
|
self.cur.execute(sql, params or ())
|
|
cols = [d[0].strip().lower() for d in self.cur.description]
|
|
return [dict(zip(cols, row)) for row in self.cur.fetchall()]
|
|
|
|
def get_active_registered_patients(self, as_dict=False):
|
|
sql = """
|
|
SELECT
|
|
kar.rodcis,
|
|
kar.prijmeni,
|
|
kar.jmeno,
|
|
kar.poj
|
|
FROM registr
|
|
JOIN kar ON registr.idpac = kar.idpac
|
|
WHERE registr.datum_zruseni IS NULL
|
|
AND registr.priznak IN ('A','D','V')
|
|
AND kar.rodcis IS NOT NULL
|
|
AND kar.rodcis <> ''
|
|
AND kar.vyrazen <> 'A'
|
|
"""
|
|
if as_dict:
|
|
return self.query_dict(sql)
|
|
return self.query(sql)
|
|
|
|
def get_all_patients(self, as_dict=False):
|
|
sql = """
|
|
SELECT
|
|
kar.rodcis,
|
|
kar.prijmeni,
|
|
kar.jmeno,
|
|
kar.poj
|
|
FROM kar
|
|
"""
|
|
if as_dict:
|
|
return self.query_dict(sql)
|
|
return self.query(sql)
|
|
|
|
def close(self):
|
|
self.conn.close()
|