07/03/2024 - 22h30

recette2
cherif 2024-03-07 22:42:41 +01:00
parent 1b58661790
commit 78de0e0028
1 changed files with 251 additions and 154 deletions

View File

@ -267,6 +267,19 @@ const DisplayPartnerSession = (props) => {
{ field: 'site_formation_nom', headerName: 'Site Ftion', with: 150, align: "center", hide: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{
field: 'invoiced_statut', headerName: 'Facturé', minWidth: 100, flex: 1, maxWidth: 150, hide: false, editable: false,
valueFormatter: (params) => {
if (String(params.value) === "2")
return "Oui";
else if (String(params.value) === "1")
return "Part.";
else
return "Non";
},
},
{ field: 'duration', headerName: 'Durée', minWidth: datagrid_columns_size_model2, align: "center", hide: true, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{
@ -1780,6 +1793,8 @@ const DisplayPartnerSession = (props) => {
function submenu_inscrit() {
setsubmenu("inscrit");
GetListeInscrit(selected_session_id, selected_internal_url);
if (document.getElementById("inscrit")) {
document.getElementById("inscrit").style.backgroundColor = "#104277";
document.getElementById("inscrit").style.color = "white";
@ -3246,10 +3261,7 @@ const DisplayPartnerSession = (props) => {
if (String(actionmass_insc_val) === "facturer") {
setDialog_FACTURATION_FORMATION_open(true);
GetListeInscrit(selected_session_id, selected_internal_url);
} else {
@ -3301,10 +3313,10 @@ const DisplayPartnerSession = (props) => {
for (var i = 0; i < selectionModel_insc.length; i++) {
//console.log(" ### SelectionModel_insc[i] = ", selectionModel_insc[i]);
var local_id = parseInt(selectionModel_insc[i]);
var local_id = parseInt(selectionModel_insc[i]);
//console.log(" ### local_id = ",local_id);
var myid = JSON.parse(String(rowss_insc[local_id]));
var myid = JSON.parse(String(rowss_insc[local_id]));
//var line = JSON.parse(rowss[myid]);
//console.log(" ### myid = ",myid);
@ -3312,7 +3324,7 @@ const DisplayPartnerSession = (props) => {
tab_my_inscription_ids.push(myid['_id']);
}
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
@ -3323,7 +3335,7 @@ const DisplayPartnerSession = (props) => {
form.append("email_test", "");
form.append("email_production", "");
console.log(" #### form = ", form);
//console.log(" #### form = ", form);
@ -3339,7 +3351,8 @@ const DisplayPartnerSession = (props) => {
//console.log(" In Invoice_Session_Formation_By_Selected_Inscrit res.data.message r_class = " + res.data.message);
setInvoice_Session_Formation_By_Selected_Inscrit_api("true");
setInvoice_Session_Formation_By_Selected_Inscrit_result(res.data.message);
GetListeInscrit(selected_session_id, selected_internal_url);
alert(res.data.message);
}
@ -9574,7 +9587,12 @@ const DisplayPartnerSession = (props) => {
]
const New_Option_Inscription = [
{ "id": "confirmation", "label": "Renvoyer une confirmation", "value": "confirmation" },
{ "id": "impression", "label": "Imprimer fiches", "value": "impression" },
{ "id": "annule inscription", "label": "Annuler inscription", "value": "annule inscription" },
{ "id": "facturer", "label": "Facturer", "value": "facturer" },
]
const [Dialog_FACTURATION_FORMATION_open, setDialog_FACTURATION_FORMATION_open] = React.useState(false);
const Dialog_FACTURATION_FORMATION_handleClose = () => {
@ -10515,13 +10533,6 @@ const DisplayPartnerSession = (props) => {
<Button onClick={(e) => {
if (String(selected_session_id).length > 2) {
// On alerte juste l'utilisateur que l'email de test n'est pas vide, juste au cas ou il aurait cliqué par erreur sur l'envoie.
const response = window.confirm(" Continuez la facturation?");
if (!response) {
return;
}
}
Dialog_FACTURATION_FORMATION_handleClose_buton();
Invoice_Session_Formation_By_Selected_Inscrit();
@ -10844,6 +10855,14 @@ const DisplayPartnerSession = (props) => {
fontSize: 14
},
'& .line--statut--invoiced': {
backgroundColor: '#EAFAF1',
color: '#239B56',
fontWeight: '700'
},
'& .line--statut--selected': {
backgroundColor: '#FBF2EF',
color: 'black',
@ -10905,6 +10924,7 @@ const DisplayPartnerSession = (props) => {
site_formation_id: JSON.parse(item).site_formation_id,
site_formation_nom: JSON.parse(item).site_formation_code,
invoiced_statut: JSON.parse(item).invoiced_statut,
}
))}
@ -10940,6 +10960,13 @@ const DisplayPartnerSession = (props) => {
}}
//sx={datagridSx}
getCellClassName={(params) => {
// Traitement du statut "facturé"
if (String(params.row.invoiced_statut) === "2") {
return 'line--statut--invoiced';
}
//field === 'distantiel'
if (params.field === 'distantiel' && String(params.value) === "1") {
return 'cell--distantiel';
@ -10974,6 +11001,8 @@ const DisplayPartnerSession = (props) => {
return 'cell--etape--annule';
}
// Pour la gestion de la couleur de zone double cliquée
if (String(params.row.id) === String(gridline_id)) {
return 'line--statut--selected';
@ -11160,7 +11189,7 @@ const DisplayPartnerSession = (props) => {
{String(addOneSession) !== "1" && <div className="session_data" onChange={IssessionChanged}>
<div className="div_row" style={{ "marginTop": "1rem", "marginBottom": "1rem" }}>
{/*<div className="div_row" style={{ "marginTop": "1rem", "marginBottom": "1rem" }}>
<div className="div_row_gauche">
&nbsp;
@ -11184,7 +11213,8 @@ const DisplayPartnerSession = (props) => {
</div>
</div>
</div>*/}
<br/>
<div className="session_caract"> <b> Formation </b><br />
<TextField
@ -14819,167 +14849,234 @@ const DisplayPartnerSession = (props) => {
</div>}
</div>
{String(addOneParticipant) !== "1" && <div className="session_data" style={{ height: 500, width: '100%' }}>
<DataGrid
checkboxSelection
onSelectionModelChange={(newSelectionModel_insc) => {
setSelectionModel_insc(newSelectionModel_insc);
//console.log("ch selected--" + newSelectionModel_insc);
}}
selectionModel={selectionModel_insc}
{String(addOneParticipant) !== "1" &&
<div className="session_data" >
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
&nbsp;
<Box
localeText={frFR.components.MuiDataGrid.defaultProps.localeText}
rows={rowss_insc.map((item, index) => (
{
id: index,
_id: JSON.parse(item)._id,
nom: JSON.parse(item).nom,
prenom: JSON.parse(item).prenom,
employeur: JSON.parse(item).employeur,
email: JSON.parse(item).email,
amount: JSON.parse(item).price,
opco: JSON.parse(item).opco,
modefinancement: JSON.parse(item).modefinancement,
civilite: JSON.parse(item).civilite,
client_rattachement_nom: JSON.parse(item).client_rattachement_nom,
client_rattachement_id: JSON.parse(item).client_rattachement_id,
invoiced: JSON.parse(item).invoiced,
invoiced_ref: JSON.parse(item).invoiced_ref,
invoiced_date: JSON.parse(item).invoiced_date,
sx={{
height: 500,
width: '100%',
paddingRight: '2px',
}
))}
[`& .${gridClasses.cell}`]: {
py: 1,
},
'& .line--statut--invoiced': {
backgroundColor: '#EAFAF1',
color: '#239B56',
fontWeight: '700'
columns={columns_inscrit}
pageSize={10}
className="datagridclass"
},
"& .MuiDataGrid-columnHeaders": {
backgroundColor: "#c8cfd5",
color: "black",
fontSize: 14
},
rowsPerPageOptions={[10]}
disableSelectionOnClick
components={{
Toolbar: GridToolbar,
}}
getEstimatedRowHeight={() => 200}
getRowHeight={() => "auto"}
sx={{
[`& .${gridClasses.cell}`]: {
py: 1,
},
}}
}}
/>
>
{selectionModel_insc && selectionModel_insc.length >= 1 &&
<div className="block_en_mass">
<nav className='traitement_mass'>Traitement en masse / Inscrit</nav>
&nbsp;<select
id={"actionmassinscr"} name={"actionmassinscr"}
onChange={actionmass_inscrit}
className="action_mass">
<option selected value="n/a">Choisir une action</option>
<option value="confirmation">Renvoyer une confirmation</option>
<option value="impression">Imprimer fiches</option>
<option value="annule inscription">Annuler inscription</option>
<option value="facturer">Facturer</option>
<DataGrid
checkboxSelection
onSelectionModelChange={(newSelectionModel_insc) => {
setSelectionModel_insc(newSelectionModel_insc);
//console.log("ch selected--" + newSelectionModel_insc);
}}
selectionModel={selectionModel_insc}
</select> &nbsp;
localeText={frFR.components.MuiDataGrid.defaultProps.localeText}
rows={rowss_insc.map((item, index) => (
{
id: index,
_id: JSON.parse(item)._id,
nom: JSON.parse(item).nom,
prenom: JSON.parse(item).prenom,
employeur: JSON.parse(item).employeur,
email: JSON.parse(item).email,
amount: JSON.parse(item).price,
opco: JSON.parse(item).opco,
modefinancement: JSON.parse(item).modefinancement,
civilite: JSON.parse(item).civilite,
client_rattachement_nom: JSON.parse(item).client_rattachement_nom,
client_rattachement_id: JSON.parse(item).client_rattachement_id,
{actionmass_insc_val &&
<Popup
trigger={<Button className="bton_traiter_en_mass" >
<FcAcceptDatabase /> Traiter
invoiced: JSON.parse(item).invoiced,
invoiced_ref: JSON.parse(item).invoiced_ref,
invoiced_date: JSON.parse(item).invoiced_date,
</Button>}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
}
))}
Confirmer l'action <b> {actionmass_insc_val} </b> en masse.
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
actionmass_insc_Traitemet();
close();
}}> Valider </button>
columns={columns_inscrit}
pageSize={10}
className="datagridclass"
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
getCellClassName={(params) => {
// Pour la gestion de la couleur si la ligne est facturée
if (String(params.row.invoiced) === "1") {
return 'line--statut--invoiced';
}
}}
rowsPerPageOptions={[10]}
disableSelectionOnClick
components={{
Toolbar: GridToolbar,
}}
getEstimatedRowHeight={() => 200}
getRowHeight={() => "auto"}
sx={{
[`& .${gridClasses.cell}`]: {
py: 1,
},
}}
/>
</Box>
{selectionModel_insc && selectionModel_insc.length >= 1 &&
<div className="block_en_mass">
<nav className='traitement_mass'>Traitement en masse / Inscrit</nav>
&nbsp;
{/*<select
id={"actionmassinscr"} name={"actionmassinscr"}
onChange={actionmass_inscrit}
className="action_mass">
<option selected value="n/a">Choisir une action</option>
<option value="confirmation">Renvoyer une confirmation</option>
<option value="impression">Imprimer fiches</option>
<option value="annule inscription">Annuler inscription</option>
<option value="facturer">Facturer</option>
</select> &nbsp;*/}
<Autocomplete
disablePortal
id="combo-box-demo"
className="block_en_mass_select"
fullWidth
options={New_Option_Inscription}
onChange={(event, value) => {
if (String(value.value) === "confirmation" || String(value.value) === "impression" || String(value.value) === "annule inscription" ||
String(value.value) === "facturer") {
setactionmass_insc_val(value.value);
}
else {
setactionmass_insc_val();
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
{actionmass_insc_val && <nav className='block_en_mass_bton_action'>
<Popup
trigger={<Button className="bton_enreg" style={{ "width": "90%" }}>
<FcAcceptDatabase /> Traiter
</Button>}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
Confirmer l'action <b> {actionmass_insc_val} </b> en masse.
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
actionmass_insc_Traitemet();
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
</div>
</div>
)}
</Popup>
)}
</Popup>
</nav>
}
<br />
</div>
}
<br />
{String(addOneParticipant) !== "1" && selected_code_session && selected_internal_url && <div id='ajout_participant' style={{ "textAlign": "left", "float": "left", "width": "100%" }}>
<Button variant="outlined" onClick={submenu_import_participant} className="detail_class_submenu bton_import_excel" style={{
"background": "#c8cfd5",
"color": "black", "width": "auto"
}}
id='menu_import_participant' name='menu_import_participant'>Importer des participants excel &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
<Button variant="outlined" onClick={submenu_add_one_participant}
className="detail_class_submenu bton_add_session"
id='menu_one_participant' name='menu_one_participant'>Ajout 1 participant &nbsp;
<img src={participants} alt="ajout un participant" className="icon_plus" />
</Button>
<br />
<a href='/sample/template_import_stagiaires.csv' download>Télécharger un fichier modèle</a>
<br />
<i>{participant_file_name}</i><br />
{String(liste_participants_file_change_api) === String("true") && <nav className="okUpdateData"> Les participants ont été correctement importés</nav>}
{String(liste_participants_file_change_api) === String("false") && <nav className="koUpdateData"> {liste_participants_file_change_message} </nav>}
<input type="file"
accept=".csv"
ref={hiddenFileInput}
style={{ display: 'none' }}
name="liste_participants_file"
onChange={liste_participants_file_change}
/>
</div>}
</div>
}
<br />
{String(addOneParticipant) !== "1" && selected_code_session && selected_internal_url && <div id='ajout_participant' style={{ "textAlign": "left", "float": "left", "width": "100%" }}>
<Button variant="outlined" onClick={submenu_import_participant} className="detail_class_submenu bton_import_excel" style={{
"background": "#c8cfd5",
"color": "black", "width": "auto"
}}
id='menu_import_participant' name='menu_import_participant'>Importer des participants excel &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
<Button variant="outlined" onClick={submenu_add_one_participant}
className="detail_class_submenu bton_add_session"
id='menu_one_participant' name='menu_one_participant'>Ajout 1 participant &nbsp;
<img src={participants} alt="ajout un participant" className="icon_plus" />
</Button>
<br />
<a href='/sample/template_import_stagiaires.csv' download>Télécharger un fichier modèle</a>
<br />
<i>{participant_file_name}</i><br />
{String(liste_participants_file_change_api) === String("true") && <nav className="okUpdateData"> Les participants ont été correctement importés</nav>}
{String(liste_participants_file_change_api) === String("false") && <nav className="koUpdateData"> {liste_participants_file_change_message} </nav>}
<input type="file"
accept=".csv"
ref={hiddenFileInput}
style={{ display: 'none' }}
name="liste_participants_file"
onChange={liste_participants_file_change}
/>
</div>}
</div>}
{String(addOneParticipant) !== "1" && String(display_detail_insc) === "1" && selected_code_session && <div className="div_row block_detail_inscrit">
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Détail inscrit </nav>
{String(GetAttendee_api) === "true" && <div className="div_row" style={{ "border": "None" }}>