Added some models
Some checks failed
CI / scan_ruby (push) Has been cancelled
CI / scan_js (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
CI / system-test (push) Has been cancelled

User
Item
Department
Categorie
AssignmentLog
Room
This commit is contained in:
2026-05-21 15:36:23 +02:00
parent 7b02520b6c
commit b7f0c35378
27 changed files with 387 additions and 2 deletions

36
app/models/item.rb Normal file
View File

@@ -0,0 +1,36 @@
class Item < ApplicationRecord
belongs_to :category
belongs_to :user, optional: true # Optional, falls im Raum oder Lager
belongs_to :room, optional: true # Optional, falls beim User oder Lager
has_many :assignment_logs, dependent: :destroy
validates :name, :sku, presence: true
validates :sticker_id, :serial_number, presence: true, uniqueness: true
# Validierung: Darf nicht gleichzeitig einem User UND einem Raum gehören
validate :either_user_or_room
# Überwacht Besitzer- oder Raumwechsel für die Historie
before_save :track_assignment_changes, if: -> { will_save_change_to_user_id? || will_save_change_to_room_id? }
private
def either_user_or_room
if user_id.present? && room_id.present?
errors.add(:base, "Ein Artikel kann nicht gleichzeitig einem Benutzer und einem Raum zugewiesen sein.")
end
end
def track_assignment_changes
# 1. Altes Log-Buch schließen, falls es eine vorherige Zuweisung gab
if user_id_was.present? || room_id_was.present?
last_log = assignment_logs.find_by(user_id: user_id_was, room_id: room_id_was, returned_at: nil)
last_log&.update(returned_at: Time.current)
end
# 2. Neues Log-Buch öffnen für den neuen Inhaber oder den neuen Raum
if user_id.present? || room_id.present?
assignment_logs.build(user_id: user_id, room_id: room_id, assigned_at: Time.current)
end
end
end