permit show file modifications

This commit is contained in:
Kwesi Banson Jnr 2026-06-21 19:33:30 +00:00
parent e593fa792e
commit 779ae6e0c7
13 changed files with 352 additions and 188 deletions

View File

@ -24,7 +24,7 @@ CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
SESSION_DOMAIN=.lupmis4luspa.org
SESSION_DOMAIN=.housebanson.net
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null

View File

@ -12,6 +12,7 @@ class LandingpageController extends Controller
$data = [
'page_title' => 'Landing Page'
];
return view('landing', $data);
}

View File

@ -83,12 +83,21 @@ class PermitsController extends Controller
]);
$result = ApiCalls::CurlPost($data, $url);
$result = json_decode($result, true);
// dump($result);
$docs_url = "upload/get_all_files_per_application.php";
$doc_data = json_encode([
"application_id" => $result['data'][0]['applicant_id'],
"api_token" => "1c46538c712e9b5b"
]);
// dd($result);
$documents_retval = ApiCalls::CurlPost($doc_data, $docs_url);
// dd($documents_retval);
$documents = json_decode($documents_retval, true);
$allowed_users_to_comment = ['PPD Head', 'Works Department Head', 'luspa-it-head'];
$data = [
'page_title' => 'Permits Details',
'permit_arr' => $result['data'][0],
'documents' => $documents['data'],
'allowed_users_to_comment' => $allowed_users_to_comment
];
return view('permits.show', $data);

View File

@ -29,7 +29,7 @@ class UserloginController extends Controller
$data = ['user' => $request->username, 'pass' => $request->password, 'api_token' => env('LUPMISAPIKEY')];
$check_user = ApiCalls::CurlPost(json_encode($data), $check_user_url);
// dd($check_user);
if($check_user == false){
return redirect("user-login")->withErrors(array("System not available at the moment. Try again later!"))->withInput();
}
@ -51,7 +51,9 @@ class UserloginController extends Controller
'token' => hash('sha256', $plainToken),
'created_at' => now(),
]);
// dd($logged_in);
$request->session()->regenerate(true);
$region_name = isset($logged_in['region']) ? $logged_in['region'] : "N/A";
$request->session()->put('current_user.ua_id', $logged_in['ua_id']);
$request->session()->put('current_user.user_id', $logged_in['user_id']);
$request->session()->put('current_user.username', $logged_in['username']);
@ -66,14 +68,14 @@ class UserloginController extends Controller
$request->session()->put('current_user.is_password_changed', $logged_in['is_password_changed']);
$request->session()->put('current_user.district_id', $logged_in['district_id']);
$request->session()->put('current_user.district_name', $logged_in['vr_district_name']);
// $request->session()->put('current_user.hashedToken', $hashedToken);
$request->session()->put('current_user.region_name', $region_name);
$request->session()->put('current_user.plainToken', $plainToken);
// $request->session()->put('current_user.permissions', $logged_in['permissions']);
Cookie::queue('sso_auth_token', $plainToken, 60, '/', '.lupmis4luspa.org');
\Log::info($logged_in['full_name']. ' Successfully logged in at : ' . date('Y-m-d H:i:s'));
return redirect(url('/'));
return redirect(url('/admin/home'));
}
public function handle_logout(Request $request) {
$user_id = session('current_user.id');

View File

@ -68,3 +68,10 @@ add_header Content-Security-Policy "frame-ancestors 'self' https://lupmis4luspa.
add_header Content-Security-Policy "frame-ancestors 'self' https://lupmis.housebanson.net" always;
{
"success": true,
"data": "[{\"id\":6,\"application_id\":165,\"client_generated_id\":null,\"document_type\":\"Document\",\"document_category\":\"required\",\"filename\":\"verdex-executive-summary-56d42f4a45514771827c4b98780ceecc.pdf\",\"original_filename\":\"verdex-executive-summary-56d42f4a45514771827c4b98780ceecc.pdf\",\"file_size\":0,\"mime_type\":\"application/pdf\",\"file_path\":\"https://portal.lupmis4luspa.org/App/api/document.php?application_code=REQ-20260310-HKQ5&file=verdex-executive-summary-56d42f4a45514771827c4b98780ceecc.pdf\",\"is_verified\":false,\"verified_by\":null,\"verified_at\":null,\"verification_notes\":null,\"uploaded_at\":\"2026-06-12T13:32:46.483281\"}]",
"count": 1
}

View File

@ -1,42 +1,56 @@
// Where you want to render the map.
var element = document.getElementById('map');
document.addEventListener("DOMContentLoaded", function() {
var element = document.getElementById('map');
// Height has to be set. You can do this in CSS too.
element.style = 'height:400px;';
if (!element) return;
// Create Openlayers map on map element.
var map = new ol.Map({
element.style.height = '100%';
element.style.minHeight = '500px';
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
target: element,
controls: ol.control.defaults().extend([
// new ol.control.LayerSwitcher(),
controls: ol.control.defaults.defaults ?
ol.control.defaults.defaults().extend([
new ol.control.MousePosition({
projection: 'EPSG:4326',
coordinateFormat: function(coordinate) {
return ol.coordinate.format(coordinate, '{x}, {y}', 4);
},
//ol.coordinate.toStringXY,
}),
// new ol.control.OverviewMap({layers: [baseLayersGroup]}),
new ol.control.ScaleLine(),
//new ol.control.ScaleLineUnits0(),
//new ol.control.ControlDrawFeatures(vector_draw, optionsControlDraw),
//new ol.control.ControlDrawButtons(vector_layer, opt_options),
// new ol.control.ZoomSlider(),
//new ol.control.Attribution(),
// new ol.control.MousePosition(),
// new ol.control.ZoomToExtent(),
// new ol.control.FullScreen()
new ol.control.ScaleLine()
]) :
ol.control.defaults().extend([
new ol.control.MousePosition({
projection: 'EPSG:4326',
coordinateFormat: function(coordinate) {
return ol.coordinate.format(coordinate, '{x}, {y}', 4);
},
}),
new ol.control.ScaleLine()
]),
// view: new ol.View({
// center: [-135846.63, 891762.35],
// zoom: 6
// })
view: new ol.View({
center: [-135846.63, 891762.35],
// center: [-1.3605877812500313, 10.401734198145082],
zoom: 6
// ol.proj.fromLonLat([longitude, latitude])
center: ol.proj.fromLonLat([-1.0232, 7.9465]),
zoom: 5.5, // Zoomed into the country level
minZoom: 2, // Allows zooming out
maxZoom: 19 // Allows zooming in
})
});
// setTimeout(function() {
// map.updateSize();
// }, 200);
setTimeout(function() {
map.updateSize();
map.getView().setCenter(ol.proj.fromLonLat([-1.0232, 7.9465]));
map.getView().setZoom(7);
}, 300);
// Target's GPS coordinates.
});

View File

@ -37,7 +37,8 @@
<div class="container py-4">
<div class="d-flex align-items-center mb-3">
<h3 class="me-auto">Manage Users</h3>
<div class="text-muted">{{ \Carbon\Carbon::now()->format('F j, Y') }}</div>
<!-- <div class="text-muted">{{ \Carbon\Carbon::now()->format('F j, Y') }}</div> -->
<div class="text-muted">Sekondi Takoradi</div>
</div>
<ul class="nav nav-tabs mb-3" id="userTabs" role="tablist">

View File

@ -88,7 +88,7 @@
<p class="text-muted mb-0">
You are currently signed in as a
<span class="badge bg-primary">
{{ session('current_user.ua_position') }}
{{ strtoupper(session('current_user.ua_position')) }}
</span>
</p>
</div>

View File

@ -54,6 +54,7 @@
</div>
</div>
</nav>
@yield('page-content')
<script src="{{ url('public/assets/libs/jquery-3.2.1.min.js') }}" type="text/javascript"></script>
<script src="{{ url('public/assets/libs/bootstrap/js/bootstrap5.3.2.js') }}"></script>

View File

@ -72,40 +72,40 @@
<div class="row gy-4">
<div class="col-12">
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.75rem; letter-spacing: 0.5px;">Applicant Name:</div>
<div class="fw-bold text-dark fs-5">FRANCIS BULLEN GAVOR</div>
<div class="fw-bold text-dark fs-5">{{ $permit_arr['applicant_name'] }}</div>
</div>
<div class="col-md-6">
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.75rem; letter-spacing: 0.5px;">Nationality:</div>
<div class="text-dark fw-medium">Motswana</div>
<div class="text-dark fw-medium">{{ $permit_arr['nationality'] }}</div>
</div>
<div class="col-md-6">
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.75rem; letter-spacing: 0.5px;">Email Address:</div>
<div><a href="mailto:jmadjanor6@gmail.com" class="text-decoration-none text-primary">jmadjanor6@gmail.com</a></div>
<div><a href="mailto:jmadjanor6@gmail.com" class="text-decoration-none text-primary">{{ $permit_arr['email'] }}</a></div>
</div>
<div class="col-md-6">
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.75rem; letter-spacing: 0.5px;">Telephone Number:</div>
<div class="text-dark">0554116836</div>
<div class="text-dark">{{ $permit_arr['phone'] }}</div>
</div>
<div class="col-md-6">
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.75rem; letter-spacing: 0.5px;">Zonal Location:</div>
<div class="text-dark fw-bold">TAIFA</div>
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.75rem; letter-spacing: 0.5px;">Project Location:</div>
<div class="text-dark fw-bold">{{ $permit_arr['project_location'] }}</div>
</div>
<div class="col-12">
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.75rem; letter-spacing: 0.5px;">Mailing Address:</div>
<div class="text-dark">1 Tomatoes St, Hse 404/12, Accra, EASTERN REGION</div>
<div class="text-dark">{{ $permit_arr['address'] }}</div>
</div>
<div class="col-md-6">
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.75rem; letter-spacing: 0.5px;">Permit Type Requested</div>
<div class="text-dark fw-bold">Development</div>
<div class="text-dark fw-bold">{{ $permit_arr['permit_type'] }}</div>
</div>
<div class="col-md-6">
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.75rem; letter-spacing: 0.5px;">Zoned Classification</div>
<div class="fw-bold" style="color: #e67e22;">Mixed-Use Low Density Residential</div>
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.75rem; letter-spacing: 0.5px;">Purpose</div>
<div class="fw-bold" style="color: #e67e22;">{{ $permit_arr['land_request_use'] }}</div>
</div>
<div class="col-12 mt-2">
<div class="border border-dark-subtle rounded p-3">
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.75rem; letter-spacing: 0.5px;">Project Scope:</div>
<div class="text-dark fst-italic" style="font-size: 0.95rem;">Proposed construction of multi-family residential building.</div>
<div class="text-dark fst-italic" style="font-size: 0.95rem;">{{ $permit_arr['project_description'] }}</div>
</div>
</div>
</div>
@ -124,20 +124,20 @@
</label>
<div class="input-group shadow-sm">
<span class="input-group-text bg-white border-end-0 text-muted font-monospace small pe-1">GPS:</span>
<input type="text" class="form-control border-start-0 ps-1 font-monospace" placeholder="e.g., 5.66240, -0.18055" value="5.66240,">
<input type="text" class="form-control border-start-0 ps-1 font-monospace" placeholder="e.g., 5.66240, -0.18055" value="">
</div>
</div>
<div class="col-md-4">
<label class="form-label fw-bold text-secondary small mb-1">
<br class="d-none d-md-block">UPN (Unique Parcel Number)
</label>
<input type="text" class="form-control shadow-sm" value="04-098-032-012">
<input type="text" class="form-control shadow-sm" value="">
</div>
<div class="col-md-4">
<label class="form-label fw-bold text-secondary small mb-1">
Permit Municipal <br class="d-none d-md-block">Review Fee (GH₵) <span class="text-danger">*</span>
</label>
<input type="number" class="form-control shadow-sm fw-bold" value="1250">
<input type="number" class="form-control shadow-sm fw-bold" value="">
</div>
</div>
<div class="d-flex flex-wrap gap-2">
@ -155,7 +155,7 @@
<div class="card-body p-4">
<div class="d-flex align-items-center border-bottom pb-3 mb-4">
<i class="bi bi-file-earmark-text text-primary fs-5 me-2"></i>
<h6 class="fw-bold mb-0 text-dark" style="font-size: 1.1rem;">Attached CAD Drawings & Documents</h6>
<h6 class="fw-bold mb-0 text-dark" style="font-size: 1.1rem;">Uploaded Documents</h6>
</div>
<div class="d-flex flex-column gap-3">
<div class="border border-light-subtle rounded p-3 d-flex align-items-center justify-content-between bg-light shadow-sm transition-all">
@ -167,7 +167,7 @@
</div>
</div>
<a href="#" class="text-decoration-none fw-semibold text-nowrap" style="font-size: 0.85rem;">
Inspect CAD <i class="bi bi-arrow-up-right ms-1"></i>
Open File <i class="bi bi-arrow-up-right ms-1"></i>
</a>
</div>
<div class="border border-light-subtle rounded p-3 d-flex align-items-center justify-content-between bg-light shadow-sm transition-all">
@ -179,7 +179,7 @@
</div>
</div>
<a href="#" class="text-decoration-none fw-semibold text-nowrap" style="font-size: 0.85rem;">
Inspect CAD <i class="bi bi-arrow-up-right ms-1"></i>
Open File <i class="bi bi-arrow-up-right ms-1"></i>
</a>
</div>
<div class="border border-light-subtle rounded p-3 d-flex align-items-center justify-content-between bg-light shadow-sm transition-all">
@ -191,7 +191,7 @@
</div>
</div>
<a href="#" class="text-decoration-none fw-semibold text-nowrap" style="font-size: 0.85rem;">
Inspect CAD <i class="bi bi-arrow-up-right ms-1"></i>
Open File <i class="bi bi-arrow-up-right ms-1"></i>
</a>
</div>
</div>
@ -208,7 +208,7 @@
<div class="d-flex justify-content-between align-items-start border-bottom pb-3 mb-4">
<div class="d-flex align-items-center">
<i class="bi bi-clock text-primary fs-5 me-2"></i>
<h6 class="fw-bold mb-0 text-dark" style="font-size: 1.1rem;">Planning Stepper & Duration</h6>
<h6 class="fw-bold mb-0 text-dark" style="font-size: 1.1rem;">Processing & Duration</h6>
</div>
<div class="text-end">
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.7rem; letter-spacing: 0.5px;">Remaining Days</div>
@ -221,22 +221,22 @@
<div class="stepper-dot completed"></div>
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.7rem; letter-spacing: 0.5px;">28th Feb 2026, 11:59 PM LUPMIS ENGINE</div>
<h6 class="fw-bold mb-1 text-dark">Submission Received</h6>
<p class="mb-2 small text-secondary">Application successfully uploaded to LUPMIS database by applicant.</p>
<p class="mb-2 small text-secondary">Application successfully uploaded to on the Portal by applicant.</p>
<span class="badge bg-light text-secondary border fw-medium px-2 py-1">Verified by: Applicant Portal</span>
</div>
<div class="stepper-item">
<div class="stepper-dot active"></div>
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.7rem; letter-spacing: 0.5px;">PENDING PROCESS SCHEDULE LUPMIS ENGINE</div>
<h6 class="fw-bold mb-1" style="color: #e67e22;">Document Verification</h6>
<p class="mb-2 small text-secondary">Reviewing attached Site Plan, Block Plan, and Structural drawings consistency.</p>
<span class="badge bg-light text-secondary border fw-medium px-2 py-1">Verified by: Planning Officer</span>
<h6 class="fw-bold mb-1" style="color: #e67e22;">Applicant to Review</h6>
<p class="mb-2 small text-secondary">Applicant asked to review attached documenets.</p>
<span class="badge bg-light text-secondary border fw-medium px-2 py-1">Updated by: Luke Eshun</span>
</div>
<div class="stepper-item pending">
<!-- <div class="stepper-item pending">
<div class="stepper-dot pending"></div>
<div class="text-uppercase text-secondary fw-semibold mb-1" style="font-size: 0.7rem; letter-spacing: 0.5px;">PENDING PROCESS SCHEDULE LUPMIS ENGINE</div>
<h6 class="fw-bold mb-1 step-title text-secondary">Spatial GIS Alignment</h6>
<p class="mb-2 small text-secondary step-desc">Verification of parcel boundaries against Taifa master plan & greenbelt buffers.</p>
</div>
</div> -->
</div>
</div>
</div>

View File

@ -68,7 +68,7 @@
<label class="form-label fw-bold text-secondary small mb-1">
Permit <br class="d-none d-md-block"> Fee (GH₵) <span class="text-danger"></span>
</label>
<input type="number" class="form-control shadow-sm fw-bold" value="1250">
<input type="number" class="form-control shadow-sm fw-bold" value="">
</div>
</div>
@ -419,7 +419,7 @@
.done(function (res) { /* render compliance result */ });
});
});
});
document.addEventListener('DOMContentLoaded', function() {
const downloadBtn = document.getElementById('downloadPdfBtn');

View File

@ -0,0 +1,107 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
<title>LUPMIS4LUSPA | Login</title>
<link rel="stylesheet" href="{{ url('public/assets/libs/bootstrap/css/bootstrap5.3.2.css') }}">
<link rel="stylesheet" href="{{ url('public/assets/libs/ol/ol.css') }}" type="text/css">
<link rel="stylesheet" href="{{ url('public/assets/libs/ol/ol-ext.css') }}" />
<link rel="stylesheet" href="{{ url('public/assets/css/l4l.css') }}" rel="stylesheet">
<link rel="stylesheet" href="{{ url('public/assets/css/styles.css') }}" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css">
</head>
<!-- <body class="bg-gradient-primary"> -->
<body>
<div class="container py-4">
<div class="main">
<div class="row g-5">
<div class="col-md-6 col-lg-6 lupmis-primary-bg-50 d-flex flex-column p-4 rounded">
<div id="map" class="map" style="width: 100%; height: 580vH;"></div>
<div class="pt-2 lupmis-primary-text-900">
<!-- <h4 class="d-flex justify-content-between align-items-center mbmmm-3"><span class="">Welcome to LUPMIS</span></h4> -->
</div>
</div>
<div class="col-md-6 col-lg-6 px-5 d-flex flex-row-reverse">
<div class="login-form">
<div class="mb-4 d-flex justify-content-center align-items-center">
<img class="" src="{{ url('public/assets/images/logo-1.png') }}" alt="" width="150" height="150"/>
&nbsp; &nbsp; &nbsp;
<img class="" src="{{ url('public/assets/images/logo-2.png') }}" alt="" width="150" height="150"/>
</div>
<h4 class="mb-3">Welcome to LUPMIS</h4>
@include('common.notifications')
<form class="needs-validation" action="/user-login" method="POST">
@csrf
<div class="row g-3">
<div class="col-12">
<label for="username" class="form-label">Username</label>
<div class="input-group has-validation">
<!-- <span class="input-group-text">@</span> -->
<input type="text" class="form-control" name="username" id="username" placeholder="username" required>
<div class="invalid-feedback">Your username is required.</div>
</div>
</div>
<div class="col-12">
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control" name="password" id="password" placeholder="********" required>
<div class="invalid-feedback">Password is required.</div>
</div>
<button class="w-100 btn lupmis-btn-primary btn-lg" type="submit">Sign In</button>
</form>
<div class="col-12">
<div class="text-end my-3">
<a class="lupmis-primary-text-500" href="{{ url('user-reset') }}">Forgot Password</a>
</div>
</div>
<div class="m-3 text-center request-account">
<p class="m-0">Don't have an account?</p>
<a class="lupmis-primary-text-500" href="">Request an account</a>
</div>
</div>
</div>
</div>
</div>
<footer class="py-5">
<div class="row">
<div class="col-md-12 col-lg-12 position-relative">
<p class="text-center lupmis-grey-900">Developed with Support from</p>
<div class="text-center">
<img src="{{ url('public/assets/images/donor-1.png') }}" alt="">
</div>
<div class="text-center pt-3 position-absolute bottom-0 end-0">
<ul class="list-inline m-0">
<li class="list-inline-item"><a class="lupmis-primary-text-500" href="#">About</a></li>
<li class="list-inline-item"><a class="lupmis-primary-text-500" href="#">Privacy</a></li>
<li class="list-inline-item"><a class="lupmis-primary-text-500" href="#">Terms</a></li>
</ul>
<p class="lupmis-grey-900">2025 All Rights Reserved</p>
</div>
</div>
</div>
</footer>
</div>
<!-- Bootstrap core JavaScript-->
<script src="{{ url('public/assets/libs/jquery-3.2.1.min.js') }}" type="text/javascript"></script>
<script src="{{ url('public/assets/libs/bootstrap/js/bootstrap5.3.2.js') }}"></script>
<script src="{{ url('public/assets/libs/ol/ol.js') }}" type="text/javascript" ></script> <!-- ol6.15.1 -->
<script src="{{ url('public/assets/libs/ol/ol-ext.js') }}" type="text/javascript" ></script>
<script src="{{ url('public/assets/js/l4lfunctions.js') }}"></script>
</body>
</html>

View File

@ -5,7 +5,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="description" content="LUPMIS Login Page">
<meta name="author" content="">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
@ -14,94 +14,116 @@
<link rel="stylesheet" href="{{ url('public/assets/libs/bootstrap/css/bootstrap5.3.2.css') }}">
<link rel="stylesheet" href="{{ url('public/assets/libs/ol/ol.css') }}" type="text/css">
<link rel="stylesheet" href="{{ url('public/assets/libs/ol/ol-ext.css') }}" />
<link rel="stylesheet" href="{{ url('public/assets/css/l4l.css') }}" rel="stylesheet">
<link rel="stylesheet" href="{{ url('public/assets/css/styles.css') }}" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css">
<link rel="stylesheet" href="{{ url('public/assets/css/l4l.css') }}">
<link rel="stylesheet" href="{{ url('public/assets/css/styles.css') }}">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/font/bootstrap-icons.min.css">
</head>
<!-- <body class="bg-gradient-primary"> -->
<body>
<body class="bg-light">
<div class="container py-4">
<div class="main">
<div class="row g-5">
<div class="col-md-6 col-lg-6 lupmis-primary-bg-50 d-flex flex-column p-4 rounded">
<div id="map" class="map" style="width: 100%; height: 580vH;"></div>
<div class="pt-2 lupmis-primary-text-900">
<!-- <h4 class="d-flex justify-content-between align-items-center mbmmm-3"><span class="">Welcome to LUPMIS</span></h4> -->
<div class="container py-5">
<main class="mb-5">
<div class="row g-5 align-items-stretch">
<div class="col-md-6 lupmis-primary-bg-50 d-flex flex-column p-4 rounded shadow-sm">
<div id="map" class="map rounded" style="width: 100%; min-height: 500px; background-color: #eee;"></div>
<div class="pt-3 lupmis-primary-text-900 text-center">
<!-- <h5>Interactive Spatial Portal</h5> -->
</div>
</div>
<div class="col-md-6 col-lg-6 px-5 d-flex flex-row-reverse">
<div class="login-form">
<div class="mb-4 d-flex justify-content-center align-items-center">
<img class="" src="{{ url('public/assets/images/logo-1.png') }}" alt="" width="150" height="150"/>
&nbsp; &nbsp; &nbsp;
<img class="" src="{{ url('public/assets/images/logo-2.png') }}" alt="" width="150" height="150"/>
<div class="col-md-6 px-lg-5 d-flex align-items-center">
<div class="login-form w-100">
<div class="mb-4 d-flex justify-content-center align-items-center gap-3">
<img src="{{ url('public/assets/images/logo-1.png') }}" alt="Logo 1" width="120" height="120" class="img-fluid"/>
<img src="{{ url('public/assets/images/logo-2.png') }}" alt="Logo 2" width="120" height="120" class="img-fluid"/>
</div>
<h4 class="mb-3">Welcome to LUPMIS</h4>
<h4 class="mb-3 text-center text-md-start">Welcome to LUPMIS</h4>
@include('common.notifications')
<form class="needs-validation" action="/user-login" method="POST">
<form class="needs-validation" action="/user-login" method="POST" novalidate>
@csrf
<div class="row g-3">
<div class="col-12">
<label for="username" class="form-label">Username</label>
<div class="input-group has-validation">
<!-- <span class="input-group-text">@</span> -->
<input type="text" class="form-control" name="username" id="username" placeholder="username" required>
<input type="text" class="form-control" name="username" id="username" placeholder="Enter your username" required>
<div class="invalid-feedback">Your username is required.</div>
</div>
</div>
<div class="col-12">
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control" name="password" id="password" placeholder="********" required>
<div class="d-flex justify-content-between align-items-center">
<label for="password" class="form-label mb-0">Password</label>
<a class="small text-decoration-none lupmis-primary-text-500" href="{{ url('user-reset') }}">Forgot Password?</a>
</div>
<input type="password" class="form-control mt-2" name="password" id="password" placeholder="********" required>
<div class="invalid-feedback">Password is required.</div>
</div>
<div class="col-12 pt-2">
<button class="w-100 btn lupmis-btn-primary btn-lg" type="submit">Sign In</button>
</div>
</div>
</form>
<div class="col-12">
<div class="text-end my-3">
<a class="lupmis-primary-text-500" href="{{ url('user-reset') }}">Forgot Password</a>
<div class="mt-4 text-center request-account">
<p class="m-0 text-muted">Don't have an account?</p>
<a class="fw-bold text-decoration-none lupmis-primary-text-500" href="#">Request an account</a>
</div>
</div>
</div>
<div class="m-3 text-center request-account">
<p class="m-0">Don't have an account?</p>
<a class="lupmis-primary-text-500" href="">Request an account</a>
</div>
</main>
<footer class="pt-4 my-md-5 pt-md-5 border-top">
<div class="row align-items-center">
<div class="col-md-6 text-center text-md-start">
<p class="text-muted small mb-2">Developed with Support from</p>
<img src="{{ url('public/assets/images/donor-1.png') }}" alt="Donor Logo" class="img-fluid" style="max-height: 100px;">
</div>
</div>
</div>
</div>
<footer class="py-5">
<div class="row">
<div class="col-md-12 col-lg-12 position-relative">
<p class="text-center lupmis-grey-900">Developed with Support from</p>
<div class="text-center">
<img src="{{ url('public/assets/images/donor-1.png') }}" alt="">
</div>
<div class="text-center pt-3 position-absolute bottom-0 end-0">
<ul class="list-inline m-0">
<li class="list-inline-item"><a class="lupmis-primary-text-500" href="#">About</a></li>
<li class="list-inline-item"><a class="lupmis-primary-text-500" href="#">Privacy</a></li>
<li class="list-inline-item"><a class="lupmis-primary-text-500" href="#">Terms</a></li>
<div class="col-md-6 text-center text-md-end mt-3 mt-md-0">
<ul class="list-inline mb-1">
<li class="list-inline-item"><a class="text-decoration-none text-muted small" href="#">About</a></li>
<li class="list-inline-item"><span class="text-muted small">&middot;</span></li>
<li class="list-inline-item"><a class="text-decoration-none text-muted small" href="#">Privacy</a></li>
<li class="list-inline-item"><span class="text-muted small">&middot;</span></li>
<li class="list-inline-item"><a class="text-decoration-none text-muted small" href="#">Terms</a></li>
</ul>
<p class="lupmis-grey-900">2025 All Rights Reserved</p>
</div>
<p class="text-muted small mb-0">&copy; 2026 All Rights Reserved</p>
</div>
</div>
</footer>
</div>
<!-- Bootstrap core JavaScript-->
<script src="{{ url('public/assets/libs/jquery-3.2.1.min.js') }}" type="text/javascript"></script>
<script src="{{ url('public/assets/libs/jquery-3.2.1.min.js') }}"></script>
<script src="{{ url('public/assets/libs/bootstrap/js/bootstrap5.3.2.js') }}"></script>
<script src="{{ url('public/assets/libs/ol/ol.js') }}" type="text/javascript" ></script> <!-- ol6.15.1 -->
<script src="{{ url('public/assets/libs/ol/ol-ext.js') }}" type="text/javascript" ></script>
<script src="{{ url('public/assets/libs/ol/ol.js') }}"></script>
<script src="{{ url('public/assets/libs/ol/ol-ext.js') }}"></script>
<script src="{{ url('public/assets/js/l4lfunctions.js') }}"></script>
<script>
$(document).ready(function() {
// if (typeof ol !== 'undefined') {
// const map = new ol.Map({
// target: 'map',
// layers: [
// new ol.layer.Tile({
// source: new ol.source.OSM()
// })
// ],
// view: new ol.View({
// center: ol.proj.fromLonLat([0, 0]),
// zoom: 2
// })
// });
// }
});
</script>
</body>
</html>