Compare commits
16
Commits
BUG_PHOTO
...
ea9673c29b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ea9673c29b | ||
|
|
4c7e24c478 | ||
|
|
c11ff65a3e | ||
|
|
8c0796eb69 | ||
|
|
10ad411b5e | ||
|
|
8d766ab988 | ||
|
|
8177a60351 | ||
|
|
0fd073755e | ||
|
|
6ea799dcdf | ||
|
|
caf9746443 | ||
|
|
41542e492d | ||
|
|
4f4ca5cec4 | ||
|
|
f480269bc5 | ||
|
|
24c49567aa | ||
|
|
affad21ab0 | ||
|
|
a646258837 |
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Version 17
|
# Visual Studio Version 18
|
||||||
VisualStudioVersion = 17.12.35527.113
|
VisualStudioVersion = 18.2.11408.102 d18.0
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkFlowCheck.API", "WorkFlowCheck.API\WorkFlowCheck.API.csproj", "{2466E04A-CB0C-4421-9074-A928F819926C}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkFlowCheck.API", "WorkFlowCheck.API\WorkFlowCheck.API.csproj", "{2466E04A-CB0C-4421-9074-A928F819926C}"
|
||||||
EndProject
|
EndProject
|
||||||
|
|||||||
@@ -63,14 +63,14 @@ namespace WorkFlowCheck.API.Controllers
|
|||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
[HttpGet("GetAllCheckListHeaders")]
|
[HttpGet("GetAllCheckListHeaders/{mode}")]
|
||||||
public async Task<ApiResponseDTO<List<CheckListHeaderDTO>>> GetAllCheckListHeadersAsync()
|
public async Task<ApiResponseDTO<List<CheckListHeaderDTO>>> GetAllCheckListHeadersAsync(int mode = 0)
|
||||||
{
|
{
|
||||||
var retVal = new ApiResponseDTO<List<CheckListHeaderDTO>>()
|
var retVal = new ApiResponseDTO<List<CheckListHeaderDTO>>()
|
||||||
{
|
{
|
||||||
IsSuccess = true,
|
IsSuccess = true,
|
||||||
};
|
};
|
||||||
var checkPointListDTO = await _checkListService.GetAllCheckListHeaderAsync();
|
var checkPointListDTO = await _checkListService.GetAllCheckListHeaderAsync(mode);
|
||||||
|
|
||||||
if (checkPointListDTO != null)
|
if (checkPointListDTO != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,6 +17,16 @@
|
|||||||
"environmentVariables": {
|
"environmentVariables": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"WSL": {
|
||||||
|
"commandName": "WSL2",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"launchUrl": "https://localhost:5069/swagger",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development",
|
||||||
|
"ASPNETCORE_URLS": "https://localhost:5069"
|
||||||
|
},
|
||||||
|
"distributionName": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"$schema": "http://json.schemastore.org/launchsettings.json",
|
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
<InvariantGlobalization>false</InvariantGlobalization>
|
<InvariantGlobalization>false</InvariantGlobalization>
|
||||||
<PublishAot>false</PublishAot>
|
<PublishAot>false</PublishAot>
|
||||||
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
|
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
|
||||||
|
<UserSecretsId>4081cb25-5ca2-40a1-a788-0d8396b4f50e</UserSecretsId>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\WorkFlowCheck.BL\WorkFlowCheck.BL.csproj" />
|
<ProjectReference Include="..\WorkFlowCheck.BL\WorkFlowCheck.BL.csproj" />
|
||||||
|
|||||||
@@ -9,5 +9,12 @@
|
|||||||
"Default": "Information",
|
"Default": "Information",
|
||||||
"Microsoft.AspNetCore": "Warning"
|
"Microsoft.AspNetCore": "Warning"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"Kestrel": {
|
||||||
|
"Endpoints": {
|
||||||
|
"Http": {
|
||||||
|
"Url": "http://localhost:59027"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,14 @@
|
|||||||
dotnet publish -c Release -o e:\wfcapi\
|
@echo off
|
||||||
pause
|
|
||||||
|
REM ha van paraméter, azt használjuk, különben default
|
||||||
|
set PUBLISH_DIR=%1
|
||||||
|
|
||||||
|
if "%PUBLISH_DIR%"=="" (
|
||||||
|
set PUBLISH_DIR=c:\Publish\wfcapi
|
||||||
|
)
|
||||||
|
|
||||||
|
echo Publish to: %PUBLISH_DIR%
|
||||||
|
|
||||||
|
dotnet publish -c Release -o "%PUBLISH_DIR%"
|
||||||
|
|
||||||
|
pause
|
||||||
|
|||||||
@@ -81,21 +81,40 @@ namespace WorkFlowCheck.BL.Services
|
|||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
public async Task<List<CheckListHeaderDTO>> GetAllCheckListHeaderAsync()
|
public async Task<List<CheckListHeaderDTO>> GetAllCheckListHeaderAsync(int mode = 0)
|
||||||
{
|
{
|
||||||
var retVal = new List<CheckListHeaderDTO>();
|
var retVal = new List<CheckListHeaderDTO>();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var checkListHeaders = await _dbContext.CheckListHeaders
|
IQueryable<CheckListHeader> query = _dbContext.CheckListHeaders
|
||||||
.Include(i => i.CheckListRows)
|
.Include(i => i.CheckListRows)
|
||||||
.Include(i => i.User)
|
.Include(i => i.User)
|
||||||
.Include(i => i.AcceptUser)
|
.Include(i => i.AcceptUser)
|
||||||
.AsNoTracking()
|
.AsNoTracking();
|
||||||
.ToListAsync();
|
switch (mode)
|
||||||
if (checkListHeaders != null)
|
|
||||||
{
|
{
|
||||||
retVal = _mapper.Map<List<CheckListHeaderDTO>>(checkListHeaders);
|
case 0:
|
||||||
|
query = query.Where(w => w.CheckStatus == CheckStatus.InProgress || w.CheckStatus == CheckStatus.Open).OrderByDescending(o => o.CreatedAt);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
query = query.Where(w => w.CheckStatus == CheckStatus.Sent).OrderByDescending(o => o.CreatedAt);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
query = query.Where(w => w.CheckStatus == CheckStatus.Closed).OrderByDescending(o => o.CreatedAt);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
query = query.Where(w => w.CheckStatus == CheckStatus.Signed).OrderByDescending(o => o.CreatedAt);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
query = query.OrderByDescending(o => o.CreatedAt);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var list = await query.ToListAsync();
|
||||||
|
retVal = _mapper.Map<List<CheckListHeaderDTO>>(list);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -285,7 +304,7 @@ namespace WorkFlowCheck.BL.Services
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
Log.Error(ex.Message);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -320,7 +339,7 @@ namespace WorkFlowCheck.BL.Services
|
|||||||
gen.SimpleReplace("#WorkUser#", $"{checkListHeader.UserDTO?.LastName} {checkListHeader.UserDTO?.FirstName}");
|
gen.SimpleReplace("#WorkUser#", $"{checkListHeader.UserDTO?.LastName} {checkListHeader.UserDTO?.FirstName}");
|
||||||
gen.SimpleReplace("#AcceptUser#", $"{checkListHeader.AcceptUserDTO?.LastName} {checkListHeader.AcceptUserDTO?.FirstName}");
|
gen.SimpleReplace("#AcceptUser#", $"{checkListHeader.AcceptUserDTO?.LastName} {checkListHeader.AcceptUserDTO?.FirstName}");
|
||||||
gen.SimpleReplace("#Guid#", checkListHeader.GuidNumber.ToString());
|
gen.SimpleReplace("#Guid#", checkListHeader.GuidNumber.ToString());
|
||||||
|
|
||||||
if (checkListHeader.CheckListRowDTO != null && checkListHeader.CheckListRowDTO.Count > 0)
|
if (checkListHeader.CheckListRowDTO != null && checkListHeader.CheckListRowDTO.Count > 0)
|
||||||
{
|
{
|
||||||
var elements = new List<List<string>>();
|
var elements = new List<List<string>>();
|
||||||
|
|||||||
@@ -6,12 +6,12 @@ namespace WorkFlowCheck.BL.Services.Interfaces
|
|||||||
public interface ICheckListService
|
public interface ICheckListService
|
||||||
{
|
{
|
||||||
Task<CheckListHeaderDTO> GetCheckListHeaderAsync(int Id);
|
Task<CheckListHeaderDTO> GetCheckListHeaderAsync(int Id);
|
||||||
Task<List<CheckListHeaderDTO>> GetAllCheckListHeaderAsync();
|
Task<List<CheckListHeaderDTO>> GetAllCheckListHeaderAsync(int mode = 0);
|
||||||
Task<CheckListHeaderDTO> UpdateCheckListHeaderAsync(CheckListHeaderDTO checkListHeaderDTO);
|
Task<CheckListHeaderDTO> UpdateCheckListHeaderAsync(CheckListHeaderDTO checkListHeaderDTO);
|
||||||
Task<bool> AcceptCheckListHeaderAsync(int id, int userid);
|
Task<bool> AcceptCheckListHeaderAsync(int id, int userid);
|
||||||
Task<bool> BlockCheckListHeaderAsync(int id, int userid);
|
Task<bool> BlockCheckListHeaderAsync(int id, int userid);
|
||||||
Task<bool> UnBlockCheckListHeaderAsync(int id, int userid);
|
Task<bool> UnBlockCheckListHeaderAsync(int id, int userid);
|
||||||
Task<bool> CloseCheckListHeader(CheckListHeaderCloseDTO closeCheckListHeaderCloseDTO);
|
Task<bool> CloseCheckListHeader(CheckListHeaderCloseDTO closeCheckListHeaderCloseDTO);
|
||||||
Task<byte[]> CreateCheckListHeaderPDFAsync(int checkListHeaderId);
|
Task<byte[]> CreateCheckListHeaderPDFAsync(int checkListHeaderId);
|
||||||
Task<CheckListHeaderDTO> StartNewCheckListAsync(CheckListHeaderNewDTO checkListHeaderNewDTO);
|
Task<CheckListHeaderDTO> StartNewCheckListAsync(CheckListHeaderNewDTO checkListHeaderNewDTO);
|
||||||
|
|
||||||
@@ -22,13 +22,13 @@ namespace WorkFlowCheck.BL.Services.Interfaces
|
|||||||
Task<bool> DeleteCheckListTemplateHeaderAsync(int id);
|
Task<bool> DeleteCheckListTemplateHeaderAsync(int id);
|
||||||
Task<bool> CloneCheckListTemplateHeaderAsync(int id);
|
Task<bool> CloneCheckListTemplateHeaderAsync(int id);
|
||||||
Task<CheckListTemplateRowDTO> GetCheckListTemplateRowAsync(int id);
|
Task<CheckListTemplateRowDTO> GetCheckListTemplateRowAsync(int id);
|
||||||
Task<bool> DeleteCheckListTemplateRowAsync(int id);
|
Task<bool> DeleteCheckListTemplateRowAsync(int id);
|
||||||
Task<CheckListTemplateRowDTO> UpdateCheckListTemplateRowAsync(CheckListTemplateRowDTO checkListTemplateRowDTO);
|
Task<CheckListTemplateRowDTO> UpdateCheckListTemplateRowAsync(CheckListTemplateRowDTO checkListTemplateRowDTO);
|
||||||
|
|
||||||
Task<CheckListRowDTO> GetCheckListRowAsync(int id);
|
Task<CheckListRowDTO> GetCheckListRowAsync(int id);
|
||||||
Task<CheckListRowDTO> UpdateCheckListRowAsync(CheckListRowDTO checkListRowDTO);
|
Task<CheckListRowDTO> UpdateCheckListRowAsync(CheckListRowDTO checkListRowDTO);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,11 +51,43 @@ namespace WorkFlowCheck.BL.Services
|
|||||||
}
|
}
|
||||||
|
|
||||||
message.Body = builder.ToMessageBody();
|
message.Body = builder.ToMessageBody();
|
||||||
using var smtp = new SmtpClient();
|
const int maxRetries = 10;
|
||||||
await smtp.ConnectAsync(_settings.SmtpServer, _settings.SmtpPort, SecureSocketOptions.StartTls);
|
const int delayMs = 2000;
|
||||||
await smtp.AuthenticateAsync(_settings.Username, _settings.Password);
|
|
||||||
await smtp.SendAsync(message);
|
bool authenticated = false;
|
||||||
await smtp.DisconnectAsync(true);
|
Exception lastException = null;
|
||||||
|
|
||||||
|
for (int attempt = 1; attempt <= maxRetries; attempt++)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using var smtp = new SmtpClient();
|
||||||
|
|
||||||
|
await smtp.ConnectAsync(_settings.SmtpServer, _settings.SmtpPort, SecureSocketOptions.StartTls);
|
||||||
|
await smtp.AuthenticateAsync(_settings.Username, _settings.Password);
|
||||||
|
await smtp.SendAsync(message);
|
||||||
|
await smtp.DisconnectAsync(true);
|
||||||
|
|
||||||
|
authenticated = true;
|
||||||
|
break; // 🎯 siker
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
lastException = ex;
|
||||||
|
Log.ForContext("TAG", "BusinessFlow").Error(lastException?.Message ?? "E-mail küldése sikertelen!");
|
||||||
|
if (attempt == maxRetries)
|
||||||
|
break;
|
||||||
|
|
||||||
|
// ⏳ várunk 1 másodpercet és újrapróbáljuk
|
||||||
|
await Task.Delay(delayMs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!authenticated)
|
||||||
|
{
|
||||||
|
// 🔴 IDE ÍRHATSZ MAJD SAJÁT LOGIKÁT
|
||||||
|
Log.ForContext("TAG", "BusinessFlow").Error(lastException?.Message ?? "E-mail küldése sikertelen!");
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ namespace WorkFlowCheck.BL.Services
|
|||||||
var user = await _dbContext.Users
|
var user = await _dbContext.Users
|
||||||
.Include(i => i.UserRoles)
|
.Include(i => i.UserRoles)
|
||||||
.ThenInclude(i => i.Role)
|
.ThenInclude(i => i.Role)
|
||||||
.Where(w => w.UserName == userName)
|
.Where(w => w.UserName == userName && w.Active == true)
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
if (user != null && PasswordHasher.VerifyPassword(user.PasswordHash, password))
|
if (user != null && PasswordHasher.VerifyPassword(user.PasswordHash, password))
|
||||||
{
|
{
|
||||||
@@ -400,7 +400,7 @@ namespace WorkFlowCheck.BL.Services
|
|||||||
user.Active = userDTO.Active;
|
user.Active = userDTO.Active;
|
||||||
user.NFCActive = userDTO.NFCActive;
|
user.NFCActive = userDTO.NFCActive;
|
||||||
user.NFCCode = userDTO.NFCCode;
|
user.NFCCode = userDTO.NFCCode;
|
||||||
|
|
||||||
await _dbContext.SaveChangesAsync();
|
await _dbContext.SaveChangesAsync();
|
||||||
|
|
||||||
retVal = _mapper.Map<UserDTO>(user);
|
retVal = _mapper.Map<UserDTO>(user);
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ namespace WorkFlowCheck.Common.Security
|
|||||||
// Jelszó ellenőrzése
|
// Jelszó ellenőrzése
|
||||||
public static bool VerifyPassword(string storedPasswordHash, string inputPassword)
|
public static bool VerifyPassword(string storedPasswordHash, string inputPassword)
|
||||||
{
|
{
|
||||||
|
var inputPasswordHash = HashPassword(inputPassword);
|
||||||
|
|
||||||
byte[] hashBytes = Convert.FromBase64String(storedPasswordHash);
|
byte[] hashBytes = Convert.FromBase64String(storedPasswordHash);
|
||||||
|
|
||||||
// Extract salt (first 16 bytes) and stored hash (next 32 bytes)
|
// Extract salt (first 16 bytes) and stored hash (next 32 bytes)
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
using SkiaSharp;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace WorkFlowCheck.MAUI.Helper
|
||||||
|
{
|
||||||
|
public static class ImageHelper
|
||||||
|
{
|
||||||
|
public static string ResizeAndSaveImage(byte[] imageBytes, int id, int targetWidth = 50)
|
||||||
|
{
|
||||||
|
// Átméretezett fájl elérési útja
|
||||||
|
var filename = Path.Combine(FileSystem.CacheDirectory, $"wfc_{id}_photo.jpg");
|
||||||
|
|
||||||
|
if (File.Exists(filename))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.Delete(filename);
|
||||||
|
// opcionálisan logolhatsz
|
||||||
|
// Console.WriteLine($"Törölve: {filename}");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
//Console.WriteLine($"Hiba a fájl törlésekor: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Eredeti kép betöltése
|
||||||
|
using var inputStream = new MemoryStream(imageBytes);
|
||||||
|
using var original = SKBitmap.Decode(inputStream);
|
||||||
|
|
||||||
|
if (original == null)
|
||||||
|
throw new InvalidOperationException("A kép nem olvasható vagy hibás.");
|
||||||
|
|
||||||
|
// Új szélesség és magasság arányosan
|
||||||
|
|
||||||
|
int targetHeight = (int)(original.Height * ((double)targetWidth / original.Width));
|
||||||
|
|
||||||
|
// Új üres bitmap létrehozása
|
||||||
|
using var resizedSurface = SKSurface.Create(new SKImageInfo(targetWidth, targetHeight));
|
||||||
|
using var canvas = resizedSurface.Canvas;
|
||||||
|
|
||||||
|
canvas.Clear(SKColors.White); // választható háttérszín
|
||||||
|
|
||||||
|
var srcRect = new SKRect(0, 0, original.Width, original.Height);
|
||||||
|
var destRect = new SKRect(0, 0, targetWidth, targetHeight);
|
||||||
|
canvas.DrawBitmap(original, srcRect, destRect);
|
||||||
|
|
||||||
|
using var resizedImage = resizedSurface.Snapshot();
|
||||||
|
using var imageData = resizedImage.Encode(SKEncodedImageFormat.Jpeg, 90);
|
||||||
|
|
||||||
|
// Mentés fájlba
|
||||||
|
using var fileStream = File.OpenWrite(filename);
|
||||||
|
imageData.SaveTo(fileStream);
|
||||||
|
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,7 +19,7 @@ namespace WorkFlowCheck.MAUI.Helper
|
|||||||
public static string DatabaseName = "";
|
public static string DatabaseName = "";
|
||||||
public static bool Syncronised = false;
|
public static bool Syncronised = false;
|
||||||
public static UserDTO SystemUserDTO;
|
public static UserDTO SystemUserDTO;
|
||||||
public static string ProgramVersion = "v1.1.036";
|
public static string ProgramVersion = "v1.1.039";
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
//public static string ApiBaseUrl = $"http://10.0.2.2:59027/";
|
//public static string ApiBaseUrl = $"http://10.0.2.2:59027/";
|
||||||
|
|||||||
@@ -1,23 +1,27 @@
|
|||||||
using System.ComponentModel;
|
using SkiaSharp;
|
||||||
|
using System.ComponentModel;
|
||||||
using WorkFlowCheck.Common.DTO;
|
using WorkFlowCheck.Common.DTO;
|
||||||
|
using WorkFlowCheck.MAUI.Helper;
|
||||||
|
|
||||||
namespace WorkFlowCheck.MAUI.Pages.CheckList
|
namespace WorkFlowCheck.MAUI.Pages.CheckList
|
||||||
{
|
{
|
||||||
public class CheckListRowCS : INotifyPropertyChanged
|
public class CheckListRowCS : INotifyPropertyChanged
|
||||||
{
|
{
|
||||||
private byte[] _photoBytes;
|
private byte[] _photoBytes;
|
||||||
private ImageSource? _photo;
|
//private ImageSource? _photo;
|
||||||
|
private string? _photoPath;
|
||||||
|
|
||||||
public event PropertyChangedEventHandler PropertyChanged;
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string AnswerType { get; set; } = null!;
|
public string AnswerType { get; set; } = null!;
|
||||||
public int RowIndex { get; set; }
|
public int RowIndex { get; set; }
|
||||||
public string OperationDescription { get; set; } = null!;
|
public string OperationDescription { get; set; } = null!;
|
||||||
public string GroupName { get; set; } = null!;
|
public string GroupName { get; set; } = null!;
|
||||||
public string Answer { get; set; } = null!;
|
public string Answer { get; set; } = null!;
|
||||||
public bool? AnswerYes { get; set; } = null!;
|
public bool? AnswerYes { get; set; } = null!;
|
||||||
public bool? AnswerNo { get; set; } = null!;
|
public bool? AnswerNo { get; set; } = null!;
|
||||||
|
|
||||||
public byte[] PhotoBytes
|
public byte[] PhotoBytes
|
||||||
{
|
{
|
||||||
get => _photoBytes;
|
get => _photoBytes;
|
||||||
@@ -26,37 +30,58 @@ namespace WorkFlowCheck.MAUI.Pages.CheckList
|
|||||||
if (_photoBytes != value)
|
if (_photoBytes != value)
|
||||||
{
|
{
|
||||||
_photoBytes = value;
|
_photoBytes = value;
|
||||||
_photo = null;
|
//_photo = null;
|
||||||
OnPropertyChanged(nameof(PhotoBytes));
|
_photoPath = null;
|
||||||
OnPropertyChanged(nameof(Photo));
|
//OnPropertyChanged(nameof(PhotoBytes));
|
||||||
|
//OnPropertyChanged(nameof(Photo));
|
||||||
|
OnPropertyChanged(nameof(PhotoPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public ImageSource Photo
|
//public ImageSource Photo
|
||||||
|
//{
|
||||||
|
// get
|
||||||
|
// {
|
||||||
|
// if (_photo == null)
|
||||||
|
// {
|
||||||
|
// if (PhotoBytes != null && PhotoBytes.Length > 0)
|
||||||
|
// {
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// var bytesCopy = PhotoBytes.ToArray();
|
||||||
|
// _photo = ImageSource.FromStream(() => new MemoryStream(bytesCopy));
|
||||||
|
// }
|
||||||
|
// catch
|
||||||
|
// {
|
||||||
|
// _photo = ImageSource.FromFile("noimage.png");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// _photo = ImageSource.FromFile("noimage.png");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return _photo;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
public string PhotoPath
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (_photo == null)
|
if (_photoPath == null)
|
||||||
{
|
{
|
||||||
if (PhotoBytes != null && PhotoBytes.Length > 0)
|
if (PhotoBytes != null && PhotoBytes.Length > 0)
|
||||||
{
|
{
|
||||||
try
|
_photoPath = ImageHelper.ResizeAndSaveImage(PhotoBytes, Id, 100);
|
||||||
{
|
|
||||||
var bytesCopy = PhotoBytes.ToArray();
|
|
||||||
_photo = ImageSource.FromStream(() => new MemoryStream(bytesCopy));
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
_photo = ImageSource.FromFile("noimage.png");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_photo = ImageSource.FromFile("noimage.png");
|
_photoPath = "noimage.png";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return _photoPath;
|
||||||
return _photo;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -130,12 +130,12 @@
|
|||||||
<Label Text="{Binding OperationDescription}" BackgroundColor="WhiteSmoke" Grid.Column="1" />
|
<Label Text="{Binding OperationDescription}" BackgroundColor="WhiteSmoke" Grid.Column="1" />
|
||||||
<Grid Grid.Column="2" ColumnDefinitions="Auto,Auto" VerticalOptions="Center">
|
<Grid Grid.Column="2" ColumnDefinitions="Auto,Auto" VerticalOptions="Center">
|
||||||
<Image Grid.Column="0"
|
<Image Grid.Column="0"
|
||||||
WidthRequest="95"
|
WidthRequest="65"
|
||||||
HeightRequest="120"
|
HeightRequest="90"
|
||||||
Aspect="AspectFill"
|
Aspect="AspectFill"
|
||||||
Margin="0,0,10,0"
|
Margin="0,0,10,0"
|
||||||
VerticalOptions="Center"
|
VerticalOptions="Center"
|
||||||
Source="{Binding Photo}" >
|
Source="{Binding PhotoPath}" >
|
||||||
</Image>
|
</Image>
|
||||||
<Button Text="📷" Grid.Column="1"
|
<Button Text="📷" Grid.Column="1"
|
||||||
VerticalOptions="Center"
|
VerticalOptions="Center"
|
||||||
@@ -162,6 +162,7 @@
|
|||||||
<Entry Grid.Column="3"
|
<Entry Grid.Column="3"
|
||||||
Text="{Binding Answer}"
|
Text="{Binding Answer}"
|
||||||
HorizontalTextAlignment="Center"
|
HorizontalTextAlignment="Center"
|
||||||
|
TextChanged="V_Entry_Text_Changed"
|
||||||
VerticalOptions="Center" />
|
VerticalOptions="Center" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</Frame>
|
</Frame>
|
||||||
|
|||||||
@@ -124,14 +124,19 @@ public partial class CheckListWorkPage : ContentPage
|
|||||||
|
|
||||||
if (checkListRowDTO != null)
|
if (checkListRowDTO != null)
|
||||||
{
|
{
|
||||||
if (checkListRowDTO.AnswerYes == true)
|
checkListRowDTO.Answer = checkListRowCS.Answer;
|
||||||
|
if (checkListRowCS.AnswerYes == true)
|
||||||
{
|
{
|
||||||
checkListRowDTO.Answer = "Igen";
|
checkListRowDTO.Answer = "Igen";
|
||||||
}
|
}
|
||||||
if (checkListRowDTO.AnswerNo == true)
|
else if (checkListRowCS.AnswerNo == true)
|
||||||
{
|
{
|
||||||
checkListRowDTO.Answer = "Nem";
|
checkListRowDTO.Answer = "Nem";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
checkListRowDTO.Answer = checkListRowCS.Answer;
|
||||||
|
}
|
||||||
await _checkListService.UpdateCheckListRow(checkListRowDTO, withReload);
|
await _checkListService.UpdateCheckListRow(checkListRowDTO, withReload);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -182,7 +187,7 @@ public partial class CheckListWorkPage : ContentPage
|
|||||||
{
|
{
|
||||||
if (MediaPicker.IsCaptureSupported)
|
if (MediaPicker.IsCaptureSupported)
|
||||||
{
|
{
|
||||||
await OnSave(false);
|
//await OnSave(false);
|
||||||
var photo = await MediaPicker.CapturePhotoAsync();
|
var photo = await MediaPicker.CapturePhotoAsync();
|
||||||
if (photo != null)
|
if (photo != null)
|
||||||
{
|
{
|
||||||
@@ -192,11 +197,11 @@ public partial class CheckListWorkPage : ContentPage
|
|||||||
var checkListRowDTO = CheckListRowDTOs.FirstOrDefault(w => w.Id == checkListRowCS.Id);
|
var checkListRowDTO = CheckListRowDTOs.FirstOrDefault(w => w.Id == checkListRowCS.Id);
|
||||||
if (checkListRowDTO != null)
|
if (checkListRowDTO != null)
|
||||||
{
|
{
|
||||||
checkListRowDTO.Photo = checkListRowCS.PhotoBytes;
|
checkListRowDTO.Photo = checkListRowCS.PhotoBytes;
|
||||||
checkListRowDTO.Answer = "Igen";
|
checkListRowDTO.Answer = "Igen";
|
||||||
|
|
||||||
await _checkListService.UpdateCheckListRow(checkListRowDTO, true);
|
await _checkListService.UpdateCheckListRow(checkListRowDTO, true);
|
||||||
await LoadCheckPointCheckListRows();
|
//await LoadCheckPointCheckListRows();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -249,6 +254,15 @@ public partial class CheckListWorkPage : ContentPage
|
|||||||
IsLoading = false;
|
IsLoading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void V_Entry_Text_Changed(object sender, TextChangedEventArgs e)
|
||||||
|
{
|
||||||
|
var entry = sender as Entry;
|
||||||
|
var model = entry?.BindingContext as CheckListRowCS;
|
||||||
|
if (model != null)
|
||||||
|
{
|
||||||
|
model.Answer = e.NewTextValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public class BindableRadioButton : RadioButton
|
public class BindableRadioButton : RadioButton
|
||||||
{
|
{
|
||||||
@@ -274,12 +288,12 @@ public class BindableRadioButton : RadioButton
|
|||||||
}
|
}
|
||||||
private void OnCheckedChangedInternal(object sender, CheckedChangedEventArgs e)
|
private void OnCheckedChangedInternal(object sender, CheckedChangedEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.Value && BindingContext is CheckListRowDTO dto)
|
if (e.Value && BindingContext is CheckListRowCS checkListRowCS)
|
||||||
{
|
{
|
||||||
if (Value?.ToString() == "Igen")
|
if (Value?.ToString() == "Igen")
|
||||||
dto.Answer = "Igen";
|
checkListRowCS.Answer = "Igen";
|
||||||
else if (Value?.ToString() == "Nem")
|
else if (Value?.ToString() == "Nem")
|
||||||
dto.Answer = "Nem";
|
checkListRowCS.Answer = "Nem";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,12 +301,12 @@ public class BindableRadioButton : RadioButton
|
|||||||
{
|
{
|
||||||
base.OnBindingContextChanged();
|
base.OnBindingContextChanged();
|
||||||
|
|
||||||
if (BindingContext is CheckListRowDTO dto)
|
if (BindingContext is CheckListRowCS checkListRowCS)
|
||||||
{
|
{
|
||||||
if (Value?.ToString() == "Igen")
|
if (Value?.ToString() == "Igen")
|
||||||
IsChecked = dto.Answer == "Igen";
|
IsChecked = checkListRowCS.Answer == "Igen";
|
||||||
else if (Value?.ToString() == "Nem")
|
else if (Value?.ToString() == "Nem")
|
||||||
IsChecked = dto.Answer == "Nem";
|
IsChecked = checkListRowCS.Answer == "Nem";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 2.2 KiB |
@@ -167,10 +167,17 @@ namespace WorkFlowCheck.MAUI.Services
|
|||||||
.Where(w => w.Id == checkListRowDTO.Id).FirstOrDefaultAsync();
|
.Where(w => w.Id == checkListRowDTO.Id).FirstOrDefaultAsync();
|
||||||
if (checkListRow != null)
|
if (checkListRow != null)
|
||||||
{
|
{
|
||||||
checkListRow.Answer = checkListRowDTO.Answer;
|
if (checkListRow.Answer != checkListRowDTO.Answer)
|
||||||
|
{
|
||||||
|
checkListRow.Answer = checkListRowDTO.Answer;
|
||||||
|
}
|
||||||
|
|
||||||
if (checkListRowDTO.Photo != null && checkListRowDTO.Photo.Length > 0 && withPhoto)
|
if (checkListRowDTO.Photo != null && checkListRowDTO.Photo.Length > 0 && withPhoto)
|
||||||
{
|
{
|
||||||
checkListRow.Photo = checkListRowDTO.Photo;
|
if (!checkListRow.Photo.SequenceEqual(checkListRowDTO.Photo ?? Array.Empty<byte>()))
|
||||||
|
{
|
||||||
|
checkListRow.Photo = checkListRowDTO.Photo ?? Array.Empty<byte>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
await _dbContext.SaveChangesAsync();
|
await _dbContext.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
@@ -321,7 +328,8 @@ namespace WorkFlowCheck.MAUI.Services
|
|||||||
.Include(i => i.CheckListTemplateRow)
|
.Include(i => i.CheckListTemplateRow)
|
||||||
.ThenInclude(i => i.CheckPoint)
|
.ThenInclude(i => i.CheckPoint)
|
||||||
.Where(w => w.CheckListHeaderId == checkListHeaderDTO.Id
|
.Where(w => w.CheckListHeaderId == checkListHeaderDTO.Id
|
||||||
&& string.IsNullOrEmpty(w.Answer.Trim()))
|
&& string.IsNullOrEmpty(w.Answer.Trim())
|
||||||
|
&& w.CheckListTemplateRow.AnswerType != "PN")
|
||||||
.Select(w => w.CheckListTemplateRow.CheckPoint)
|
.Select(w => w.CheckListTemplateRow.CheckPoint)
|
||||||
.OrderBy(cp => cp.ShortName)
|
.OrderBy(cp => cp.ShortName)
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ namespace WorkFlowCheck.Web.Helpers
|
|||||||
public static class SystemHelper
|
public static class SystemHelper
|
||||||
{
|
{
|
||||||
public static string DatabaseName = "";
|
public static string DatabaseName = "";
|
||||||
public static string ProgramVersion = "v1.1.030";
|
public static string ProgramVersion = "v1.1.032";
|
||||||
|
|
||||||
public async static Task GetAPIInfoAsync(IConfiguration configuration)
|
public async static Task GetAPIInfoAsync(IConfiguration configuration)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,6 +21,15 @@
|
|||||||
<div class="card shadow p-4" style="min-width: 350px; max-width: 400px; width: 100%;">
|
<div class="card shadow p-4" style="min-width: 350px; max-width: 400px; width: 100%;">
|
||||||
<h2 class="mb-4 text-center">Jelszó módosítása</h2>
|
<h2 class="mb-4 text-center">Jelszó módosítása</h2>
|
||||||
|
|
||||||
|
<!-- Loading overlay -->
|
||||||
|
<div id="formLoading" class="position-absolute top-0 start-0 w-100 h-100 d-none align-items-center justify-content-center"
|
||||||
|
style="background: rgba(255,255,255,.75); z-index: 10; border-radius: .375rem;">
|
||||||
|
<div class="text-center">
|
||||||
|
<div class="spinner-border" role="status" aria-hidden="true"></div>
|
||||||
|
<div class="mt-2 small text-muted">Kérlek várj…</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="errorMessageContainer" class="alert alert-danger" style="display:none;"></div>
|
<div id="errorMessageContainer" class="alert alert-danger" style="display:none;"></div>
|
||||||
|
|
||||||
<form method="post">
|
<form method="post">
|
||||||
@@ -55,14 +64,14 @@
|
|||||||
</div>
|
</div>
|
||||||
<hr class="mt-4 mb-3 border-secondary">
|
<hr class="mt-4 mb-3 border-secondary">
|
||||||
<div id="login2F1" class="d-grid">
|
<div id="login2F1" class="d-grid">
|
||||||
<button id="Login2F1Btn" type="button" class="btn btn-primary">Bejelentkezés</button>
|
<button id="Login2F1Btn" type="button" class="btn btn-primary">Ellenőrzés</button>
|
||||||
</div>
|
</div>
|
||||||
<div id="login2F2" class="d-grid">
|
<div id="login2F2" class="d-grid">
|
||||||
<button id="Login2F2Btn" type="button" class="btn btn-primary">Megerősítés</button>
|
<button id="Login2F2Btn" type="button" class="btn btn-primary">Megerősítés</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Message Modal -->
|
<!-- Message Modal -->
|
||||||
<div class="modal fade" id="messageModal" tabindex="-1" aria-labelledby="messageModalLabel" aria-hidden="true">
|
<div class="modal fade" id="messageModal" tabindex="-1" aria-labelledby="messageModalLabel" aria-hidden="true">
|
||||||
<div class="modal-dialog modal-dialog-centered">
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
@@ -80,7 +89,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="~/js/site.js" asp-append-version="true"></script>
|
<script src="~/js/site.js" asp-append-version="true"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
|
||||||
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
||||||
@@ -88,20 +97,46 @@
|
|||||||
<script src="https://cdn.jsdelivr.net/npm/jquery-validation-unobtrusive@4.0.0/dist/jquery.validate.unobtrusive.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/jquery-validation-unobtrusive@4.0.0/dist/jquery.validate.unobtrusive.min.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
function setLoading(isLoading) {
|
||||||
|
if (isLoading) {
|
||||||
|
$('#formLoading').removeClass('d-none').addClass('d-flex');
|
||||||
|
$('#Login2F1Btn, #Login2F2Btn').prop('disabled', true);
|
||||||
|
// opcionális: inputok tiltása is
|
||||||
|
// $('#User2FADTO_UserName, #User2FADTO_Password, #User2FADTO_Code').prop('disabled', true);
|
||||||
|
} else {
|
||||||
|
$('#formLoading').addClass('d-none').removeClass('d-flex');
|
||||||
|
$('#Login2F1Btn, #Login2F2Btn').prop('disabled', false);
|
||||||
|
// $('#User2FADTO_UserName, #User2FADTO_Password, #User2FADTO_Code').prop('disabled', false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let requestInFlight = false;
|
||||||
|
function beginRequest() {
|
||||||
|
if (requestInFlight) return false;
|
||||||
|
requestInFlight = true;
|
||||||
|
setLoading(true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
function endRequest() {
|
||||||
|
requestInFlight = false;
|
||||||
|
setLoading(false);
|
||||||
|
}
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
$('#VerificationCode').hide();
|
$('#VerificationCode').hide();
|
||||||
$('#login2F2').hide();
|
$('#login2F2').hide();
|
||||||
$('#Login2F2Btn').hide();
|
$('#Login2F2Btn').hide();
|
||||||
|
|
||||||
$('#UserChangePassword2FADTO_UserName').attr('readonly', true);
|
$('#UserChangePassword2FADTO_UserName').attr('readonly', true);
|
||||||
|
|
||||||
$('#Login2F1Btn').on('click', function () {
|
$('#Login2F1Btn').on('click', function () {
|
||||||
// $('#Login2F1Btn, #Login2F2Btn').prop('disabled', true);
|
// $('#Login2F1Btn, #Login2F2Btn').prop('disabled', true);
|
||||||
|
if (!beginRequest()) return;
|
||||||
|
|
||||||
$('#errorMessageContainer').hide().text('');
|
$('#errorMessageContainer').hide().text('');
|
||||||
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
|
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
|
||||||
const userName = $('#UserChangePassword2FADTO_UserName').val();
|
const userName = $('#UserChangePassword2FADTO_UserName').val();
|
||||||
const password = $('#UserChangePassword2FADTO_OldPassword').val();
|
const password = $('#UserChangePassword2FADTO_OldPassword').val();
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/Account/ChangePassword?handler=Login2F1',
|
url: '/Account/ChangePassword?handler=Login2F1',
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
@@ -136,6 +171,9 @@
|
|||||||
// .prop('disabled', false)
|
// .prop('disabled', false)
|
||||||
// .removeAttr('disabled')
|
// .removeAttr('disabled')
|
||||||
// .removeClass('disabled');
|
// .removeClass('disabled');
|
||||||
|
},
|
||||||
|
complete: function () {
|
||||||
|
endRequest();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -143,6 +181,7 @@
|
|||||||
|
|
||||||
$('#Login2F2Btn').on('click', function () {
|
$('#Login2F2Btn').on('click', function () {
|
||||||
// $('#Login2F1Btn, #Login2F2Btn').prop('disabled', true);
|
// $('#Login2F1Btn, #Login2F2Btn').prop('disabled', true);
|
||||||
|
if (!beginRequest()) return;
|
||||||
$('#errorMessageContainer').hide().text('');
|
$('#errorMessageContainer').hide().text('');
|
||||||
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
|
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
|
||||||
|
|
||||||
@@ -194,6 +233,9 @@
|
|||||||
// .prop('disabled', false)
|
// .prop('disabled', false)
|
||||||
// .removeAttr('disabled')
|
// .removeAttr('disabled')
|
||||||
// .removeClass('disabled');
|
// .removeClass('disabled');
|
||||||
|
},
|
||||||
|
complete: function () {
|
||||||
|
endRequest();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -8,9 +8,6 @@
|
|||||||
Layout = null;
|
Layout = null;
|
||||||
ViewData["Title"] = "Bejelentkezés";
|
ViewData["Title"] = "Bejelentkezés";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="hu">
|
<html lang="hu">
|
||||||
<head>
|
<head>
|
||||||
@@ -22,39 +19,48 @@
|
|||||||
@* <body class="bg-light d-flex justify-content-center align-items-center vh-100"> *@
|
@* <body class="bg-light d-flex justify-content-center align-items-center vh-100"> *@
|
||||||
<body class="bg-light d-flex flex-column min-vh-100">
|
<body class="bg-light d-flex flex-column min-vh-100">
|
||||||
<main class="flex-grow-1 d-flex justify-content-center align-items-center">
|
<main class="flex-grow-1 d-flex justify-content-center align-items-center">
|
||||||
<div class="card shadow p-4" style="min-width: 350px; max-width: 400px; width: 100%;">
|
<div class="card shadow p-4" style="min-width: 350px; max-width: 400px; width: 100%;">
|
||||||
<h2 class="mb-4 text-center">Bejelentkezés</h2>
|
<h2 class="mb-4 text-center">Bejelentkezés</h2>
|
||||||
|
|
||||||
<div id="errorMessageContainer" class="alert alert-danger" style="display:none;"></div>
|
<!-- Loading overlay -->
|
||||||
|
<div id="formLoading" class="position-absolute top-0 start-0 w-100 h-100 d-none align-items-center justify-content-center"
|
||||||
<form method="post">
|
style="background: rgba(255,255,255,.75); z-index: 10; border-radius: .375rem;">
|
||||||
<meta name="csrf-token" content="@Antiforgery.GetAndStoreTokens(HttpContext).RequestToken" />
|
<div class="text-center">
|
||||||
<input type="hidden" asp-for="User2FADTO.Token2FA" />
|
<div class="spinner-border" role="status" aria-hidden="true"></div>
|
||||||
<div class="mb-3">
|
<div class="mt-2 small text-muted">Kérlek várj…</div>
|
||||||
<label asp-for="User2FADTO.UserName" class="form-label">Felhasználónév</label>
|
</div>
|
||||||
<input asp-for="User2FADTO.UserName" class="form-control" />
|
|
||||||
<span asp-validation-for="User2FADTO.UserName" class="text-danger small"></span>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-3">
|
<div id="errorMessageContainer" class="alert alert-danger" style="display:none;"></div>
|
||||||
<label asp-for="User2FADTO.Password" class="form-label">Jelszó</label>
|
|
||||||
<input asp-for="User2FADTO.Password" type="password" class="form-control" />
|
<form method="post">
|
||||||
<span asp-validation-for="User2FADTO.Password" class="text-danger small"></span>
|
<meta name="csrf-token" content="@Antiforgery.GetAndStoreTokens(HttpContext).RequestToken" />
|
||||||
</div>
|
<input type="hidden" asp-for="User2FADTO.Token2FA" />
|
||||||
<div id="VerificationCode" class="mb-3">
|
<div class="mb-3">
|
||||||
<label asp-for="User2FADTO.Code" class="form-label">Megerősítő kód</label>
|
<label asp-for="User2FADTO.UserName" class="form-label">Felhasználónév</label>
|
||||||
<input asp-for="User2FADTO.Code" class="form-control" />
|
<input asp-for="User2FADTO.UserName" class="form-control" />
|
||||||
<span asp-validation-for="User2FADTO.Code" class="text-danger small"></span>
|
<span asp-validation-for="User2FADTO.UserName" class="text-danger small"></span>
|
||||||
</div>
|
</div>
|
||||||
<hr class="mt-4 mb-3 border-secondary">
|
|
||||||
<div id="login2F1" class="d-grid">
|
<div class="mb-3">
|
||||||
<button id="Login2F1Btn" type="button" class="btn btn-primary">Bejelentkezés</button>
|
<label asp-for="User2FADTO.Password" class="form-label">Jelszó</label>
|
||||||
</div>
|
<input asp-for="User2FADTO.Password" type="password" class="form-control" />
|
||||||
<div id="login2F2" class="d-grid">
|
<span asp-validation-for="User2FADTO.Password" class="text-danger small"></span>
|
||||||
<button id="Login2F2Btn" type="button" class="btn btn-primary">Megerősítés</button>
|
</div>
|
||||||
</div>
|
<div id="VerificationCode" class="mb-3">
|
||||||
</form>
|
<label asp-for="User2FADTO.Code" class="form-label">Megerősítő kód</label>
|
||||||
</div>
|
<input asp-for="User2FADTO.Code" class="form-control" />
|
||||||
|
<span asp-validation-for="User2FADTO.Code" class="text-danger small"></span>
|
||||||
|
</div>
|
||||||
|
<hr class="mt-4 mb-3 border-secondary">
|
||||||
|
<div id="login2F1" class="d-grid">
|
||||||
|
<button id="Login2F1Btn" type="button" class="btn btn-primary">Bejelentkezés</button>
|
||||||
|
</div>
|
||||||
|
<div id="login2F2" class="d-grid">
|
||||||
|
<button id="Login2F2Btn" type="button" class="btn btn-primary">Megerősítés</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<footer class="border-top footer text-muted">
|
<footer class="border-top footer text-muted">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -68,13 +74,41 @@
|
|||||||
<script src="https://cdn.jsdelivr.net/npm/jquery-validation-unobtrusive@4.0.0/dist/jquery.validate.unobtrusive.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/jquery-validation-unobtrusive@4.0.0/dist/jquery.validate.unobtrusive.min.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
function setLoading(isLoading) {
|
||||||
|
if (isLoading) {
|
||||||
|
$('#formLoading').removeClass('d-none').addClass('d-flex');
|
||||||
|
$('#Login2F1Btn, #Login2F2Btn').prop('disabled', true);
|
||||||
|
// opcionális: inputok tiltása is
|
||||||
|
// $('#User2FADTO_UserName, #User2FADTO_Password, #User2FADTO_Code').prop('disabled', true);
|
||||||
|
} else {
|
||||||
|
$('#formLoading').addClass('d-none').removeClass('d-flex');
|
||||||
|
$('#Login2F1Btn, #Login2F2Btn').prop('disabled', false);
|
||||||
|
// $('#User2FADTO_UserName, #User2FADTO_Password, #User2FADTO_Code').prop('disabled', false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let requestInFlight = false;
|
||||||
|
function beginRequest() {
|
||||||
|
if (requestInFlight) return false;
|
||||||
|
requestInFlight = true;
|
||||||
|
setLoading(true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
function endRequest() {
|
||||||
|
requestInFlight = false;
|
||||||
|
setLoading(false);
|
||||||
|
}
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
$('#VerificationCode').hide();
|
$('#VerificationCode').hide();
|
||||||
$('#login2F2').hide();
|
$('#login2F2').hide();
|
||||||
$('#Login2F2Btn').hide();
|
$('#Login2F2Btn').hide();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$('#Login2F1Btn').on('click', function () {
|
$('#Login2F1Btn').on('click', function () {
|
||||||
// $('#Login2F1Btn, #Login2F2Btn').prop('disabled', true);
|
// $('#Login2F1Btn, #Login2F2Btn').prop('disabled', true);
|
||||||
|
if (!beginRequest()) return;
|
||||||
$('#errorMessageContainer').hide().text('');
|
$('#errorMessageContainer').hide().text('');
|
||||||
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
|
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
|
||||||
const userName = $('#User2FADTO_UserName').val();
|
const userName = $('#User2FADTO_UserName').val();
|
||||||
@@ -114,16 +148,20 @@
|
|||||||
// .prop('disabled', false)
|
// .prop('disabled', false)
|
||||||
// .removeAttr('disabled')
|
// .removeAttr('disabled')
|
||||||
// .removeClass('disabled');
|
// .removeClass('disabled');
|
||||||
|
},
|
||||||
|
complete: function () {
|
||||||
|
endRequest();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#Login2F2Btn').on('click', function () {
|
$('#Login2F2Btn').on('click', function () {
|
||||||
// $('#Login2F1Btn, #Login2F2Btn').prop('disabled', true);
|
// $('#Login2F1Btn, #Login2F2Btn').prop('disabled', true);
|
||||||
|
if (!beginRequest()) return;
|
||||||
$('#errorMessageContainer').hide().text('');
|
$('#errorMessageContainer').hide().text('');
|
||||||
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
|
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
|
||||||
|
|
||||||
const userName = $('#User2FADTO_UserName').val();
|
const userName = $('#User2FADTO_UserName').val();
|
||||||
const password = $('#User2FADTO_Password').val();
|
const password = $('#User2FADTO_Password').val();
|
||||||
const code = $('#User2FADTO_Code').val();
|
const code = $('#User2FADTO_Code').val();
|
||||||
@@ -147,6 +185,7 @@
|
|||||||
if (result.success) {
|
if (result.success) {
|
||||||
window.location.href = `/Index`;
|
window.location.href = `/Index`;
|
||||||
} else {
|
} else {
|
||||||
|
console.log(result);
|
||||||
$('#errorMessageContainer').text('Hibás felhasználónév vagy jelszó!').show();
|
$('#errorMessageContainer').text('Hibás felhasználónév vagy jelszó!').show();
|
||||||
// $('#Login2F1Btn, #Login2F2Btn')
|
// $('#Login2F1Btn, #Login2F2Btn')
|
||||||
// .prop('disabled', false)
|
// .prop('disabled', false)
|
||||||
@@ -162,6 +201,9 @@
|
|||||||
// .prop('disabled', false)
|
// .prop('disabled', false)
|
||||||
// .removeAttr('disabled')
|
// .removeAttr('disabled')
|
||||||
// .removeClass('disabled');
|
// .removeClass('disabled');
|
||||||
|
},
|
||||||
|
complete: function () {
|
||||||
|
endRequest();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ namespace WorkFlowCheck.Web.Pages.Account
|
|||||||
Response.Cookies.Append("AuthToken", token, new CookieOptions
|
Response.Cookies.Append("AuthToken", token, new CookieOptions
|
||||||
{
|
{
|
||||||
HttpOnly = true,
|
HttpOnly = true,
|
||||||
Secure = true,
|
Secure = HttpContext.Request.IsHttps,
|
||||||
SameSite = SameSiteMode.Strict,
|
SameSite = SameSiteMode.Lax,
|
||||||
Expires = DateTimeOffset.UtcNow.AddDays(1)
|
Expires = DateTimeOffset.UtcNow.AddDays(1)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -104,7 +104,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#tbCheckPointsEditPage').on('click', '.edit-btn', function ()
|
$('#tbCheckPointsEditPage').on('click', '.edit-btn', function ()
|
||||||
|
|||||||
@@ -80,7 +80,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#newCheckPointBtn').on('click', function ()
|
$('#newCheckPointBtn').on('click', function ()
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#newEquipmentBtn').on('click', function ()
|
$('#newEquipmentBtn').on('click', function ()
|
||||||
|
|||||||
@@ -68,7 +68,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#tbImageFilesPage').on('click', '.download-btn', function ()
|
$('#tbImageFilesPage').on('click', '.download-btn', function ()
|
||||||
|
|||||||
@@ -59,7 +59,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#newLocationBtn').on('click', function ()
|
$('#newLocationBtn').on('click', function ()
|
||||||
|
|||||||
@@ -68,7 +68,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#tbAuditFilesPage').on('click', '.download-btn', function ()
|
$('#tbAuditFilesPage').on('click', '.download-btn', function ()
|
||||||
|
|||||||
@@ -68,7 +68,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#tbBusinessFilesPage').on('click', '.download-btn', function ()
|
$('#tbBusinessFilesPage').on('click', '.download-btn', function ()
|
||||||
|
|||||||
@@ -68,7 +68,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#tbPDFFilesPage').on('click', '.download-btn', function ()
|
$('#tbPDFFilesPage').on('click', '.download-btn', function ()
|
||||||
|
|||||||
+1
-1
@@ -173,7 +173,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,14 @@
|
|||||||
@using Microsoft.AspNetCore.Antiforgery
|
@using Microsoft.AspNetCore.Antiforgery
|
||||||
@inject IAntiforgery Antiforgery
|
@inject IAntiforgery Antiforgery
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Ellenőrzések";
|
ViewData["Title"] = Model.Mode switch
|
||||||
|
{
|
||||||
|
0 => "Ellenőrzések (folyamatban)",
|
||||||
|
1 => "Ellenőrzések (beküldött)",
|
||||||
|
2 => "Ellenőrzések (lezárt)",
|
||||||
|
3 => "Ellenőrzések (jóváhagyott)",
|
||||||
|
_ => "Ellenőrzések (összes)"
|
||||||
|
};
|
||||||
}
|
}
|
||||||
<h1>@ViewData["Title"]</h1>
|
<h1>@ViewData["Title"]</h1>
|
||||||
<meta name="csrf-token" content="@Antiforgery.GetAndStoreTokens(HttpContext).RequestToken" />
|
<meta name="csrf-token" content="@Antiforgery.GetAndStoreTokens(HttpContext).RequestToken" />
|
||||||
@@ -49,10 +56,16 @@
|
|||||||
|
|
||||||
@section Scripts {
|
@section Scripts {
|
||||||
<script>
|
<script>
|
||||||
|
let currentMode = @Model.Mode;
|
||||||
const table = new DataTable('#tbCheckListHeadersPage', {
|
const table = new DataTable('#tbCheckListHeadersPage', {
|
||||||
|
ordering: true,
|
||||||
|
order: [],
|
||||||
ajax: {
|
ajax: {
|
||||||
url: "@Url.Page("./CheckListHeaderPage", "LoadCheckListHeaders")",
|
url: "@Url.Page("./CheckListHeaderPage", "LoadCheckListHeaders")",
|
||||||
type: "GET",
|
type: "GET",
|
||||||
|
data: function (d) {
|
||||||
|
d.mode = currentMode;
|
||||||
|
},
|
||||||
dataSrc : "data"
|
dataSrc : "data"
|
||||||
},
|
},
|
||||||
columns: [
|
columns: [
|
||||||
@@ -104,7 +117,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing: true,
|
processing: true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#newCheckListHeaderBtn').on('click', function ()
|
$('#newCheckListHeaderBtn').on('click', function ()
|
||||||
@@ -179,7 +192,7 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#tbCheckListHeadersPage').on('click', '.accept-btn', function ()
|
$('#tbCheckListHeadersPage').on('click', '.accept-btn', function ()
|
||||||
{
|
{
|
||||||
const row = table.row($(this).closest('tr')).data();
|
const row = table.row($(this).closest('tr')).data();
|
||||||
@@ -265,7 +278,7 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#tbCheckListHeadersPage').on('click', '.unblock-btn', function ()
|
$('#tbCheckListHeadersPage').on('click', '.unblock-btn', function ()
|
||||||
{
|
{
|
||||||
const row = table.row($(this).closest('tr')).data();
|
const row = table.row($(this).closest('tr')).data();
|
||||||
@@ -309,6 +322,6 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace WorkFlowCheck.Web.Pages.CheckList.CheckListHeader
|
|||||||
{
|
{
|
||||||
private readonly ILogger<IndexModel> _logger;
|
private readonly ILogger<IndexModel> _logger;
|
||||||
private readonly ICheckListService _checkListService;
|
private readonly ICheckListService _checkListService;
|
||||||
|
public int Mode { get; private set; }
|
||||||
public List<SelectListItem> CheckStatus { get; set; }
|
public List<SelectListItem> CheckStatus { get; set; }
|
||||||
|
|
||||||
public CheckListHeaderPageModel(ILogger<IndexModel> logger, ICheckListService checkListService)
|
public CheckListHeaderPageModel(ILogger<IndexModel> logger, ICheckListService checkListService)
|
||||||
@@ -21,15 +21,16 @@ namespace WorkFlowCheck.Web.Pages.CheckList.CheckListHeader
|
|||||||
_logger = logger;
|
_logger = logger;
|
||||||
_checkListService = checkListService;
|
_checkListService = checkListService;
|
||||||
}
|
}
|
||||||
public async Task OnGet()
|
public async Task OnGet(int mode = 0)
|
||||||
{
|
{
|
||||||
|
Mode = mode;
|
||||||
CheckStatus = _checkListService.GetCheckStatus();
|
CheckStatus = _checkListService.GetCheckStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<JsonResult> OnGetLoadCheckListHeaders()
|
public async Task<JsonResult> OnGetLoadCheckListHeaders(int mode = 0)
|
||||||
{
|
{
|
||||||
var results = await _checkListService.GetAllCheckListHeaderAsync();
|
var results = await _checkListService.GetAllCheckListHeaderAsync(mode);
|
||||||
return new JsonResult(new { data = results });
|
return new JsonResult(new { data = results });
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,8 +101,8 @@ namespace WorkFlowCheck.Web.Pages.CheckList.CheckListHeader
|
|||||||
public async Task<IActionResult> OnPostClose([FromBody] CheckListHeaderCloseDTO checkListHeaderCloseDTO)
|
public async Task<IActionResult> OnPostClose([FromBody] CheckListHeaderCloseDTO checkListHeaderCloseDTO)
|
||||||
{
|
{
|
||||||
var userid = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
var userid = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||||
checkListHeaderCloseDTO.UserId=int.Parse(userid); ;
|
checkListHeaderCloseDTO.UserId = int.Parse(userid); ;
|
||||||
|
|
||||||
var response = await _checkListService.CloseCheckListHeader(checkListHeaderCloseDTO);
|
var response = await _checkListService.CloseCheckListHeader(checkListHeaderCloseDTO);
|
||||||
|
|
||||||
if (response.IsSuccess)
|
if (response.IsSuccess)
|
||||||
|
|||||||
+1
-1
@@ -116,7 +116,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -63,7 +63,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#newCheckListTemplateHeaderBtn').on('click', function ()
|
$('#newCheckListTemplateHeaderBtn').on('click', function ()
|
||||||
|
|||||||
@@ -49,7 +49,26 @@
|
|||||||
Ellenőrzési adatok
|
Ellenőrzési adatok
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu" aria-labelledby="checkListDropdown">
|
<ul class="dropdown-menu" aria-labelledby="checkListDropdown">
|
||||||
<li><a class="dropdown-item" asp-area="" asp-page="/CheckList/CheckListHeader/CheckListHeaderPage">Ellenőrzések</a></li>
|
<li>
|
||||||
|
<a class="dropdown-item" asp-area="" asp-page="/CheckList/CheckListHeader/CheckListHeaderPage"
|
||||||
|
asp-route-mode="0">Ellenőrzések (folyamatban)</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item" asp-area="" asp-page="/CheckList/CheckListHeader/CheckListHeaderPage"
|
||||||
|
asp-route-mode="1">Ellenőrzések (beküldött)</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item" asp-area="" asp-page="/CheckList/CheckListHeader/CheckListHeaderPage"
|
||||||
|
asp-route-mode="3">Ellenőrzések (jóváhagyott)</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item" asp-area="" asp-page="/CheckList/CheckListHeader/CheckListHeaderPage"
|
||||||
|
asp-route-mode="2">Ellenőrzések (lezárt)</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item" asp-area="" asp-page="/CheckList/CheckListHeader/CheckListHeaderPage"
|
||||||
|
asp-route-mode="4">Ellenőrzések (összes)</a>
|
||||||
|
</li>
|
||||||
<li><hr class="dropdown-divider"></li> <!-- EZ AZ ELVÁLASZTÓ VONAL -->
|
<li><hr class="dropdown-divider"></li> <!-- EZ AZ ELVÁLASZTÓ VONAL -->
|
||||||
<li><a class="dropdown-item" asp-area="" asp-page="/CheckListTemplate/CheckListTemplateHeader/CheckListTemplateHeaderPage">Ellenőrzési sablonok</a></li>
|
<li><a class="dropdown-item" asp-area="" asp-page="/CheckListTemplate/CheckListTemplateHeader/CheckListTemplateHeaderPage">Ellenőrzési sablonok</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -67,7 +86,7 @@
|
|||||||
<li><a class="dropdown-item" asp-area="" asp-page="/UserAndRole/RoleCheckPointsPage">Szabályok - Ellenőrzési pontok</a></li>
|
<li><a class="dropdown-item" asp-area="" asp-page="/UserAndRole/RoleCheckPointsPage">Szabályok - Ellenőrzési pontok</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navbar-nav">
|
<ul class="navbar-nav">
|
||||||
<li class="nav-item dropdown">
|
<li class="nav-item dropdown">
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#newRoleCheckListTemplateHeadersBtn').on('click', function ()
|
$('#newRoleCheckListTemplateHeadersBtn').on('click', function ()
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#newRoleCheckPointsBtn').on('click', function ()
|
$('#newRoleCheckPointsBtn').on('click', function ()
|
||||||
|
|||||||
@@ -122,7 +122,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#newRoleBtn').on('click', function ()
|
$('#newRoleBtn').on('click', function ()
|
||||||
|
|||||||
@@ -199,7 +199,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#saveUser").click(function () {
|
$("#saveUser").click(function () {
|
||||||
|
|||||||
@@ -92,7 +92,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#newUserBtn').on('click', function ()
|
$('#newUserBtn').on('click', function ()
|
||||||
|
|||||||
@@ -60,7 +60,7 @@
|
|||||||
],
|
],
|
||||||
|
|
||||||
processing:true,
|
processing:true,
|
||||||
language: { url: '//cdn.datatables.net/plug-ins/2.2.2/i18n/hu.json',}
|
language: { url: '/lib/datatables/datatables.hu.json',}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#newUserRoleBtn').on('click', function ()
|
$('#newUserRoleBtn').on('click', function ()
|
||||||
|
|||||||
@@ -24,6 +24,16 @@
|
|||||||
"environmentVariables": {
|
"environmentVariables": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"WSL": {
|
||||||
|
"commandName": "WSL2",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"launchUrl": "https://localhost:7041",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development",
|
||||||
|
"ASPNETCORE_URLS": "https://localhost:7041;http://localhost:5258"
|
||||||
|
},
|
||||||
|
"distributionName": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"$schema": "http://json.schemastore.org/launchsettings.json",
|
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ namespace WorkFlowCheck.Web.Services
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<CheckListHeaderDTO>> GetAllCheckListHeaderAsync()
|
public async Task<List<CheckListHeaderDTO>> GetAllCheckListHeaderAsync(int mode = 0)
|
||||||
{
|
{
|
||||||
var endpoint = $"{_httpClient.BaseAddress}api/CheckList/GetAllCheckListHeaders";
|
var endpoint = $"{_httpClient.BaseAddress}api/CheckList/GetAllCheckListHeaders/{mode}";
|
||||||
var retVal = new List<CheckListHeaderDTO>();
|
var retVal = new List<CheckListHeaderDTO>();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ namespace WorkFlowCheck.Web.Services.Interfaces
|
|||||||
public interface ICheckListService
|
public interface ICheckListService
|
||||||
{
|
{
|
||||||
Task<CheckListHeaderDTO> GetCheckListHeader(int id);
|
Task<CheckListHeaderDTO> GetCheckListHeader(int id);
|
||||||
Task<List<CheckListHeaderDTO>> GetAllCheckListHeaderAsync();
|
Task<List<CheckListHeaderDTO>> GetAllCheckListHeaderAsync(int mode = 0);
|
||||||
Task<ApiResponseDTO<CheckListHeaderDTO>> UpdateCheckListHeader(CheckListHeaderDTO checkListHeaderDTO);
|
Task<ApiResponseDTO<CheckListHeaderDTO>> UpdateCheckListHeader(CheckListHeaderDTO checkListHeaderDTO);
|
||||||
Task<ApiResponseDTO<byte[]>> CreatePDF(int id);
|
Task<ApiResponseDTO<byte[]>> CreatePDF(int id);
|
||||||
Task<ApiResponseDTO<bool>> AcceptCheckListHeader(int id, int userid);
|
Task<ApiResponseDTO<bool>> AcceptCheckListHeader(int id, int userid);
|
||||||
|
|||||||
@@ -61,7 +61,10 @@ namespace WorkFlowCheck.Web.Services
|
|||||||
{
|
{
|
||||||
if (userDTO.Id != null)
|
if (userDTO.Id != null)
|
||||||
{
|
{
|
||||||
userDTO.Password = "xXyY3456!!!;;"; // Ez csak amiatt kell, hogy ne szálljon el a JSON
|
if (userDTO.Id > 0)
|
||||||
|
{
|
||||||
|
userDTO.Password = "xXyY3456!!!;;"; // Ez csak amiatt kell, hogy ne szálljon el a JSON
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
string endpoint = $"{_httpClient.BaseAddress}api/user/UpdateUser";
|
string endpoint = $"{_httpClient.BaseAddress}api/user/UpdateUser";
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
<InvariantGlobalization>false</InvariantGlobalization>
|
<InvariantGlobalization>false</InvariantGlobalization>
|
||||||
<PublishAot>false</PublishAot>
|
<PublishAot>false</PublishAot>
|
||||||
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
|
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
|
||||||
|
<UserSecretsId>b1687ae9-f7e6-45cf-bfbb-293f5d38ca14</UserSecretsId>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,10 +1,17 @@
|
|||||||
{
|
{
|
||||||
"ApiBaseUrl": "https://localhost:44382/",
|
"ApiBaseUrl": "http://localhost:59027/",
|
||||||
"DetailedErrors": true,
|
"DetailedErrors": true,
|
||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Information",
|
"Default": "Information",
|
||||||
"Microsoft.AspNetCore": "Warning"
|
"Microsoft.AspNetCore": "Warning"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"Kestrel": {
|
||||||
|
"Endpoints": {
|
||||||
|
"Http": {
|
||||||
|
"Url": "http://localhost:5258"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
REM ha van paraméter, azt használjuk, különben default
|
||||||
|
set PUBLISH_DIR=%1
|
||||||
|
|
||||||
|
if "%PUBLISH_DIR%"=="" (
|
||||||
|
set PUBLISH_DIR=c:\Publish\wfcweb
|
||||||
|
)
|
||||||
|
|
||||||
|
echo Publish to: %PUBLISH_DIR%
|
||||||
|
|
||||||
|
dotnet publish -c Release -o "%PUBLISH_DIR%"
|
||||||
|
|
||||||
|
pause
|
||||||
@@ -0,0 +1,230 @@
|
|||||||
|
{
|
||||||
|
"emptyTable": "Nincs rendelkezésre álló adat",
|
||||||
|
"info": "Találatok: _START_ - _END_ Összesen: _TOTAL_",
|
||||||
|
"infoFiltered": "(_MAX_ összes rekord közül szűrve)",
|
||||||
|
"infoThousands": " ",
|
||||||
|
"lengthMenu": "_MENU_ találat oldalanként",
|
||||||
|
"loadingRecords": "Betöltés...",
|
||||||
|
"processing": "Feldolgozás...",
|
||||||
|
"search": "Keresés:",
|
||||||
|
"zeroRecords": "Nincs a keresésnek megfelelő találat",
|
||||||
|
"paginate": {
|
||||||
|
"first": "Első",
|
||||||
|
"previous": "Előző",
|
||||||
|
"next": "Következő",
|
||||||
|
"last": "Utolsó"
|
||||||
|
},
|
||||||
|
"aria": {
|
||||||
|
"sortAscending": ": aktiválja a növekvő rendezéshez",
|
||||||
|
"sortDescending": ": aktiválja a csökkenő rendezéshez"
|
||||||
|
},
|
||||||
|
"select": {
|
||||||
|
"rows": {
|
||||||
|
"_": "%d sor kiválasztva",
|
||||||
|
"1": "1 sor kiválasztva"
|
||||||
|
},
|
||||||
|
"cells": {
|
||||||
|
"1": "1 cella kiválasztva",
|
||||||
|
"_": "%d cella kiválasztva"
|
||||||
|
},
|
||||||
|
"columns": {
|
||||||
|
"1": "1 oszlop kiválasztva",
|
||||||
|
"_": "%d oszlop kiválasztva"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"buttons": {
|
||||||
|
"colvis": "Oszlopok",
|
||||||
|
"copy": "Másolás",
|
||||||
|
"copyTitle": "Vágólapra másolás",
|
||||||
|
"copySuccess": {
|
||||||
|
"_": "%d sor másolva",
|
||||||
|
"1": "1 sor másolva"
|
||||||
|
},
|
||||||
|
"collection": "Gyűjtemény",
|
||||||
|
"colvisRestore": "Oszlopok visszaállítása",
|
||||||
|
"csv": "CSV",
|
||||||
|
"excel": "Excel",
|
||||||
|
"pageLength": {
|
||||||
|
"-1": "Összes sor megjelenítése",
|
||||||
|
"_": "%d sor megjelenítése"
|
||||||
|
},
|
||||||
|
"pdf": "PDF",
|
||||||
|
"print": "Nyomtat",
|
||||||
|
"copyKeys": "A táblázat adatainak vágólapra másolásához nyomja meg a CTRL vagy u2318 + C billentyűt!<br \/><br \/>A megszakításhoz kattintson az üzenetre, vagy nyomja meg az ESC billentyűt!",
|
||||||
|
"createState": "Állapot mentése",
|
||||||
|
"removeAllStates": "Mentett állapotok törlése",
|
||||||
|
"removeState": "Törlés",
|
||||||
|
"renameState": "Átnevezés",
|
||||||
|
"savedStates": "Mentett állapotok",
|
||||||
|
"stateRestore": "%d. állapot",
|
||||||
|
"updateState": "Frissítés"
|
||||||
|
},
|
||||||
|
"autoFill": {
|
||||||
|
"cancel": "Megszakítás",
|
||||||
|
"fill": "Összes cella kitöltése a következővel: <i>%d<\/i>",
|
||||||
|
"fillHorizontal": "Cellák vízszintes kitöltése",
|
||||||
|
"fillVertical": "Cellák függőleges kitöltése"
|
||||||
|
},
|
||||||
|
"searchBuilder": {
|
||||||
|
"add": "Feltétel hozzáadása",
|
||||||
|
"button": {
|
||||||
|
"0": "Keresés konfigurátor",
|
||||||
|
"_": "Keresés konfigurátor (%d)"
|
||||||
|
},
|
||||||
|
"clearAll": "Összes feltétel törlése",
|
||||||
|
"condition": "Feltétel",
|
||||||
|
"conditions": {
|
||||||
|
"date": {
|
||||||
|
"after": "Után",
|
||||||
|
"before": "Előtt",
|
||||||
|
"between": "Között",
|
||||||
|
"empty": "Üres",
|
||||||
|
"equals": "Egyenlő",
|
||||||
|
"not": "Nem",
|
||||||
|
"notBetween": "Kívül eső",
|
||||||
|
"notEmpty": "Nem üres"
|
||||||
|
},
|
||||||
|
"number": {
|
||||||
|
"between": "Között",
|
||||||
|
"empty": "Üres",
|
||||||
|
"equals": "Egyenlő",
|
||||||
|
"gt": "Nagyobb mint",
|
||||||
|
"gte": "Nagyobb vagy egyenlő mint",
|
||||||
|
"lt": "Kissebb mint",
|
||||||
|
"lte": "Kissebb vagy egyenlő mint",
|
||||||
|
"not": "Nem",
|
||||||
|
"notBetween": "Kívül eső",
|
||||||
|
"notEmpty": "Nem üres"
|
||||||
|
},
|
||||||
|
"string": {
|
||||||
|
"contains": "Tartalmazza",
|
||||||
|
"empty": "Üres",
|
||||||
|
"endsWith": "Végződik",
|
||||||
|
"equals": "Egyenlő",
|
||||||
|
"not": "Nem",
|
||||||
|
"notEmpty": "Nem üres",
|
||||||
|
"startsWith": "Kezdődik",
|
||||||
|
"notContains": "Nem tartalmazza",
|
||||||
|
"notStartsWith": "Nem kezdődik",
|
||||||
|
"notEndsWith": "Nem végződik"
|
||||||
|
},
|
||||||
|
"array": {
|
||||||
|
"equals": "Egyenlő",
|
||||||
|
"empty": "Üres",
|
||||||
|
"contains": "Tartalmazza",
|
||||||
|
"not": "Nem",
|
||||||
|
"notEmpty": "Nem üres",
|
||||||
|
"without": "Nélkül"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"data": "Adat",
|
||||||
|
"deleteTitle": "Feltétel törlése",
|
||||||
|
"logicAnd": "És",
|
||||||
|
"logicOr": "Vagy",
|
||||||
|
"title": {
|
||||||
|
"0": "Keresés konfigurátor",
|
||||||
|
"_": "Keresés konfigurátor (%d)"
|
||||||
|
},
|
||||||
|
"value": "Érték"
|
||||||
|
},
|
||||||
|
"searchPanes": {
|
||||||
|
"clearMessage": "Szűrők törlése",
|
||||||
|
"collapse": {
|
||||||
|
"0": "Szűrőpanelek",
|
||||||
|
"_": "Szűrőpanelek (%d)"
|
||||||
|
},
|
||||||
|
"count": "{total}",
|
||||||
|
"countFiltered": "{shown} ({total})",
|
||||||
|
"emptyPanes": "Nincsenek szűrőpanelek",
|
||||||
|
"loadMessage": "Szűrőpanelek betöltése",
|
||||||
|
"title": "Aktív szűrőpanelek: %d",
|
||||||
|
"showMessage": "Mindet megmutat",
|
||||||
|
"collapseMessage": "Mindet összecsuk"
|
||||||
|
},
|
||||||
|
"datetime": {
|
||||||
|
"previous": "Előző",
|
||||||
|
"next": "Következő",
|
||||||
|
"hours": "Óra",
|
||||||
|
"minutes": "Perc",
|
||||||
|
"seconds": "Másodperc",
|
||||||
|
"amPm": [
|
||||||
|
"de.",
|
||||||
|
"du."
|
||||||
|
],
|
||||||
|
"weekdays": [
|
||||||
|
"H",
|
||||||
|
"K",
|
||||||
|
"Sze",
|
||||||
|
"Cs",
|
||||||
|
"P",
|
||||||
|
"Szo",
|
||||||
|
"V"
|
||||||
|
],
|
||||||
|
"months": [
|
||||||
|
"Január",
|
||||||
|
"Február",
|
||||||
|
"Március",
|
||||||
|
"Április",
|
||||||
|
"Május",
|
||||||
|
"Június",
|
||||||
|
"Július",
|
||||||
|
"Augusztus",
|
||||||
|
"Szeptember",
|
||||||
|
"Október",
|
||||||
|
"November",
|
||||||
|
"December"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"editor": {
|
||||||
|
"close": "Bezárás",
|
||||||
|
"create": {
|
||||||
|
"button": "Új",
|
||||||
|
"title": "Új",
|
||||||
|
"submit": "Létrehozás"
|
||||||
|
},
|
||||||
|
"edit": {
|
||||||
|
"button": "Módosítás",
|
||||||
|
"title": "Módosítás",
|
||||||
|
"submit": "Módosítás"
|
||||||
|
},
|
||||||
|
"remove": {
|
||||||
|
"button": "Törlés",
|
||||||
|
"title": "Törlés",
|
||||||
|
"submit": "Törlés"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"system": "Technikai hiba történt."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"infoEmpty": "Nincs találat",
|
||||||
|
"thousands": " ",
|
||||||
|
"stateRestore": {
|
||||||
|
"creationModal": {
|
||||||
|
"button": "Létrehozás",
|
||||||
|
"columns": {
|
||||||
|
"search": "Oszlopkeresők",
|
||||||
|
"visible": "Oszlop láthatóság"
|
||||||
|
},
|
||||||
|
"name": "Név:",
|
||||||
|
"order": "Rendezés",
|
||||||
|
"paging": "Oldalszám",
|
||||||
|
"scroller": "Görgetés pozíciója",
|
||||||
|
"search": "Kereső",
|
||||||
|
"searchBuilder": "Keresési feltételek",
|
||||||
|
"select": "Kijelölések",
|
||||||
|
"title": "Állapot mentése",
|
||||||
|
"toggleLabel": "Tartalmazza:"
|
||||||
|
},
|
||||||
|
"duplicateError": "Ilyen névvel már létezik mentett állapot.",
|
||||||
|
"emptyError": "A név nem lehet üres.",
|
||||||
|
"emptyStates": "Nincs mentett állapot",
|
||||||
|
"removeConfirm": "Biztos törlöd %s állapotot?",
|
||||||
|
"removeError": "Nem sikerült törölni a mentett állapotot.",
|
||||||
|
"removeJoiner": "és",
|
||||||
|
"removeSubmit": "Törlés",
|
||||||
|
"removeTitle": "Mentett állapot törlése",
|
||||||
|
"renameButton": "Átnevezés",
|
||||||
|
"renameLabel": "%s új neve:",
|
||||||
|
"renameTitle": "Mentett állapot átnevezése"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user