Fix software-compliance report + relationshiptypes zero-dates

- Add applications.isrequired (model + migration 7c02 + create/update + form
  checkbox). The software-compliance report compared required apps against
  installs but no such flag existed, so it 500'd; now it works.
- Repair relationshiptypes rows with 0000-00-00 createddate/modifieddate
  (partof/connectedto) to real timestamps.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
cproudlock
2026-06-26 10:11:24 -04:00
parent b0a0670fcd
commit a58feebe7a
4 changed files with 42 additions and 1 deletions

View File

@@ -65,6 +65,10 @@
<input type="checkbox" v-model="form.isprinter" />
Printer App
</label>
<label>
<input type="checkbox" v-model="form.isrequired" />
Required on all PCs
</label>
<label>
<input type="checkbox" v-model="form.ishidden" />
Hidden
@@ -168,6 +172,7 @@ const form = ref({
isinstallable: false,
islicenced: false,
isprinter: false,
isrequired: false,
ishidden: false,
applicationlink: '',
documentationpath: '',
@@ -196,6 +201,7 @@ onMounted(async () => {
isinstallable: app.isinstallable || false,
islicenced: app.islicenced || false,
isprinter: app.isprinter || false,
isrequired: app.isrequired || false,
ishidden: app.ishidden || false,
applicationlink: app.applicationlink || '',
documentationpath: app.documentationpath || '',
@@ -224,6 +230,7 @@ async function saveApplication() {
isinstallable: form.value.isinstallable,
islicenced: form.value.islicenced,
isprinter: form.value.isprinter,
isrequired: form.value.isrequired,
ishidden: form.value.ishidden,
applicationlink: form.value.applicationlink || null,
documentationpath: form.value.documentationpath || null,

View File

@@ -0,0 +1,29 @@
"""Add applications.isrequired
Backs the software-compliance report, which compares required applications
against what is installed per PC. There was no such flag before, so the report
errored.
Revision ID: 7c02_app_isrequired
Revises: 7c01_drop_legacy_machine
Create Date: 2026-06-26
"""
from alembic import op
import sqlalchemy as sa
revision = '7c02_app_isrequired'
down_revision = '7c01_drop_legacy_machine'
branch_labels = None
depends_on = None
def upgrade():
op.add_column('applications', sa.Column(
'isrequired', sa.Boolean(), nullable=True, server_default=sa.false(),
comment='Required on all PCs (drives the software-compliance report)'))
def downgrade():
op.drop_column('applications', 'isrequired')

View File

@@ -131,6 +131,7 @@ def create_application():
ishidden=data.get('ishidden', False),
isprinter=data.get('isprinter', False),
islicenced=data.get('islicenced', False),
isrequired=data.get('isrequired', False),
image=data.get('image')
)
@@ -168,7 +169,7 @@ def update_application(app_id: int):
fields = [
'appname', 'appdescription', 'supportteamid', 'isinstallable',
'applicationnotes', 'installpath', 'applicationlink', 'documentationpath',
'ishidden', 'isprinter', 'islicenced', 'image', 'isactive'
'ishidden', 'isprinter', 'islicenced', 'isrequired', 'image', 'isactive'
]
changes = {}

View File

@@ -53,6 +53,10 @@ class Application(BaseModel):
ishidden = db.Column(db.Boolean, default=False)
isprinter = db.Column(db.Boolean, default=False)
islicenced = db.Column(db.Boolean, default=False)
isrequired = db.Column(
db.Boolean, default=False,
comment='Required on all PCs (drives the software-compliance report)'
)
image = db.Column(db.String(255))
# Relationships