Most működik a fénykép

This commit is contained in:
2025-03-24 18:25:12 +01:00
parent 8f38408646
commit 3d44804bad
4 changed files with 130 additions and 13 deletions
@@ -10,6 +10,7 @@
<Frame BorderColor="Gray" Padding="1" Margin="2" HasShadow="True" CornerRadius="2"> <Frame BorderColor="Gray" Padding="1" Margin="2" HasShadow="True" CornerRadius="2">
<CollectionView x:Name="CheckPointCheckListRows" <CollectionView x:Name="CheckPointCheckListRows"
HeightRequest="640" HeightRequest="640"
ItemsSource="{Binding CheckListRows}"
ItemTemplate="{StaticResource AnswerTemplateSelector}"> ItemTemplate="{StaticResource AnswerTemplateSelector}">
<CollectionView.EmptyView> <CollectionView.EmptyView>
<Label Text="Nincsenek feladatok." HorizontalOptions="Center" VerticalOptions="Center"/> <Label Text="Nincsenek feladatok." HorizontalOptions="Center" VerticalOptions="Center"/>
@@ -33,7 +34,22 @@
<Label Text="I" Grid.Column="0" HorizontalTextAlignment="Center"/> <Label Text="I" Grid.Column="0" HorizontalTextAlignment="Center"/>
<Label Text="N" Grid.Column="1" HorizontalTextAlignment="Center"/> <Label Text="N" Grid.Column="1" HorizontalTextAlignment="Center"/>
</Grid> </Grid>
<Label Grid.Column="3" Text="Válasz" HorizontalTextAlignment="Center" VerticalTextAlignment="Center"/> <Grid Grid.Column="3" RowDefinitions="Auto,Auto">
<local:BindableRadioButton
Grid.Row="0"
Content="Igen"
Value="Igen"
BindableGroupName="{Binding GroupName}"
IsChecked="{Binding SelectedAnswer, Converter={StaticResource RadioButtonConverter}, ConverterParameter=Igen}"
HorizontalOptions="Center" VerticalOptions="Center"/>
<local:BindableRadioButton
Grid.Row="1"
Content="Nem"
Value="Nem"
BindableGroupName="{Binding GroupName}"
IsChecked="{Binding SelectedAnswer, Converter={StaticResource RadioButtonConverter}, ConverterParameter=Nem}"
HorizontalOptions="Center" VerticalOptions="Center"/>
</Grid>
</Grid> </Grid>
</Frame> </Frame>
</DataTemplate> </DataTemplate>
@@ -41,17 +57,25 @@
<Frame BorderColor="Gray" Padding="1" Margin="2" HasShadow="True" CornerRadius="2"> <Frame BorderColor="Gray" Padding="1" Margin="2" HasShadow="True" CornerRadius="2">
<Grid ColumnSpacing="2"> <Grid ColumnSpacing="2">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*" /> <ColumnDefinition Width="1*" />
<ColumnDefinition Width="3*" /> <ColumnDefinition Width="3*" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="2*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Label Text="{Binding CheckListTemplateRowDTO.RowIndex,StringFormat='{}{0:D1}.'}" BackgroundColor="WhiteSmoke" Grid.Column="0" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" /> <Label Text="{Binding CheckListTemplateRowDTO.RowIndex,StringFormat='{}{0:D1}.'}" BackgroundColor="WhiteSmoke" Grid.Column="0" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" />
<Label Text="{Binding CheckListTemplateRowDTO.OperationDescription}" BackgroundColor="WhiteSmoke" Grid.Column="1" /> <Label Text="{Binding CheckListTemplateRowDTO.OperationDescription}" BackgroundColor="WhiteSmoke" Grid.Column="1" />
<Grid Grid.Column="2" ColumnDefinitions="*"> <Grid Grid.Column="2" ColumnDefinitions="Auto,Auto" VerticalOptions="Center">
<Label Text="Fénykép készítése szükséges" Grid.Column="0" HorizontalTextAlignment="Center"/> <Image Grid.Column="0"
WidthRequest="95"
HeightRequest="120"
Aspect="AspectFill"
Margin="0,0,10,0"
VerticalOptions="Center"
Source="{Binding Photo, Converter={StaticResource ByteArrayToImageSourceConverter}}" />
<Button Text="📷" Grid.Column="1"
VerticalOptions="Center"
Command="{Binding BindingContext.CreatePhoto, Source={x:Reference CheckPointCheckListRows}}"
CommandParameter="{Binding .}" />
</Grid> </Grid>
<Label Grid.Column="3" Text="Válasz" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" />
</Grid> </Grid>
</Frame> </Frame>
</DataTemplate> </DataTemplate>
@@ -69,7 +93,10 @@
<Grid Grid.Column="2" ColumnDefinitions="*"> <Grid Grid.Column="2" ColumnDefinitions="*">
<Label Text="Érték megadása szükséges" Grid.Column="0" HorizontalTextAlignment="Center"/> <Label Text="Érték megadása szükséges" Grid.Column="0" HorizontalTextAlignment="Center"/>
</Grid> </Grid>
<Label Grid.Column="3" Text="Válasz" HorizontalTextAlignment="Center" VerticalTextAlignment="Center"/> <Entry Grid.Column="3"
Text="{Binding Answer}"
HorizontalTextAlignment="Center"
VerticalOptions="Center" />
</Grid> </Grid>
</Frame> </Frame>
</DataTemplate> </DataTemplate>
@@ -88,7 +115,22 @@
<Label Text="I" Grid.Column="0" BackgroundColor="Yellow" TextColor="Black" HorizontalTextAlignment="Center" VerticalTextAlignment="Center"/> <Label Text="I" Grid.Column="0" BackgroundColor="Yellow" TextColor="Black" HorizontalTextAlignment="Center" VerticalTextAlignment="Center"/>
<Label Text="N" Grid.Column="1" HorizontalTextAlignment="Center" VerticalTextAlignment="Center"/> <Label Text="N" Grid.Column="1" HorizontalTextAlignment="Center" VerticalTextAlignment="Center"/>
</Grid> </Grid>
<Label Grid.Column="3" Text="Válasz" HorizontalTextAlignment="Center" VerticalTextAlignment="Center"/> <Grid Grid.Column="3" RowDefinitions="Auto,Auto">
<local:BindableRadioButton
Grid.Row="0"
Content="Igen"
Value="Igen"
BindableGroupName="{Binding GroupName}"
IsChecked="{Binding SelectedAnswer, Converter={StaticResource RadioButtonConverter}, ConverterParameter=Igen}"
HorizontalOptions="Center" VerticalOptions="Center"/>
<local:BindableRadioButton
Grid.Row="1"
Content="Nem"
Value="Nem"
BindableGroupName="{Binding GroupName}"
IsChecked="{Binding SelectedAnswer, Converter={StaticResource RadioButtonConverter}, ConverterParameter=Nem}"
HorizontalOptions="Center" VerticalOptions="Center"/>
</Grid>
</Grid> </Grid>
</Frame> </Frame>
</DataTemplate> </DataTemplate>
@@ -202,5 +244,6 @@
PI_N_Template="{StaticResource PI_N_Template}" PI_N_Template="{StaticResource PI_N_Template}"
I_PN_Template="{StaticResource I_PN_Template}" I_PN_Template="{StaticResource I_PN_Template}"
V_Template="{StaticResource V_Template}"/> V_Template="{StaticResource V_Template}"/>
<local:ByteArrayToImageSourceConverter x:Key="ByteArrayToImageSourceConverter"/>
</ContentPage.Resources> </ContentPage.Resources>
</ContentPage> </ContentPage>
@@ -1,6 +1,10 @@
using WorkFlowCheck.Common.DTO; using WorkFlowCheck.Common.DTO;
using WorkFlowCheck.MAUI.Services.Interfaces; using WorkFlowCheck.MAUI.Services.Interfaces;
using Microsoft.Maui.Controls; using Microsoft.Maui.Controls;
using System.Windows.Input;
using System.Globalization;
using DevExpress.Data.Helpers;
using System.Collections.ObjectModel;
namespace WorkFlowCheck.MAUI.Pages.CheckList; namespace WorkFlowCheck.MAUI.Pages.CheckList;
@@ -11,6 +15,8 @@ public partial class CheckListWorkPage : ContentPage
private int _checkListHeaderId; private int _checkListHeaderId;
private UserDTO _userDTO; private UserDTO _userDTO;
public ObservableCollection<CheckListRowDTO> CheckListRows { get; set; } = new ObservableCollection<CheckListRowDTO>();
public ICommand CreatePhoto { get; set; }
public CheckListWorkPage(int checkListHeaderId, string checkPointCode) public CheckListWorkPage(int checkListHeaderId, string checkPointCode)
{ {
@@ -23,14 +29,47 @@ public partial class CheckListWorkPage : ContentPage
protected override async void OnAppearing() protected override async void OnAppearing()
{ {
base.OnAppearing(); base.OnAppearing();
BindingContext = this; CreatePhoto = new Command<CheckListRowDTO>(OnTakePhoto);
await LoadCheckPointCheckListRows(); await LoadCheckPointCheckListRows();
BindingContext = this;
} }
private async void OnTakePhoto(CheckListRowDTO checkListRowDTO)
{
try
{
if (MediaPicker.IsCaptureSupported)
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo != null)
{
using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
byte[] photoBytes = ms.ToArray();
checkListRowDTO.Photo = photoBytes;
await _checkListService.UpdateCheckListRow(checkListRowDTO);
await LoadCheckPointCheckListRows();
}
}
else
{
Console.WriteLine("A fényképezés nem támogatott ezen az eszközön.");
}
}
catch (Exception ex)
{
Console.WriteLine($"Hiba történt a fényképezés közben: {ex.Message}");
}
}
private async Task LoadCheckPointCheckListRows() private async Task LoadCheckPointCheckListRows()
{ {
CheckPointCheckListRows.ItemsSource = await _checkListService.GetCheckListRowsByCheckPointCode(_userDTO.Id, _checkListHeaderId, _checkPointCode); CheckListRows.Clear();
var checkListRowDTOs = await _checkListService.GetCheckListRowsByCheckPointCode(_userDTO.Id, _checkListHeaderId, _checkPointCode);
foreach (var item in checkListRowDTOs)
{
CheckListRows.Add(item);
}
} }
} }
public class BindableRadioButton : RadioButton public class BindableRadioButton : RadioButton
@@ -51,4 +90,20 @@ public class BindableRadioButton : RadioButton
radioButton.GroupName = newGroupName; radioButton.GroupName = newGroupName;
} }
} }
} }
public class ByteArrayToImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is byte[] bytes && bytes.Length > 0)
{
return ImageSource.FromStream(() => new MemoryStream(bytes));
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
@@ -138,5 +138,23 @@ namespace WorkFlowCheck.MAUI.Services
return retVal; return retVal;
} }
public async Task<CheckListRowDTO> UpdateCheckListRow(CheckListRowDTO checkListRowDTO)
{
var retVal = checkListRowDTO;
try
{
var checkListRow = await _dbContext.CheckListRows.Where(w => w.Id == checkListRowDTO.Id).FirstOrDefaultAsync();
if (checkListRow != null)
{
checkListRow.Photo = checkListRowDTO.Photo;
await _dbContext.SaveChangesAsync();
}
}
catch (Exception)
{
}
return retVal;
}
} }
} }
@@ -16,5 +16,6 @@ namespace WorkFlowCheck.MAUI.Services.Interfaces
Task<List<CheckListHeaderDTO>> GetCheckLists(int userId); Task<List<CheckListHeaderDTO>> GetCheckLists(int userId);
Task<List<CheckListTemplateHeaderDTO>> GetCheckListTemplates(int userId); Task<List<CheckListTemplateHeaderDTO>> GetCheckListTemplates(int userId);
Task<List<CheckListRowDTO>> GetCheckListRowsByCheckPointCode(int userId, int checkListHeaderId, string checkPointCode); Task<List<CheckListRowDTO>> GetCheckListRowsByCheckPointCode(int userId, int checkListHeaderId, string checkPointCode);
Task<CheckListRowDTO> UpdateCheckListRow(CheckListRowDTO checkListRowDTO);
} }
} }