gestion des ressources fonctionnelle, mais pas fini
This commit is contained in:
@@ -52,73 +52,74 @@ export default function AddRessource({ressourceType, ...otherProps }: Props) {
|
||||
const [quantiteDisponible,setQuantiteDisponible] = useState('');
|
||||
const [openConfirmation,setOpenConfirmation] = useState(false);
|
||||
|
||||
async function handleAddRessource() {
|
||||
async function handleAddRessource() {
|
||||
setLoading(true);
|
||||
setOpenConfirmation(true);
|
||||
}
|
||||
|
||||
async function onConfirm(): Promise<void> {
|
||||
if(isValidRessource()){
|
||||
try{
|
||||
setLoading(true);
|
||||
const nouvelleRessource : Ressources = {
|
||||
id : '',
|
||||
name: nom,
|
||||
type : ressourceType,
|
||||
quantity : parseInt(quantite),
|
||||
available_quantity : parseInt(quantite),
|
||||
Image : "",
|
||||
allocation : [],
|
||||
};
|
||||
const id = await addRessources(nouvelleRessource);
|
||||
async function onConfirm(): Promise<void> {
|
||||
if(isValidRessource()){
|
||||
try{
|
||||
setLoading(true);
|
||||
const nouvelleRessource : Ressources = {
|
||||
id : '',
|
||||
name: nom,
|
||||
type : ressourceType,
|
||||
quantity : parseInt(quantite),
|
||||
available_quantity : parseInt(quantite),
|
||||
Image : "",
|
||||
allocation : [],
|
||||
};
|
||||
const id = await addRessources(nouvelleRessource);
|
||||
|
||||
if(id){
|
||||
setRessources([...ressources,{...nouvelleRessource, id}]);
|
||||
setOpenConfirmation(false);
|
||||
setNom('');
|
||||
setQuantite('');
|
||||
setQuantiteDisponible('');
|
||||
}
|
||||
}catch(error){
|
||||
}finally{
|
||||
if(id){
|
||||
setRessources([...ressources,{...nouvelleRessource, id}]);
|
||||
setOpenConfirmation(false);
|
||||
setLoading(false);
|
||||
setNom('');
|
||||
setQuantite('');
|
||||
setQuantiteDisponible('');
|
||||
}
|
||||
}catch(error){
|
||||
}finally{
|
||||
setOpenConfirmation(false);
|
||||
setLoading(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onCancel(): void {
|
||||
setOpenConfirmation(false);
|
||||
}
|
||||
|
||||
function onCancel(): void {
|
||||
setOpenConfirmation(false);
|
||||
}
|
||||
function isValidRessource():Boolean{
|
||||
return nom!= "" && quantite != ""
|
||||
}
|
||||
|
||||
const renderValidationScreen = () => {
|
||||
return(
|
||||
<Modal transparent={true} >
|
||||
<View style={styles.overlay}>
|
||||
<ThemedView style={styles.overlayView}>
|
||||
<ThemedText style={{fontSize: 25}}>Créer la nouvelle ressource {ressourceType} suivante ? :</ThemedText>
|
||||
<ThemedView lvl={2} style={styles.summaryNewChantier}>
|
||||
<ThemedText style={{fontSize: 20}}>Nom: {nom===''?"NONE":nom}</ThemedText>
|
||||
<ThemedText style={{fontSize: 20}}>Quantité Total: {quantite===''?"0":quantite} </ThemedText>
|
||||
</ThemedView>
|
||||
<View style={styles.overlayView}>
|
||||
<ThemedButton lvl={2} border={5} style={styles.buttonValid} onPress={() => onConfirm()}>
|
||||
<ThemedText style={{fontSize: 25}}>Confirmer</ThemedText>
|
||||
</ThemedButton>
|
||||
</View>
|
||||
<View style={styles.overlayView}>
|
||||
<ThemedButton lvl={2} border={5} style={styles.buttonValid} onPress={() => onCancel()}>
|
||||
<ThemedText style={{fontSize: 25}}>Annuler</ThemedText>
|
||||
</ThemedButton>
|
||||
</View>
|
||||
const renderValidationScreen = () => {
|
||||
return(
|
||||
<Modal transparent={true} >
|
||||
<View style={styles.overlay}>
|
||||
<ThemedView style={styles.overlayView}>
|
||||
<ThemedText style={{fontSize: 25}}>Créer la nouvelle ressource {ressourceType} suivante ? :</ThemedText>
|
||||
<ThemedView lvl={2} style={styles.summaryNewChantier}>
|
||||
<ThemedText style={{fontSize: 20}}>Nom: {nom===''?"NONE":nom}</ThemedText>
|
||||
<ThemedText style={{fontSize: 20}}>Quantité Total: {quantite===''?"0":quantite} </ThemedText>
|
||||
</ThemedView>
|
||||
</View>
|
||||
</Modal>
|
||||
)
|
||||
}
|
||||
<View style={styles.overlayView}>
|
||||
<ThemedButton lvl={2} border={5} style={styles.buttonValid} onPress={() => onConfirm()}>
|
||||
<ThemedText style={{fontSize: 25}}>Confirmer</ThemedText>
|
||||
</ThemedButton>
|
||||
</View>
|
||||
<View style={styles.overlayView}>
|
||||
<ThemedButton lvl={2} border={5} style={styles.buttonValid} onPress={() => onCancel()}>
|
||||
<ThemedText style={{fontSize: 25}}>Annuler</ThemedText>
|
||||
</ThemedButton>
|
||||
</View>
|
||||
</ThemedView>
|
||||
</View>
|
||||
</Modal>
|
||||
)
|
||||
}
|
||||
|
||||
const renderInut = (name : string, preFill : string, value : string, setValue : ((text:string) => void),numeric:boolean) => {
|
||||
return (
|
||||
@@ -129,7 +130,7 @@ export default function AddRessource({ressourceType, ...otherProps }: Props) {
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
return (
|
||||
<ThemedView lvl={3} style={styles.back}>
|
||||
<View style={styles.container}>
|
||||
{editMode &&
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import { Chantier, Ressources } from '@/class/class';
|
||||
import { ThemedView, } from '@/components/theme/themed-view';
|
||||
import React, { useState } from 'react';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { Image, StyleProp, StyleSheet, View, ViewStyle } from 'react-native';
|
||||
import { ThemedText } from '@/components/theme/themed-text';
|
||||
import { ThemedButton } from '@/components/theme/themed-button';
|
||||
import { getNbUseRessources } from '@/class/utils';
|
||||
import { useReservations } from '@/app/ContextReservation';
|
||||
import { getReservations } from '@/services/ressourcesService';
|
||||
|
||||
type RessourcesQte = [Ressources, number];
|
||||
|
||||
@@ -16,11 +19,11 @@ type Props = {
|
||||
|
||||
export default function RessourceSummary({ressource: ressource,qte,style,sendRessource: sendRessource, ...otherProps }: Props) {
|
||||
|
||||
|
||||
const { reservations, setReservations } = useReservations();
|
||||
const [count,setCount] = useState(qte);
|
||||
|
||||
function onPressAdd(ressource: Ressources): void {
|
||||
if(count<ressource.quantity){
|
||||
if(count<ressource.quantity-getNbUseRessources(ressource,reservations)){
|
||||
setCount(count+1);
|
||||
sendRessource([ressource, count+1]);
|
||||
}
|
||||
@@ -33,20 +36,28 @@ export default function RessourceSummary({ressource: ressource,qte,style,sendRes
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
async function loadReservations() {
|
||||
const list = await getReservations();
|
||||
setReservations(list);
|
||||
}
|
||||
|
||||
loadReservations();
|
||||
}, []);
|
||||
|
||||
|
||||
return(
|
||||
<View style={style}>
|
||||
<ThemedView lvl={2} border={3} style={{padding:10,width:"100%",borderRadius:10,flexDirection: 'row',justifyContent: 'space-between',}}>
|
||||
<View>
|
||||
<ThemedText>{ressource.id}</ThemedText>
|
||||
<ThemedText>{ressource.name}</ThemedText>
|
||||
<ThemedText>{ressource.quantity}</ThemedText>
|
||||
<ThemedText>{ressource.type}</ThemedText>
|
||||
<ThemedText>Nom : {ressource.name}</ThemedText>
|
||||
<ThemedText>Restant : {ressource.quantity-getNbUseRessources(ressource,reservations)}/{ressource.quantity}</ThemedText>
|
||||
</View>
|
||||
<View style={{alignItems:"center"}}>
|
||||
<ThemedButton style={styles.button} lvl={3} onPress={() => onPressAdd(ressource)}>
|
||||
<ThemedText>+</ThemedText>
|
||||
</ThemedButton>
|
||||
<ThemedText>{count}/{ressource.quantity}</ThemedText>
|
||||
<ThemedText>{count}/{ressource.quantity-getNbUseRessources(ressource,reservations)}</ThemedText>
|
||||
<ThemedButton style={styles.button} lvl={3} onPress={() => onPressSub(ressource)}>
|
||||
<ThemedText>-</ThemedText>
|
||||
</ThemedButton>
|
||||
|
||||
@@ -67,10 +67,10 @@ export default function Anomaly({data,style}: Props) {
|
||||
<View style={styles.addContainer}>
|
||||
<TextInput style={styles.input} placeholder="Nouvelle anomalie..." value={newAnomaly} onChangeText={setNewAnomaly} />
|
||||
<TouchableOpacity style={styles.addButton} onPress={handleAdd}>
|
||||
<Text style={styles.addButtonText}>Ajouter</Text>
|
||||
<ThemedText style={styles.addButtonText}>Ajouter</ThemedText>
|
||||
</TouchableOpacity>
|
||||
<TouchableOpacity onPress={selectImage} style={styles.addButton}>
|
||||
<Text style={styles.addButton}>Choisir une image</Text>
|
||||
<ThemedText style={styles.addButton}>Choisir une image</ThemedText>
|
||||
</TouchableOpacity>
|
||||
{imageUri && (
|
||||
<Image source={{ uri: imageUri }} style={styles.image} />
|
||||
@@ -151,13 +151,11 @@ const styles = StyleSheet.create({
|
||||
marginRight: 8,
|
||||
},
|
||||
addButton: {
|
||||
color: "white",
|
||||
paddingVertical: 8,
|
||||
paddingHorizontal: 12,
|
||||
borderRadius: 8,
|
||||
},
|
||||
addButtonText: {
|
||||
color: "white",
|
||||
fontWeight: "bold",
|
||||
},
|
||||
image: { width: 200, height: 200, borderRadius: 10 }
|
||||
|
||||
@@ -3,6 +3,7 @@ import { ThemedView, } from '@/components/theme/themed-view';
|
||||
import React from 'react';
|
||||
import { Image, StyleProp, StyleSheet, View, ViewStyle } from 'react-native';
|
||||
import { ThemedText } from './theme/themed-text';
|
||||
import { getNbItemReservation } from '@/class/utils';
|
||||
|
||||
type Props = {
|
||||
data: {
|
||||
@@ -20,9 +21,20 @@ export default function ChantierSummary({data,style , ...otherProps }: Props) {
|
||||
<Image source={{ uri:"https://cdn.discordapp.com/attachments/1425108443571945644/1427207643180826757/raw.png?ex=693f1a72&is=693dc8f2&hm=86ffb97145fc8d3aec822b87d99be233c98477d4424c1ef58f80eb81b17c7c80&" /*chantier.urlImg*/ }} style={styles.image} />
|
||||
</View>
|
||||
<View style={{flex: 1}}>
|
||||
<ThemedText selectable={true}>Id: {data.chantier.id}</ThemedText>
|
||||
<ThemedText selectable={true}>Objet: {data.chantier.name}</ThemedText>
|
||||
<ThemedText selectable={true}>Adresse: {data.chantier.adresse}</ThemedText>
|
||||
<ThemedText selectable={true}>Chef de chantier: {data.chantier.chef.last_name}{" "}{data.chantier.chef.name}</ThemedText>
|
||||
<ThemedText selectable={true}>État: {data.chantier.etat}</ThemedText>
|
||||
<ThemedText selectable={true}>equipe:
|
||||
{getNbItemReservation(data.chantier.equipe)} ({data.chantier.equipe.length} type{data.chantier.equipe.length>1&&"s"})
|
||||
</ThemedText>
|
||||
<ThemedText selectable={true}>materiel:
|
||||
{getNbItemReservation(data.chantier.materiel)} ({data.chantier.materiel.length} type{data.chantier.materiel.length>1&&"s"})
|
||||
</ThemedText>
|
||||
<ThemedText selectable={true}>vehicules:
|
||||
{getNbItemReservation(data.chantier.vehicules)} ({data.chantier.vehicules.length} type{data.chantier.vehicules.length>1&&"s"})
|
||||
</ThemedText>
|
||||
</View>
|
||||
</ThemedView>
|
||||
) :
|
||||
@@ -42,7 +54,7 @@ const styles = StyleSheet.create({
|
||||
borderRadius: 10,
|
||||
//borderWidth: 1,
|
||||
flexDirection: 'row',
|
||||
height: 150,
|
||||
//height: 150,
|
||||
gap: 10,
|
||||
},
|
||||
image:{
|
||||
|
||||
@@ -65,14 +65,14 @@ export default function SelectChantier() {
|
||||
open.value = withTiming(isOpen ? 1 : 0);
|
||||
}, [isOpen]);
|
||||
|
||||
useEffect(() => {
|
||||
/*useEffect(() => {
|
||||
async function loadChantiers() {
|
||||
const list = await getChantiers();
|
||||
setChantiers(list);
|
||||
}
|
||||
|
||||
loadChantiers();
|
||||
}, []);
|
||||
}, []);*/
|
||||
|
||||
const filteredChantiers = chantiers.filter((chantier) => {
|
||||
var keyWords:string[] = search.toLowerCase().split(" ") ;
|
||||
|
||||
Reference in New Issue
Block a user