diff options
| author | dam <dam@gudinoff> | 2022-01-06 11:39:06 +0000 |
|---|---|---|
| committer | dam <dam@gudinoff> | 2022-01-06 11:39:06 +0000 |
| commit | 0eeacf3d142b40427ea5ca5b2806fe714c00f9b4 (patch) | |
| tree | 4371c058fdb67f32508721eb657711a2c1e705d8 /logic/database.gd | |
| parent | 6a2887783f19e0a94db00dea014e1065b87e626c (diff) | |
| download | surgery-log-0eeacf3d142b40427ea5ca5b2806fe714c00f9b4.tar.zst surgery-log-0eeacf3d142b40427ea5ca5b2806fe714c00f9b4.zip | |
Isolate database entry code to avoid cyclic references.
Diffstat (limited to 'logic/database.gd')
| -rw-r--r-- | logic/database.gd | 73 |
1 files changed, 7 insertions, 66 deletions
diff --git a/logic/database.gd b/logic/database.gd index 47cddbc..551b9bf 100644 --- a/logic/database.gd +++ b/logic/database.gd @@ -2,26 +2,6 @@ extends ItemList class_name Database const DATABASE_FILE_PATH: String = "user://database.csv" -const DATE_SEPARATOR: String = "-" -const DATE_FORMAT: String = "%04d-%02d-%02d" -const ENTRY_PROTOTYPE: Dictionary = { - "process_id": "", - "surgery_id": "", - "place": "", - "date": "", - "date_year": 0, - "date_month": 0, - "date_day": 0, - "anesthesia": "", - "first_assistant": "", - "type": "", - "sub_type": "", - "sub_sub_type": "", - "pathology": "", - "intervention": "", - "is_urgency": false, - "notes": "", -} const POINTER_VELOCITY_DECAYING_FACTOR: float = 2.5 var db: Array @@ -30,7 +10,7 @@ var staged_idx: int var is_pointer_dragging := false var pointer_drag_velocity := 0.0 -onready var stage := get_node("/root/main/stage") #as Stage # @DAM Solve cyclic load. +onready var stage := get_node("/root/main/stage") as Stage onready var delete_button := get_node("actions/delete") as Button onready var edit_button := get_node("actions/edit") as Button onready var add_button := get_node("actions/add") as Button @@ -85,7 +65,7 @@ func _notification(what: int): func get_entry_view(database_entry: Dictionary) -> String: - return "%6s | %6s | %s" % [database_entry.process_id, database_entry.surgery_id, get_entry_date(database_entry)] + return "%6s | %6s | %s" % [database_entry.process_id, database_entry.surgery_id, DatabaseEntry.get_entry_date(database_entry)] func item_selected(index: int): @@ -120,7 +100,7 @@ func edit_action(): func add_action(): self.visible = false stage.visible = true - var staged := instance_entry() + var staged := DatabaseEntry.instance_entry() stage.set_stage(staged) @@ -129,7 +109,7 @@ func scroll_down(): func save_stage(entry: Dictionary): - entry = instance_entry(entry) # @DAM Maybe we could not be creating endless dictionaries? + entry = DatabaseEntry.instance_entry(entry) # @DAM Maybe we could not be creating endless dictionaries? var next_selected_idx: int if staged_idx >= 0: db[staged_idx] = entry @@ -170,7 +150,7 @@ func load_database(file_path: String = DATABASE_FILE_PATH): is_first_line = false headers = csv_entry continue - var entry = ENTRY_PROTOTYPE.duplicate(true) + var entry = DatabaseEntry.instance_entry() for idx in headers.size(): var field_name := headers[idx] var field_value := csv_entry[idx] @@ -187,7 +167,7 @@ func load_database(file_path: String = DATABASE_FILE_PATH): func store_database(file_path: String = DATABASE_FILE_PATH): var file := File.new() file.open(file_path, File.WRITE) - var header := PoolStringArray(ENTRY_PROTOTYPE.keys()) + var header := PoolStringArray(DatabaseEntry.ENTRY_PROTOTYPE.keys()) file.store_csv_line(header) var entry := PoolStringArray() for it in db: @@ -203,52 +183,13 @@ func clear_database(save_changes: bool = false): store_database() -static func instance_entry(params: Dictionary = {}) -> Dictionary: - var new_entry := ENTRY_PROTOTYPE.duplicate(true) - new_entry.process_id = params.get("process_id", "") - new_entry.surgery_id = params.get("surgery_id", "") - new_entry.place = params.get("place", "") - - var today = OS.get_date() - new_entry.date_year = params.get("date_year", today.year) - new_entry.date_month = params.get("date_month", today.month) - new_entry.date_day = params.get("date_day", today.day) - new_entry.date = params.get("date", get_entry_date(new_entry)) # @DAM We should store only one version of the date. - - new_entry.anesthesia = params.get("anesthesia", "") - new_entry.first_assistant = params.get("first_assistant", "") - new_entry.type = params.get("type", "") - new_entry.sub_type = params.get("sub_type", "") - new_entry.sub_sub_type = params.get("sub_sub_type", "") - new_entry.pathology = params.get("pathology", "") - new_entry.intervention = params.get("intervention", "") - new_entry.is_urgency = params.get("is_urgency", false) - new_entry.notes = params.get("notes", "") - - return new_entry - - -static func get_entry_date(entry: Dictionary) -> String: - return DATE_FORMAT % [entry.date_year, entry.date_month, entry.date_day] - - -static func set_entry_date(entry: Dictionary, date: String): - date = date.strip_edges().replace(" ", DATE_SEPARATOR).replace("/", DATE_SEPARATOR).replace("\\", DATE_SEPARATOR) - var year_month_idx := date.find(DATE_SEPARATOR) - var month_day_idx := date.find(DATE_SEPARATOR, year_month_idx + 1) - entry.date = date - entry.date_year = int(date.substr(0, year_month_idx)) - entry.date_month = int(date.substr(year_month_idx + 1, month_day_idx - year_month_idx - 1)) - entry.date_day = int(date.substr(month_day_idx + 1)) - - func fake_database(save_changes: bool = false): clear_database() for idx in range(500): var date_year = 1 + int(float(idx) / 365.0) var date_month = idx % 12 var date_day = idx % 365 - var fake_entry = instance_entry({ + var fake_entry = DatabaseEntry.instance_entry({ "process_id": "%06d" % idx, "surgery_id": "s%05d" % idx, "date": "%04d-%02d-%02d" % [date_year, date_month, date_day] |
