Compare commits
1 Commits
feature/ya
...
main
Author | SHA1 | Date | |
---|---|---|---|
ee4626269e |
@ -9,7 +9,7 @@ public partial class App : Application
|
||||
{
|
||||
InitializeComponent();
|
||||
// On démarre sur MainPage dans une NavigationPage pour permettre la navigation
|
||||
MainPage = new NavigationPage(new MainPage());
|
||||
MainPage = new AppShell();
|
||||
InitializeDatabase();
|
||||
}
|
||||
|
||||
|
@ -3,14 +3,15 @@
|
||||
x:Class="MauiAppStock.AppShell"
|
||||
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:local="clr-namespace:MauiAppStock"
|
||||
xmlns:views="clr-namespace:MauiAppStock.Views"
|
||||
Shell.FlyoutBehavior="Disabled"
|
||||
Title="MauiAppStock">
|
||||
|
||||
<ShellContent
|
||||
Title="Home"
|
||||
ContentTemplate="{DataTemplate views:MainPage}"
|
||||
Route="MainPage" />
|
||||
<Tab>
|
||||
<ShellContent Title="Acceuil" ContentTemplate="{DataTemplate views:MainPage}" />
|
||||
<ShellContent Title="Appareils" ContentTemplate="{DataTemplate views:AppareilsPage}"/>
|
||||
<ShellContent Title="Pièces" ContentTemplate="{DataTemplate views:PiecesPage}"/>
|
||||
<ShellContent Title="Association" ContentTemplate="{DataTemplate views:SelectAppareilForAssociationPage}"/>
|
||||
</Tab>
|
||||
|
||||
</Shell>
|
||||
|
@ -1,9 +1,22 @@
|
||||
namespace MauiAppStock;
|
||||
using MauiAppStock.Views;
|
||||
|
||||
namespace MauiAppStock;
|
||||
|
||||
public partial class AppShell : Shell
|
||||
{
|
||||
public AppShell()
|
||||
{
|
||||
InitializeComponent();
|
||||
Routing.RegisterRoute(nameof(MainPage), typeof(MainPage));
|
||||
Routing.RegisterRoute(nameof(AppareilsPage), typeof(AppareilsPage));
|
||||
Routing.RegisterRoute(nameof(PiecesPage), typeof(PiecesPage));
|
||||
Routing.RegisterRoute(nameof(SelectAppareilForAssociationPage), typeof(SelectAppareilForAssociationPage));
|
||||
}
|
||||
protected override void OnNavigating(ShellNavigatingEventArgs args)
|
||||
{
|
||||
base.OnNavigating(args);
|
||||
|
||||
bool isMainPage = args.Target?.Location?.OriginalString == "//MainPage";
|
||||
Shell.SetBackButtonBehavior(this, new BackButtonBehavior { IsVisible = !isMainPage });
|
||||
}
|
||||
}
|
@ -20,7 +20,6 @@ namespace MauiAppStock.Data
|
||||
await db.CreateTableAsync<Appareil>();
|
||||
await db.CreateTableAsync<Piece>();
|
||||
await db.CreateTableAsync<AppareilPiece>(); // Table de liaison
|
||||
await db.CreateTableAsync<MouvementStock>(); // Table des mouvements de stock
|
||||
}
|
||||
}
|
||||
|
||||
@ -140,34 +139,5 @@ namespace MauiAppStock.Data
|
||||
.Where(ap => ap.AppareilId == appareilId && ap.PieceId == pieceId)
|
||||
.FirstOrDefaultAsync();
|
||||
}
|
||||
|
||||
// CRUD pour MouvementStock
|
||||
public static Task<int> AddMouvementStockAsync(MouvementStock mouvement)
|
||||
{
|
||||
return db.InsertAsync(mouvement);
|
||||
}
|
||||
|
||||
public static Task<List<MouvementStock>> GetMouvementsStockAsync()
|
||||
{
|
||||
return db.Table<MouvementStock>().OrderByDescending(m => m.DateMouvement).ToListAsync();
|
||||
}
|
||||
|
||||
public static async Task<List<MouvementStock>> GetMouvementsStockForPieceAsync(int pieceId)
|
||||
{
|
||||
return await db.Table<MouvementStock>()
|
||||
.Where(m => m.PieceId == pieceId)
|
||||
.OrderByDescending(m => m.DateMouvement)
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
public static Task<int> UpdateMouvementStockAsync(MouvementStock mouvement)
|
||||
{
|
||||
return db.UpdateAsync(mouvement);
|
||||
}
|
||||
|
||||
public static Task<int> DeleteMouvementStockAsync(MouvementStock mouvement)
|
||||
{
|
||||
return db.DeleteAsync(mouvement);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,12 +9,5 @@ namespace MauiAppStock.Models
|
||||
public string Nom { get; set; }
|
||||
public string Description { get; set; }
|
||||
// Vous pouvez ajouter d'autres propriétés (stock, historique, etc.)
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{Nom}";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
using SQLite;
|
||||
|
||||
namespace MauiAppStock.Models
|
||||
{
|
||||
public class MouvementStock
|
||||
{
|
||||
[PrimaryKey, AutoIncrement]
|
||||
public int Id { get; set; }
|
||||
|
||||
public int PieceId { get; set; }
|
||||
|
||||
public DateTime DateMouvement { get; set; }
|
||||
|
||||
public TypeMouvement Type { get; set; }
|
||||
|
||||
public int Quantite { get; set; } // Number of parts moved
|
||||
|
||||
public string? Commentaire { get; set; }
|
||||
|
||||
[Ignore]
|
||||
public string NomPiece { get; set; }
|
||||
|
||||
[Ignore]
|
||||
public bool HasComment => !string.IsNullOrWhiteSpace(Commentaire);
|
||||
}
|
||||
|
||||
public enum TypeMouvement
|
||||
{
|
||||
EntreeStock, // Parts entering stock (purchase)
|
||||
SortieReparation // Parts used for repair
|
||||
}
|
||||
}
|
@ -6,17 +6,13 @@ namespace MauiAppStock.Models
|
||||
{
|
||||
[PrimaryKey, AutoIncrement]
|
||||
public int Id { get; set; }
|
||||
public string? Nom { get; set; }
|
||||
public string? Description { get; set; }
|
||||
public string Nom { get; set; }
|
||||
public string Description { get; set; }
|
||||
public double Prix { get; set; }
|
||||
public int Stock { get; set; }
|
||||
public string? Fournisseur { get; set; }
|
||||
|
||||
// public int Appareil { get; set; }
|
||||
public string Fournisseur { get; set; }
|
||||
|
||||
[Ignore]
|
||||
public bool EstRecommandee { get; set; }
|
||||
|
||||
public string DetailView { get { return " ID : " + Id + @" - " + Description; } }
|
||||
}
|
||||
}
|
@ -8,9 +8,6 @@
|
||||
<Editor x:Name="DescriptionEditor" Placeholder="Description" HeightRequest="100"/>
|
||||
<Entry x:Name="PrixEntry" Placeholder="Prix" Keyboard="Numeric"/>
|
||||
<Entry x:Name="StockEntry" Placeholder="Stock" Keyboard="Numeric"/>
|
||||
<!-- <Picker x:Name="FournisseurPicker"
|
||||
Title="Choisissez un Fournisseur">
|
||||
</Picker> !-->
|
||||
<Entry x:Name="FournisseurEntry" Placeholder="Fournisseur"/>
|
||||
<Button Text="Enregistrer" Clicked="OnSaveClicked"/>
|
||||
</StackLayout>
|
||||
|
@ -1,6 +1,5 @@
|
||||
using MauiAppStock.Models;
|
||||
using MauiAppStock.Data;
|
||||
using Microsoft.Maui.Controls.Internals;
|
||||
|
||||
namespace MauiAppStock.Views
|
||||
{
|
||||
@ -9,34 +8,18 @@ namespace MauiAppStock.Views
|
||||
public AddPiecePage()
|
||||
{
|
||||
InitializeComponent();
|
||||
LoadAppareils();
|
||||
}
|
||||
|
||||
private async void LoadAppareils()
|
||||
{
|
||||
// FournisseurPicker.ItemsSource = await Database.GetAppareilsAsync();
|
||||
}
|
||||
|
||||
private async void OnSaveClicked(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
if (double.TryParse(PrixEntry.Text, out double prix) && int.TryParse(StockEntry.Text, out int stock))
|
||||
{
|
||||
// Appareil appareilPicked = AppareilPicker.SelectedItem as Appareil;
|
||||
|
||||
// if (appareilPicked == null)
|
||||
//{
|
||||
// await DisplayAlert("ERREUR", "L'appareil n'est pas un valide", "OK");
|
||||
// return;
|
||||
//}
|
||||
|
||||
var piece = new Piece
|
||||
{
|
||||
Nom = NomEntry.Text,
|
||||
Description = DescriptionEditor.Text,
|
||||
Prix = prix,
|
||||
Stock = stock,
|
||||
// Appareil = appareilPicked.Id, Exemple pour fournisseur
|
||||
Fournisseur = FournisseurEntry.Text
|
||||
};
|
||||
await Database.AddPieceAsync(piece);
|
||||
|
@ -15,7 +15,9 @@
|
||||
<ListView x:Name="AssociationsListView" ItemsSource="{Binding AppareilPieces}"
|
||||
IsPullToRefreshEnabled="True"
|
||||
RefreshCommand="{Binding LoadAssociationsCommand}"
|
||||
ItemTapped="OnAssociationTapped">
|
||||
ItemTapped="OnAssociationTapped"
|
||||
HasUnevenRows="True"
|
||||
HeightRequest="500">
|
||||
<ListView.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<ViewCell>
|
||||
|
@ -8,9 +8,6 @@
|
||||
<Editor x:Name="DescriptionEditor" Placeholder="Description" HeightRequest="100"/>
|
||||
<Entry x:Name="PrixEntry" Placeholder="Prix" Keyboard="Numeric"/>
|
||||
<Entry x:Name="StockEntry" Placeholder="Stock" Keyboard="Numeric"/>
|
||||
<Picker x:Name="AppareilPicker"
|
||||
Title="Choisissez un appareil">
|
||||
</Picker>
|
||||
<Entry x:Name="FournisseurEntry" Placeholder="Fournisseur"/>
|
||||
<Button Text="Enregistrer" Clicked="OnSaveClicked"/>
|
||||
<Button Text="Supprimer" Clicked="OnDeleteClicked" TextColor="Red"/>
|
||||
|
@ -6,41 +6,26 @@ namespace MauiAppStock.Views
|
||||
public partial class EditPiecePage : ContentPage
|
||||
{
|
||||
private Piece _piece;
|
||||
|
||||
public EditPiecePage(Piece piece)
|
||||
{
|
||||
InitializeComponent();
|
||||
// LoadAppareils();
|
||||
_piece = piece;
|
||||
NomEntry.Text = piece.Nom;
|
||||
DescriptionEditor.Text = piece.Description;
|
||||
PrixEntry.Text = piece.Prix.ToString();
|
||||
StockEntry.Text = piece.Stock.ToString();
|
||||
FournisseurEntry.Text = piece.Fournisseur; // TODO : Prochainement picker pour fournisseur
|
||||
FournisseurEntry.Text = piece.Fournisseur;
|
||||
}
|
||||
|
||||
//private async void LoadAppareils()
|
||||
//{
|
||||
// AppareilPicker.ItemsSource = await Database.GetAppareilsAsync();
|
||||
//}
|
||||
|
||||
private async void OnSaveClicked(object sender, EventArgs e)
|
||||
{
|
||||
// Appareil appareilPicked = AppareilPicker.SelectedItem as Appareil;
|
||||
|
||||
//if (appareilPicked == null)
|
||||
//{
|
||||
// await DisplayAlert("ERREUR", "L'appareil n'est pas un valide", "OK");
|
||||
// return;
|
||||
//}
|
||||
|
||||
if (double.TryParse(PrixEntry.Text, out double prix) && int.TryParse(StockEntry.Text, out int stock))
|
||||
{
|
||||
_piece.Nom = NomEntry.Text;
|
||||
_piece.Description = DescriptionEditor.Text;
|
||||
_piece.Prix = prix;
|
||||
_piece.Stock = stock;
|
||||
_piece.Fournisseur = FournisseurEntry.Text;
|
||||
// _piece.Fournisseur = SelectedFournisseur;
|
||||
await Database.UpdatePieceAsync(_piece);
|
||||
await Navigation.PopAsync();
|
||||
}
|
||||
|
@ -2,11 +2,7 @@
|
||||
<ContentPage x:Class="MauiAppStock.Views.MainPage"
|
||||
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
|
||||
<StackLayout Padding="20" Spacing="20" VerticalOptions="Center">
|
||||
<Label Text="Menu Principal" FontSize="30" HorizontalOptions="Center" />
|
||||
<Button Text="Gestion des Appareils" Clicked="OnAppareilsClicked" />
|
||||
<Button Text="Gestion des Pièces" Clicked="OnPiecesClicked" />
|
||||
<Button Text="Associer une Pièce à un Appareil" Clicked="OnAssocierPieceClicked" />
|
||||
<Button Text="Mouvement de Stock" Clicked="OnMouvementStockClicked" />
|
||||
</StackLayout>
|
||||
<VerticalStackLayout Padding="10" Spacing="10" >
|
||||
<Label Text="Bienvenue sur le site : AppStock" FontSize="20"/>
|
||||
</VerticalStackLayout>
|
||||
</ContentPage>
|
@ -25,10 +25,5 @@ namespace MauiAppStock.Views
|
||||
// On navigue vers une page qui permet de sélectionner un appareil pour ensuite associer une pièce.
|
||||
await Navigation.PushAsync(new SelectAppareilForAssociationPage());
|
||||
}
|
||||
|
||||
private async void OnMouvementStockClicked(object sender, EventArgs e)
|
||||
{
|
||||
await Navigation.PushAsync(new MouvementStockPage());
|
||||
}
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="MauiAppStock.Views.MouvementStockHistoryPage"
|
||||
Title="Historique des Mouvements">
|
||||
<Grid RowDefinitions="Auto,*">
|
||||
<VerticalStackLayout Grid.Row="0" Spacing="10" Padding="20">
|
||||
<Label Text="Historique des Mouvements de Stock"
|
||||
SemanticProperties.HeadingLevel="Level1"
|
||||
FontSize="24"
|
||||
HorizontalOptions="Center" />
|
||||
|
||||
<Picker x:Name="FilterPicker"
|
||||
Title="Filtrer par type"
|
||||
SelectedIndexChanged="OnFilterChanged">
|
||||
<Picker.Items>
|
||||
<x:String>Tous</x:String>
|
||||
<x:String>Entrée Stock</x:String>
|
||||
<x:String>Sortie Réparation</x:String>
|
||||
</Picker.Items>
|
||||
</Picker>
|
||||
</VerticalStackLayout>
|
||||
|
||||
<CollectionView Grid.Row="1"
|
||||
x:Name="MouvementsCollection"
|
||||
SelectionMode="None">
|
||||
<CollectionView.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Frame Margin="10" Padding="10">
|
||||
<Grid ColumnDefinitions="*,Auto" RowDefinitions="Auto,Auto,Auto">
|
||||
<Label Text="{Binding NomPiece}"
|
||||
FontSize="16"
|
||||
FontAttributes="Bold"
|
||||
Grid.Column="0"
|
||||
Grid.Row="0"/>
|
||||
|
||||
<Label Text="{Binding DateMouvement, StringFormat='{0:dd/MM/yyyy HH:mm}'}"
|
||||
Grid.Column="1"
|
||||
Grid.Row="0"/>
|
||||
|
||||
<Label Text="{Binding Type, StringFormat='Type: {0}'}"
|
||||
Grid.Column="0"
|
||||
Grid.Row="1"/>
|
||||
|
||||
<Label Text="{Binding Quantite, StringFormat='Quantité: {0}'}"
|
||||
Grid.Column="1"
|
||||
Grid.Row="1"/>
|
||||
|
||||
<Label Text="{Binding Commentaire}"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="2"
|
||||
Grid.Row="2"
|
||||
IsVisible="{Binding HasComment}"/>
|
||||
</Grid>
|
||||
</Frame>
|
||||
</DataTemplate>
|
||||
</CollectionView.ItemTemplate>
|
||||
</CollectionView>
|
||||
</Grid>
|
||||
</ContentPage>
|
@ -1,60 +0,0 @@
|
||||
using MauiAppStock.Models;
|
||||
using MauiAppStock.Data;
|
||||
|
||||
namespace MauiAppStock.Views;
|
||||
|
||||
public partial class MouvementStockHistoryPage : ContentPage
|
||||
{
|
||||
private List<MouvementStock> allMouvements;
|
||||
private List<Piece> pieces;
|
||||
|
||||
public MouvementStockHistoryPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
LoadData();
|
||||
}
|
||||
|
||||
private async void LoadData()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Load all pieces to get their names
|
||||
pieces = await Database.GetPiecesAsync();
|
||||
|
||||
// Load all movements
|
||||
allMouvements = await Database.GetMouvementsStockAsync();
|
||||
|
||||
// Add piece names to movements
|
||||
foreach (var mouvement in allMouvements)
|
||||
{
|
||||
var piece = pieces.FirstOrDefault(p => p.Id == mouvement.PieceId);
|
||||
if (piece != null)
|
||||
{
|
||||
mouvement.NomPiece = piece.Nom;
|
||||
}
|
||||
}
|
||||
|
||||
// Display all movements initially
|
||||
MouvementsCollection.ItemsSource = allMouvements;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await DisplayAlert("Erreur", "Impossible de charger l'historique: " + ex.Message, "OK");
|
||||
}
|
||||
}
|
||||
|
||||
private void OnFilterChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (allMouvements == null) return;
|
||||
|
||||
var selectedIndex = FilterPicker.SelectedIndex;
|
||||
var filteredMouvements = selectedIndex switch
|
||||
{
|
||||
1 => allMouvements.Where(m => m.Type == TypeMouvement.EntreeStock).ToList(),
|
||||
2 => allMouvements.Where(m => m.Type == TypeMouvement.SortieReparation).ToList(),
|
||||
_ => allMouvements
|
||||
};
|
||||
|
||||
MouvementsCollection.ItemsSource = filteredMouvements;
|
||||
}
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="MauiAppStock.Views.MouvementStockPage"
|
||||
Title="Mouvement de Stock">
|
||||
<ScrollView>
|
||||
<VerticalStackLayout Spacing="10" Padding="20">
|
||||
<Label Text="Mouvement de Stock"
|
||||
SemanticProperties.HeadingLevel="Level1"
|
||||
FontSize="24"
|
||||
HorizontalOptions="Center" />
|
||||
|
||||
<Button Text="Voir l'historique"
|
||||
Clicked="OnViewHistoryClicked"
|
||||
HorizontalOptions="End" />
|
||||
|
||||
<Picker x:Name="TypeMouvementPicker"
|
||||
Title="Type de Mouvement">
|
||||
<Picker.Items>
|
||||
<x:String>Entrée Stock</x:String>
|
||||
<x:String>Sortie Réparation</x:String>
|
||||
</Picker.Items>
|
||||
</Picker>
|
||||
|
||||
<Picker x:Name="PiecePicker"
|
||||
Title="Sélectionner une pièce"
|
||||
ItemDisplayBinding="{Binding Nom}"
|
||||
SelectedIndexChanged="OnPieceSelected"/>
|
||||
|
||||
<Label Text="Quantité:"
|
||||
SemanticProperties.HeadingLevel="Level2"/>
|
||||
<Entry x:Name="QuantiteEntry"
|
||||
Keyboard="Numeric"
|
||||
Placeholder="Entrez la quantité"/>
|
||||
|
||||
<Label Text="Commentaire:"
|
||||
SemanticProperties.HeadingLevel="Level2"/>
|
||||
<Editor x:Name="CommentaireEditor"
|
||||
Placeholder="Ajouter un commentaire"
|
||||
HeightRequest="100"/>
|
||||
|
||||
<Button x:Name="SaveButton"
|
||||
Text="Enregistrer"
|
||||
SemanticProperties.Hint="Enregistre le mouvement de stock"
|
||||
Clicked="OnSaveClicked"
|
||||
HorizontalOptions="Center" />
|
||||
|
||||
<Button x:Name="CancelButton"
|
||||
Text="Annuler"
|
||||
SemanticProperties.Hint="Annule l'opération"
|
||||
Clicked="OnCancelClicked"
|
||||
HorizontalOptions="Center" />
|
||||
</VerticalStackLayout>
|
||||
</ScrollView>
|
||||
</ContentPage>
|
@ -1,101 +0,0 @@
|
||||
using MauiAppStock.Models;
|
||||
using MauiAppStock.Data;
|
||||
|
||||
namespace MauiAppStock.Views;
|
||||
|
||||
public partial class MouvementStockPage : ContentPage
|
||||
{
|
||||
private List<Piece> pieces;
|
||||
private Piece selectedPiece;
|
||||
|
||||
public MouvementStockPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
LoadData();
|
||||
}
|
||||
|
||||
private async void LoadData()
|
||||
{
|
||||
try
|
||||
{
|
||||
pieces = await Database.GetPiecesAsync();
|
||||
PiecePicker.ItemsSource = pieces;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await DisplayAlert("Erreur", "Impossible de charger les données: " + ex.Message, "OK");
|
||||
}
|
||||
}
|
||||
|
||||
private void OnPieceSelected(object sender, EventArgs e)
|
||||
{
|
||||
if (PiecePicker.SelectedItem != null)
|
||||
{
|
||||
selectedPiece = (Piece)PiecePicker.SelectedItem;
|
||||
}
|
||||
}
|
||||
|
||||
private async void OnViewHistoryClicked(object sender, EventArgs e)
|
||||
{
|
||||
await Navigation.PushAsync(new MouvementStockHistoryPage());
|
||||
}
|
||||
|
||||
private async void OnSaveClicked(object sender, EventArgs e)
|
||||
{
|
||||
if (selectedPiece == null)
|
||||
{
|
||||
await DisplayAlert("Erreur", "Veuillez sélectionner une pièce", "OK");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!int.TryParse(QuantiteEntry.Text, out int quantite) || quantite <= 0)
|
||||
{
|
||||
await DisplayAlert("Erreur", "Veuillez entrer une quantité valide", "OK");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Create new stock movement
|
||||
var mouvement = new MouvementStock
|
||||
{
|
||||
PieceId = selectedPiece.Id,
|
||||
DateMouvement = DateTime.Now,
|
||||
Type = TypeMouvementPicker.SelectedIndex == 0 ? TypeMouvement.EntreeStock : TypeMouvement.SortieReparation,
|
||||
Quantite = quantite,
|
||||
Commentaire = CommentaireEditor.Text
|
||||
};
|
||||
|
||||
// Update piece stock
|
||||
if (TypeMouvementPicker.SelectedIndex == 0)
|
||||
{
|
||||
selectedPiece.Stock += quantite;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (selectedPiece.Stock < quantite)
|
||||
{
|
||||
await DisplayAlert("Erreur", "Stock insuffisant", "OK");
|
||||
return;
|
||||
}
|
||||
selectedPiece.Stock -= quantite;
|
||||
}
|
||||
|
||||
// Save changes using Database class
|
||||
await Database.AddMouvementStockAsync(mouvement);
|
||||
await Database.UpdatePieceAsync(selectedPiece);
|
||||
|
||||
await DisplayAlert("Succès", "Mouvement de stock enregistré", "OK");
|
||||
await Navigation.PopAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await DisplayAlert("Erreur", "Impossible d'enregistrer le mouvement: " + ex.Message, "OK");
|
||||
}
|
||||
}
|
||||
|
||||
private async void OnCancelClicked(object sender, EventArgs e)
|
||||
{
|
||||
await Navigation.PopAsync();
|
||||
}
|
||||
}
|
@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage x:Class="MauiAppStock.Views.PiecesPage"
|
||||
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
@ -8,17 +7,17 @@
|
||||
<vm:PiecesViewModel />
|
||||
</ContentPage.BindingContext>
|
||||
<ContentPage.ToolbarItems>
|
||||
<ToolbarItem Text="+" Clicked="OnAddPieceClicked" />
|
||||
<ToolbarItem Text="+" Clicked="OnAddPieceClicked"/>
|
||||
</ContentPage.ToolbarItems>
|
||||
<StackLayout Padding="10">
|
||||
<Label Text="Liste des Pièces" FontSize="24" HorizontalOptions="Center" />
|
||||
<Label Text="Liste des Pièces" FontSize="24" HorizontalOptions="Center"/>
|
||||
<ListView x:Name="PiecesListView" ItemsSource="{Binding Pieces}"
|
||||
IsPullToRefreshEnabled="True"
|
||||
RefreshCommand="{Binding LoadPiecesCommand}"
|
||||
ItemTapped="OnPieceTapped">
|
||||
<ListView.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextCell Text="{Binding Nom}" Detail="{Binding DetailView}" />
|
||||
<TextCell Text="{Binding Nom}" Detail="{Binding Description}"/>
|
||||
</DataTemplate>
|
||||
</ListView.ItemTemplate>
|
||||
</ListView>
|
||||
|
@ -3,6 +3,7 @@
|
||||
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
|
||||
<StackLayout Padding="10">
|
||||
|
||||
<Label Text="Sélectionnez un Appareil" FontSize="24" HorizontalOptions="Center" />
|
||||
<ListView x:Name="AppareilsListView" ItemTapped="OnAppareilTapped">
|
||||
<ListView.ItemTemplate>
|
||||
|
@ -10,7 +10,11 @@ namespace MauiAppStock.Views
|
||||
InitializeComponent();
|
||||
LoadAppareils();
|
||||
}
|
||||
|
||||
protected override void OnAppearing()
|
||||
{
|
||||
base.OnAppearing();
|
||||
LoadAppareils(); // Rafraîchit la liste à chaque affichage
|
||||
}
|
||||
private async void LoadAppareils()
|
||||
{
|
||||
var appareils = await Database.GetAppareilsAsync();
|
||||
@ -25,5 +29,7 @@ namespace MauiAppStock.Views
|
||||
await Navigation.PushAsync(new AppareilPiecesPage(selectedAppareil));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user