[feat]: add send email to client from defunt certificate

This commit is contained in:
Tsiresy Milà 2025-03-06 16:20:36 +03:00
parent 528afe379e
commit 8c9194e504
6 changed files with 329 additions and 147 deletions

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,75 @@
/*!
* Bootstrap backdrop.js v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
* Bootstrap base-component.js v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
* Bootstrap component-functions.js v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
* Bootstrap config.js v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
* Bootstrap data.js v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
* Bootstrap event-handler.js v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
* Bootstrap focustrap.js v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
* Bootstrap index.js v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
* Bootstrap manipulator.js v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
* Bootstrap modal.js v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
* Bootstrap scrollbar.js v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
* Bootstrap selector-engine.js v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*! /*!
* Sizzle CSS Selector Engine v2.3.9 * Sizzle CSS Selector Engine v2.3.9
* https://sizzlejs.com/ * https://sizzlejs.com/

View File

@ -36,7 +36,7 @@ date_default_timezone_set('Europe/Paris');
class PageController extends Controller { class PageController extends Controller {
private $idNextcloud; private $idNextcloud;
private $myDb; private Bdd $myDb;
// private $src_path = "/var/www/html/apps/gestion/img/"; // private $src_path = "/var/www/html/apps/gestion/img/";
private $src_path = "/var/www/html/custom_apps/gestion/img/"; private $src_path = "/var/www/html/custom_apps/gestion/img/";
@ -1580,6 +1580,28 @@ class PageController extends Controller {
} }
public function sendAttachmentToClientByDefunt($defuntId, $ff_pdf, $subject, $body, $addName = false){
$devis = $this->myDb->getDevisOfDefunt($defuntId);
if($devis != null){
try {
$client_email = $devis['client_mail'];
$client_nom = $devis['client_nom'];
$data = file_get_contents($ff_pdf);
$message = $this->mailer->createMessage();
$message->setTo(recipients: [$client_email => $client_nom]);
// $message->setFrom([$client_email => $client_nom]);
$content = $this->mailer->createAttachment($data,$ff_pdf,"x-pdf");
$message->attach($content);
$message->setSubject($subject);
$message->setPlainBody($addName ? $body." de ".$devis['defunt_nom']: $body);
$this->mailer->send($message);
return new DataResponse("", 200, ['Content-Type' => 'application/json']);
} catch (Exception $e) {
return new DataResponse("Is your global mail server configured in Nextcloud ?", 500, ['Content-Type' => 'application/json']);
}
}
}
/** /**
* @NoAdminRequired * @NoAdminRequired
* @NoCSRFRequired * @NoCSRFRequired
@ -2005,7 +2027,7 @@ class PageController extends Controller {
* @NoCSRFRequired * @NoCSRFRequired
* @param string $numdefunt * @param string $numdefunt
*/ */
public function saveRapportSoin($numdefunt){ public function saveRapportSoin($numdefunt, $isSendEmail = false){
$defaultConfig = json_decode($this->myDb->getConfiguration(BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD)); $defaultConfig = json_decode($this->myDb->getConfiguration(BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD));
$defunt = json_decode($this->myDb->getOneDefunt($numdefunt, $this->idNextcloud))[0]; $defunt = json_decode($this->myDb->getOneDefunt($numdefunt, $this->idNextcloud))[0];
$observations = json_decode($this->myDb->getListObservations($numdefunt, $this->idNextcloud)); $observations = json_decode($this->myDb->getListObservations($numdefunt, $this->idNextcloud));
@ -2252,6 +2274,11 @@ class PageController extends Controller {
$file_pdf = $this->storage->get($ff_pdf); $file_pdf = $this->storage->get($ff_pdf);
$file_pdf->putContent($pdfContent); $file_pdf->putContent($pdfContent);
if($ff_pdf != null && $isSendEmail){
//send email
$this->sendAttachmentToClientByDefunt($defunt->id, $ff_pdf, "Rapport soins", " Veuiller trouver ci-joint le rapport de soins de ".$nomDefunt.".");
}
$res = array(); $res = array();
$res['path'] = $folderDestination; $res['path'] = $folderDestination;
return json_encode($res); return json_encode($res);
@ -2291,7 +2318,7 @@ class PageController extends Controller {
* @NoCSRFRequired * @NoCSRFRequired
* @param string $numdefunt * @param string $numdefunt
*/ */
public function saveRapportBijoux($numdefunt,$withPhotos = false){ public function saveRapportBijoux($numdefunt,$withPhotos = false, $isSendEmail = false){
if($withPhotos != null && $withPhotos == 1){ if($withPhotos != null && $withPhotos == 1){
$withPhotos = true; $withPhotos = true;
} }
@ -2428,6 +2455,11 @@ class PageController extends Controller {
$file_pdf = $this->storage->get($ff_pdf); $file_pdf = $this->storage->get($ff_pdf);
$file_pdf->putContent($pdfContent); $file_pdf->putContent($pdfContent);
if($ff_pdf != null && $isSendEmail){
//send email
$this->sendAttachmentToClientByDefunt($defunt->id, $ff_pdf, "Rapport des bijoux", " Veuiller trouver ci-joint le rapport des bijoux de ".$nomDefunt.".");
}
$res = array(); $res = array();
$res['path'] = $folderDestination; $res['path'] = $folderDestination;
return json_encode($res); return json_encode($res);
@ -2636,9 +2668,13 @@ class PageController extends Controller {
* @param int $defuntId * @param int $defuntId
*/ */
public function exportCareCertificate($defuntId){ public function exportCareCertificate($defuntId, $isSendEmail = false){
try{ try{
$careCertificateFilename = $this->certificateService->generateCareCertificate($defuntId,$this->idNextcloud); $careCertificateFilename = $this->certificateService->generateCareCertificate($defuntId,$this->idNextcloud);
if($careCertificateFilename != null && $isSendEmail){
//send email
$this->sendAttachmentToClientByDefunt($defuntId, $careCertificateFilename, "Attestation de soins", " Veuiller trouver ci-joint l'attestation de soins ", true);
}
return $careCertificateFilename; return $careCertificateFilename;
} }
catch(\OCP\Files\NotFoundException $e) { } catch(\OCP\Files\NotFoundException $e) { }
@ -2781,9 +2817,14 @@ class PageController extends Controller {
* @param int $defuntId * @param int $defuntId
*/ */
public function saveAttestationPacemaker($defuntId){ public function saveAttestationPacemaker($defuntId, $isSendEmail = false){
try{ try{
$careCertificateFilename = $this->certificateService->generatePacemakerCertificate($defuntId,$this->idNextcloud); $careCertificateFilename = $this->certificateService->generatePacemakerCertificate($defuntId,$this->idNextcloud);
if($careCertificateFilename != null && $isSendEmail){
//send email
$this->sendAttachmentToClientByDefunt($defuntId, $careCertificateFilename, "Attestation pacemaker", " Veuiller trouver ci-joint l'attestation de pacemaker ", true);
}
return $careCertificateFilename; return $careCertificateFilename;
} }
catch(\OCP\Files\NotFoundException $e) { } catch(\OCP\Files\NotFoundException $e) { }

View File

@ -3444,6 +3444,7 @@ class Bdd {
defunt.product_reference as defunt_product_reference, defunt.product_reference as defunt_product_reference,
client.nom as client_nom, client.nom as client_nom,
client.prenom as client_prenom, client.prenom as client_prenom,
client.mail as client_mail,
client.entreprise as client_entreprise, client.entreprise as client_entreprise,
client.adresse as client_adresse, client.adresse as client_adresse,
thanato.nom as thanato_nom, thanato.nom as thanato_nom,

View File

@ -1,10 +1,11 @@
import "@nextcloud/dialogs/dist/index.css"; import "@nextcloud/dialogs/dist/index.css";
import Modal from 'bootstrap/js/dist/modal';
import "datatables.net-dt/css/jquery.dataTables.css"; import "datatables.net-dt/css/jquery.dataTables.css";
import "../css/mycss.css"; import "../css/mycss.css";
import { globalConfiguration } from "./modules/mainFunction.mjs";
import "./listener/main_listener"; import "./listener/main_listener";
import { setDefuntCover, setDefuntPacemakerPhoto,setBijouxPhoto,getBibliotheques, getBijouxById, getHypodermiquesyId, getObservationsById, getproduits, saveAttestationPacemaker,exportCareCertificate, saveRapportBijoux, saveRapportSoin, updateDB } from "./modules/ajaxRequest.mjs"; import { getBibliotheques, exportCareCertificate,getBijouxById, getHypodermiquesyId, getObservationsById, getproduits, saveAttestationPacemaker, saveRapportBijoux, saveRapportSoin, setBijouxPhoto, setDefuntCover, setDefuntPacemakerPhoto, updateDB } from "./modules/ajaxRequest.mjs";
import { globalConfiguration } from "./modules/mainFunction.mjs";
let bibliotheques = []; let bibliotheques = [];
let sortedBibliotheques = []; let sortedBibliotheques = [];
@ -99,15 +100,17 @@ window.addEventListener("DOMContentLoaded", function () {
break; break;
} }
} }
saveRapportBijoux({
numdefunt: defuntid,
withPhotos: selectedValue
});
$('#saveRapportBijouxModal').hide(); $('#saveRapportBijouxModal').hide();
modalElement.data('export-type', 'rapport-bijoux')
modalElement.data('export-with-photos', selectedValue)
modalElement.modal('show')
// saveRapportBijoux({
// numdefunt: defuntid,
// withPhotos: selectedValue
// });
}); });
setDefuntCoverButton.addEventListener("click",function(){ setDefuntCoverButton.addEventListener("click",function(){
const productCoverRadios = document.getElementsByName('coverProductsRadioButton'); const productCoverRadios = document.getElementsByName('coverProductsRadioButton');
let selectedValue = null; let selectedValue = null;
@ -123,15 +126,57 @@ window.addEventListener("DOMContentLoaded", function () {
}); });
}) })
const modalElement = $('#confirmSendEmailModal')
const _ = new Modal(modalElement[0],{
backdrop: false
})
$('#valdateSendEmailModal').on('click', function(){
const type = modalElement.data('export-type')
const isSendEmail = $('#valueSendEmailModal').is(':checked')
switch(type){
case 'care-certificate':
exportCareCertificate({defuntId : defuntid, isSendEmail})
break;
case 'pacemaker':
saveAttestationPacemaker({ defuntId: defuntid ,isSendEmail});
break;
case 'rapport-soin':
saveRapportSoin({ numdefunt: defuntid ,isSendEmail});
break;
case 'rapport-bijoux':
const selectedValue = modalElement.data('export-with-photos')
saveRapportBijoux({
numdefunt: defuntid,
withPhotos: selectedValue ,
isSendEmail
});
default:
break;
}
modalElement.modal('hide')
$('#valueSendEmailModal').prop('checked', false);
})
$('#closeSendEmailModal').on('click', function(){
modalElement.data('export-type', null)
modalElement.modal('hide')
$('#valueSendEmailModal').prop('checked', false);
})
exportCareCertificateButton.addEventListener("click",function(){ exportCareCertificateButton.addEventListener("click",function(){
exportCareCertificate({defuntId : defuntid}); modalElement.data('export-type', 'care-certificate')
modalElement.modal('show')
// exportCareCertificate({defuntId : defuntid});
}) })
pacemakerBtn.addEventListener("click", function(){ pacemakerBtn.addEventListener("click", function(){
saveAttestationPacemaker({ defuntId: defuntid }); modalElement.data('export-type', 'pacemaker')
modalElement.modal('show')
// saveAttestationPacemaker({ defuntId: defuntid });
}); });
rapportSoinBtn.addEventListener("click", function(){ rapportSoinBtn.addEventListener("click", function(){
saveRapportSoin({ numdefunt: defuntid }); modalElement.data('export-type', 'rapport-soin')
modalElement.modal('show')
// saveRapportSoin({ numdefunt: defuntid });
}); });
$(document).on("change", ".photoBijouUpload", function () { $(document).on("change", ".photoBijouUpload", function () {

View File

@ -454,7 +454,9 @@
</div> </div>
<div class="col-12" style="margin-bottom: 32px"> <div class="col-12" style="margin-bottom: 32px">
<div class="d-flex flex-row justify-content-between"> <div class="d-flex flex-row justify-content-between">
<div><h6>OBSERVATIONS</h6></div> <div>
<h6>OBSERVATIONS</h6>
</div>
<button id="defuntAddObservation" class="btn btn-secondary" type="button">Ajouter une observation</button> <button id="defuntAddObservation" class="btn btn-secondary" type="button">Ajouter une observation</button>
</div> </div>
<hr> <hr>
@ -474,7 +476,9 @@
</div> </div>
<div class="col-12" style="margin-bottom: 32px"> <div class="col-12" style="margin-bottom: 32px">
<div class="d-flex flex-row justify-content-between"> <div class="d-flex flex-row justify-content-between">
<div><h6>BIJOU(X)</h6></div> <div>
<h6>BIJOU(X)</h6>
</div>
<button id="defuntAddBijou" class="btn btn-secondary" type="button">Ajouter un bijou</button> <button id="defuntAddBijou" class="btn btn-secondary" type="button">Ajouter un bijou</button>
</div> </div>
<hr> <hr>
@ -519,4 +523,23 @@
</div> </div>
</div> </div>
</div> </div>
<div class="modal" id="confirmSendEmailModal" data-backdrop="false" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Confirmeation de l'envoi par email</h5>
</div>
<div class="modal-body">
<div class="form-group form-check d-flex align-items-center">
<input type="checkbox" style="cursor:pointer;margin-right:8px;" id="valueSendEmailModal">
<label class="form-check-label" for="valueSendEmailModal">Envoyer un email ?</label>
</div>
</div>
<div class="modal-footer">
<button id="closeSendEmailModal" type="button" class="btn btn-secondary">Annuler</button>
<button id="valdateSendEmailModal" type="button" class="btn btn-primary">Valider</button>
</div>
</div>
</div>
</div>
</div> </div>