Skip to content

Commit c3fed5f

Browse files
authored
Merge pull request #32 from xnodeoncode/development
Minor Fixes and Enhancements Patch Release
2 parents 2e204b7 + d523d35 commit c3fed5f

15 files changed

Lines changed: 236 additions & 109 deletions

File tree

3-Aquiis.UI.Shared/wwwroot/js/theme.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,9 @@ if (typeof localStorage !== "undefined") {
115115

116116
// Start observing after a short delay to let Blazor initialize
117117
setTimeout(() => {
118-
observer.observe(document.body, {
119-
childList: true,
120-
subtree: true,
118+
observer.observe(document.documentElement, {
119+
attributes: true,
120+
attributeFilter: ["data-bs-theme", "data-brand-theme"],
121121
});
122122
}, 1000);
123123

4-Aquiis.SimpleStart/Aquiis.SimpleStart.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
<MigrationsDirectory>Data/Migrations</MigrationsDirectory>
99

1010
<!-- Semantic Versioning -->
11-
<Version>1.1.0</Version>
12-
<AssemblyVersion>1.1.0.0</AssemblyVersion>
13-
<FileVersion>1.1.0.0</FileVersion>
14-
<InformationalVersion>1.1.0</InformationalVersion>
11+
<Version>1.1.1</Version>
12+
<AssemblyVersion>1.1.1.0</AssemblyVersion>
13+
<FileVersion>1.1.1.0</FileVersion>
14+
<InformationalVersion>1.1.1</InformationalVersion>
1515
</PropertyGroup>
1616

1717
<ItemGroup>

4-Aquiis.SimpleStart/ElectronHostHook/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

4-Aquiis.SimpleStart/ElectronHostHook/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "aquiis-simplestart-electron",
3-
"version": "1.0.0",
3+
"version": "1.1.1",
44
"description": "Aquiis SimpleStart Electron Host",
55
"main": "main.js",
66
"dependencies": {

4-Aquiis.SimpleStart/Program.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -745,9 +745,10 @@
745745
Height = 900,
746746
MinWidth = 800,
747747
MinHeight = 600,
748-
Show = false
748+
Show = false,
749+
AutoHideMenuBar = true
749750
});
750-
751+
window.RemoveMenu();
751752
window.OnReadyToShow += () => window.Show();
752753
window.SetTitle("Aquiis Property Management");
753754

4-Aquiis.SimpleStart/README.md

Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
# Aquiis - Property Management System
22

3-
![.NET 9.0](https://img.shields.io/badge/.NET-9.0-blue)
4-
![ASP.NET Core](https://img.shields.io/badge/ASP.NET%20Core-9.0-blueviolet)
3+
![.NET 10.0](https://img.shields.io/badge/.NET-10.0-blue)
4+
![ASP.NET Core](https://img.shields.io/badge/ASP.NET%20Core-10.0-blueviolet)
55
![Blazor Server](https://img.shields.io/badge/Blazor-Server-orange)
6-
![Entity Framework](https://img.shields.io/badge/Entity%20Framework-9.0-green)
6+
![Entity Framework](https://img.shields.io/badge/Entity%20Framework-10.0-green)
77
![SQLite](https://img.shields.io/badge/Database-SQLite-lightblue)
88

9-
A comprehensive web-based property management system built with ASP.NET Core 9.0 and Blazor Server. Aquiis streamlines rental property management for property owners, managers, and tenants with an intuitive interface and robust feature set.
9+
A comprehensive web-based property management system built with ASP.NET Core 10.0 and Blazor Server. Aquiis streamlines rental property management for property owners and managers with an intuitive interface and robust feature set.
1010

1111
## 🏢 Overview
1212

13-
Aquiis is designed to simplify property management operations through a centralized platform that handles everything from property listings and tenant management to lease tracking and document storage. Built with modern web technologies, it provides a responsive, secure, and scalable solution for property management professionals.
13+
Aquiis is designed to simplify property management operations through a centralized platform that handles everything from property, tenant, and lease tracking to document storage and rental invoice and expense tracking. Built with modern web technologies including AI (GitHub Copilot and Claude Sonnet), it provides a responsive, secure, and scalable solution for DIY landlords and property managers.
1414

1515
## ✨ Key Features
1616

@@ -28,17 +28,15 @@ Aquiis is designed to simplify property management operations through a centrali
2828
- **Tenant Profiles** - Complete tenant information management
2929
- **Contact Management** - Phone, email, emergency contacts
3030
- **Tenant History** - Track tenant interactions and lease history
31-
- **Tenant Portal** - Dedicated tenant dashboard and self-service features
3231
- **Communication Tools** - Built-in messaging and notification system
33-
- **Tenant Screening** - Application and background check workflow
3432

3533
### 📄 Lease Management
3634

3735
- **Lease Creation** - Digital lease agreement generation
3836
- **Lease Tracking** - Active, pending, expired, and terminated lease monitoring
3937
- **Rent Tracking** - Monthly rent amounts and payment schedules
4038
- **Security Deposits** - Deposit tracking and management
41-
- **Lease Renewals** - Automated renewal notifications and processing
39+
- **Lease Renewals** - Manual lease renewal tracking
4240
- **Terms Management** - Flexible lease terms and conditions
4341

4442
### 💰 Financial Management
@@ -54,14 +52,10 @@ Aquiis is designed to simplify property management operations through a centrali
5452

5553
- **File Storage** - Secure document upload and storage
5654
- **Document Categories** - Organized by type (leases, receipts, photos, etc.)
57-
- **Version Control** - Document revision tracking
58-
- **Digital Signatures** - Electronic signature support
59-
- **Document Sharing** - Secure document sharing with tenants
60-
- **Bulk Operations** - Mass document upload and organization
6155

6256
### 🔐 User Management & Security
6357

64-
- **Role-Based Access** - Administrator, Property Manager, and Tenant roles
58+
- **Role-Based Access** - Administrator and Property Manager roles
6559
- **Authentication** - Secure login with ASP.NET Core Identity
6660
- **User Profiles** - Comprehensive user account management
6761
- **Permission Management** - Granular access control
@@ -80,9 +74,9 @@ Aquiis is designed to simplify property management operations through a centrali
8074

8175
### Backend
8276

83-
- **Backend**: ASP.NET Core 9.0
77+
- **Backend**: ASP.NET Core 10.0
8478
- **UI Framework**: Blazor Server
85-
- **Database**: SQLite with Entity Framework Core 9.0
79+
- **Database**: SQLite with Entity Framework Core 10.0
8680
- **Authentication**: ASP.NET Core Identity
8781
- **Architecture**: Clean Architecture with vertical slice organization
8882

@@ -101,10 +95,11 @@ Aquiis is designed to simplify property management operations through a centrali
10195
- **Version Control**: Git with GitHub integration
10296
- **Package Management**: NuGet
10397
- **Build System**: .NET SDK build system
98+
- **AI Assisted Coding**: GitHub Copilot, Claude Sonnet, GPT
10499

105100
## 📋 Prerequisites
106101

107-
- [.NET 9.0 SDK](https://dotnet.microsoft.com/download/dotnet/9.0)
102+
- [.NET 10.0 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)
108103
- [Git](https://git-scm.com/)
109104
- [Visual Studio Code](https://code.visualstudio.com/) (recommended) or Visual Studio 2022
110105
- [C# Dev Kit Extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit) for VS Code
@@ -318,7 +313,7 @@ Shared → Core
318313

319314
## 🔑 Default User Roles
320315

321-
The system includes three primary user roles:
316+
The system includes two primary user roles:
322317

323318
### Administrator
324319

@@ -335,14 +330,6 @@ The system includes three primary user roles:
335330
- Financial tracking
336331
- Document management
337332

338-
### Tenant
339-
340-
- Personal dashboard
341-
- Lease information access
342-
- Payment history
343-
- Maintenance requests
344-
- Document viewing
345-
346333
## 🎯 Key Components
347334

348335
### Property Management Service
@@ -391,14 +378,6 @@ Core business logic service in the Application layer:
391378
- Administrative quick actions
392379
- Recent system activity
393380

394-
### Tenant Dashboard
395-
396-
- Personal lease information
397-
- Payment history
398-
- Maintenance requests
399-
- Document access
400-
- Communication center
401-
402381
## 🔧 Configuration
403382

404383
### Application Settings
@@ -422,7 +401,7 @@ Configuration is managed through:
422401

423402
### Prerequisites for Production
424403

425-
- Windows/Linux server with .NET 9.0 runtime
404+
- Windows/Linux server with .NET 10.0 runtime
426405
- IIS or reverse proxy (nginx/Apache)
427406
- SSL certificate for HTTPS
428407
- Database server (or SQLite for smaller deployments)
@@ -474,7 +453,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
474453
### Common Issues
475454

476455
1. **Database Connection Issues**: Verify SQLite file permissions and path
477-
2. **Build Errors**: Ensure .NET 9.0 SDK is installed
456+
2. **Build Errors**: Ensure .NET 10.0 SDK is installed
478457
3. **Authentication Problems**: Check Identity configuration and user roles
479458
4. **Performance Issues**: Review database indexing and query optimization
480459

@@ -487,14 +466,13 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
487466

488467
## 🏗️ Roadmap
489468

490-
### Upcoming Features
469+
### Upcoming Features via Aquiis Professional
491470

492471
- Mobile application support
493472
- Advanced reporting and analytics
494473
- Integration with accounting software
495474
- Automated rent collection
496475
- Multi-language support
497-
- Advanced tenant screening
498476
- IoT device integration
499477
- API for third-party integrations
500478

@@ -510,4 +488,4 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
510488

511489
**Aquiis** - Streamlining Property Management for the Modern World
512490

513-
Built with ❤️ using ASP.NET Core 9.0 and Blazor Server
491+
Built with ❤️ using ASP.NET Core 10.0, Blazor Server, and AI Tools (GitHub Copilot and Claude Sonnet)

4-Aquiis.SimpleStart/Shared/Components/Account/Pages/Login.razor

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,17 @@
3939
</label>
4040
</div>
4141
<div>
42-
<button type="submit" class="w-100 btn btn-lg btn-primary">Log in</button>
42+
<button type="submit" class="w-100 btn btn-lg btn-primary" disabled="@isSubmitting">
43+
@if (isSubmitting)
44+
{
45+
<span class="spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
46+
<span>Logging in...</span>
47+
}
48+
else
49+
{
50+
<span>Log in</span>
51+
}
52+
</button>
4353
</div>
4454
<div>
4555
<p>
@@ -66,6 +76,7 @@
6676

6777
@code {
6878
private string? errorMessage;
79+
private bool isSubmitting = false;
6980

7081
[CascadingParameter]
7182
private HttpContext HttpContext { get; set; } = default!;
@@ -103,28 +114,42 @@
103114

104115
public async Task LoginUser()
105116
{
106-
// This doesn't count login failures towards account lockout
107-
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
108-
var result = await SignInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
109-
if (result.Succeeded)
110-
{
111-
Logger.LogInformation("User logged in.");
112-
RedirectManager.RedirectTo(ReturnUrl);
113-
}
114-
else if (result.RequiresTwoFactor)
115-
{
116-
RedirectManager.RedirectTo(
117-
"Account/LoginWith2fa",
118-
new() { ["returnUrl"] = ReturnUrl, ["rememberMe"] = Input.RememberMe });
119-
}
120-
else if (result.IsLockedOut)
117+
// Prevent double submission
118+
if (isSubmitting)
119+
return;
120+
121+
try
121122
{
122-
Logger.LogWarning("User account locked out.");
123-
RedirectManager.RedirectTo("Account/Lockout");
123+
isSubmitting = true;
124+
errorMessage = null;
125+
126+
// This doesn't count login failures towards account lockout
127+
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
128+
var result = await SignInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
129+
if (result.Succeeded)
130+
{
131+
Logger.LogInformation("User logged in.");
132+
RedirectManager.RedirectTo(ReturnUrl);
133+
}
134+
else if (result.RequiresTwoFactor)
135+
{
136+
RedirectManager.RedirectTo(
137+
"Account/LoginWith2fa",
138+
new() { ["returnUrl"] = ReturnUrl, ["rememberMe"] = Input.RememberMe });
139+
}
140+
else if (result.IsLockedOut)
141+
{
142+
Logger.LogWarning("User account locked out.");
143+
RedirectManager.RedirectTo("Account/Lockout");
144+
}
145+
else
146+
{
147+
errorMessage = "Error: Invalid login attempt.";
148+
}
124149
}
125-
else
150+
finally
126151
{
127-
errorMessage = "Error: Invalid login attempt.";
152+
isSubmitting = false;
128153
}
129154
}
130155

4-Aquiis.SimpleStart/Shared/Layout/NavMenu.razor

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
<input type="checkbox" title="Navigation menu" class="navbar-toggler" />
2121

22-
<div class="nav-scrollable" onclick="document.querySelector('.navbar-toggler').click()">
22+
<div class="nav-scrollable">
2323
<nav class="nav flex-column">
2424

2525
<OrganizationAuthorizeView Roles="Owner,Administrator">
@@ -336,7 +336,13 @@
336336

337337
private async void OnLocationChanged(object? sender, LocationChangedEventArgs e)
338338
{
339-
currentUrl = NavigationManager.ToBaseRelativePath(e.Location);
339+
var newUrl = NavigationManager.ToBaseRelativePath(e.Location);
340+
341+
// Only update if URL actually changed (prevents visual glitch on same-link clicks)
342+
if (newUrl == currentUrl)
343+
return;
344+
345+
currentUrl = newUrl;
340346

341347
// Re-apply current theme and brand theme after navigation
342348
try

4-Aquiis.SimpleStart/appsettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"ApplicationSettings": {
1515
"AppName": "Aquiis",
1616
"ProductName": "Aquiis SimpleStart",
17-
"Version": "1.1.0",
17+
"Version": "1.1.1",
1818
"Author": "CIS Guru",
1919
"Email": "cisguru@outlook.com",
2020
"Repository": "https://github.com/xnodeoncode/Aquiis",

4-Aquiis.SimpleStart/electron.manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"appId": "com.aquiis.propertymanagement",
1818
"productName": "Aquiis",
1919
"copyright": "Copyright © 2026",
20-
"buildVersion": "1.1.0",
20+
"buildVersion": "1.1.1",
2121
"compression": "normal",
2222
"directories": {
2323
"output": "../../../bin/Desktop"

0 commit comments

Comments
 (0)