finish facture new model for h2f, finish export devis id array to facture, WIP verify devis pdf error on prod
This commit is contained in:
parent
4a9dae4862
commit
2134ee1f41
@ -139,6 +139,9 @@ return [
|
|||||||
|
|
||||||
//certificate
|
//certificate
|
||||||
['name' => 'page#exportCareCertificate', 'url' => '/defunt/exportCareCertificate', 'verb' => 'POST'],
|
['name' => 'page#exportCareCertificate', 'url' => '/defunt/exportCareCertificate', 'verb' => 'POST'],
|
||||||
|
|
||||||
|
//devis facturation
|
||||||
|
['name' => 'page#exportDevisToFacture', 'url' => '/exportDevisToFacture', 'verb' => 'POST'],
|
||||||
|
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -31,6 +31,7 @@ class PageController extends Controller {
|
|||||||
// 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/";
|
||||||
private const H2F_DEFAULT_ADMIN = "Emmanuelle";
|
private const H2F_DEFAULT_ADMIN = "Emmanuelle";
|
||||||
|
private const DEFAULT_ADMIN = "admin";
|
||||||
private $urlGenerator;
|
private $urlGenerator;
|
||||||
private $mailer;
|
private $mailer;
|
||||||
private $config;
|
private $config;
|
||||||
@ -1237,7 +1238,7 @@ class PageController extends Controller {
|
|||||||
* @NoCSRFRequired
|
* @NoCSRFRequired
|
||||||
*/
|
*/
|
||||||
public function getConfiguration() {
|
public function getConfiguration() {
|
||||||
$idNextcloud = self::H2F_DEFAULT_ADMIN;
|
$idNextcloud = self::DEFAULT_ADMIN;
|
||||||
return $this->myDb->getConfiguration($idNextcloud);
|
return $this->myDb->getConfiguration($idNextcloud);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2755,4 +2756,17 @@ class PageController extends Controller {
|
|||||||
catch(\OCP\Files\NotFoundException $e) { }
|
catch(\OCP\Files\NotFoundException $e) { }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
* @NoCSRFRequired
|
||||||
|
* @param array $devisToFacture
|
||||||
|
* @param string $paymentDate
|
||||||
|
*/
|
||||||
|
public function exportDevisToFacture($devisToFacture,$paymentDate) {
|
||||||
|
$factureIdsGenerated = $this->myDb->insertFactureForeEachDevisId($this->idNextcloud,$devisToFacture,$paymentDate);
|
||||||
|
$this->invoicePdfService->generateFacturePdfByFactureIds($factureIdsGenerated,$this->idNextcloud);
|
||||||
|
$this->refreshFEC();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2412,4 +2412,86 @@ class Bdd {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getDevisIdListFilteredByMentionAndDevisListId($mentionToNotInclude,$devisListId){
|
||||||
|
if (empty($devisListId)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
$placeholders = implode(',', array_fill(0, count($devisListId), '?'));
|
||||||
|
$sql = "SELECT devis.id as id,devis.date as devis_date
|
||||||
|
FROM ".$this->tableprefix."devis as devis
|
||||||
|
WHERE devis.id IN ($placeholders) AND mentions != ?";
|
||||||
|
|
||||||
|
$result = $this->execSQLNoJsonReturn($sql,array_merge($devisListId, [$mentionToNotInclude]));
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getFactureIdByDevisId($devisId){
|
||||||
|
$sql = "SELECT
|
||||||
|
facture.id
|
||||||
|
FROM ".$this->tableprefix."facture as facture
|
||||||
|
WHERE facture.id_devis = ?
|
||||||
|
ORDER BY facture.id DESC;";
|
||||||
|
$facture = $this->execSQLNoJsonReturn(
|
||||||
|
$sql,
|
||||||
|
[$devisId]);
|
||||||
|
if(!empty($facture)){
|
||||||
|
return $facture[0]['id'];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Insert invoice with a devis
|
||||||
|
*/
|
||||||
|
public function insertFactureByDevisId($idNextcloud,$devisId,$devisDate = null,$paymentDate = null){
|
||||||
|
if($paymentDate == null || $paymentDate == ""){
|
||||||
|
$datetimeNow = new Datetime();
|
||||||
|
$paymentDate = DateHelpers::GetLastDayOfTheMonthOfADate($datetimeNow);
|
||||||
|
$paymentDate = $paymentDate->format('Y-m-d');
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$paymentDate = Datetime::createFromFormat('Y-m-d',$paymentDate);
|
||||||
|
$paymentDate = $paymentDate->format('Y-m-d');
|
||||||
|
}
|
||||||
|
$devisDatetime = new Datetime();
|
||||||
|
if($devisDate != null){
|
||||||
|
$devisDatetime = new Datetime($devisDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
$last = 0;
|
||||||
|
$last = $this->lastNumFacture($idNextcloud);
|
||||||
|
$factureDate = $devisDatetime->format('Y-m-d');
|
||||||
|
$datesplit = explode('-', $factureDate);
|
||||||
|
$fullFactureNumber = "H2F".$datesplit[0]."/".$datesplit[1]."/".$last+1;
|
||||||
|
$sql = "INSERT INTO `".$this->tableprefix."facture` (`date`,`id_nextcloud`,`num`,`date_paiement`,`type_paiement`,`id_devis`,`user_id`, `version`,`facture_number`) VALUES (?,?,?,?,?,?,?,?,?);";
|
||||||
|
$this->execSQLNoData($sql, array(
|
||||||
|
$factureDate,
|
||||||
|
$idNextcloud,
|
||||||
|
$fullFactureNumber,
|
||||||
|
$paymentDate,
|
||||||
|
"Comptant",
|
||||||
|
$devisId,
|
||||||
|
$last+1,
|
||||||
|
"Ajouter un lieu",
|
||||||
|
$last + 1 )
|
||||||
|
);
|
||||||
|
|
||||||
|
$factureId = $this->getFactureIdByDevisId($devisId);
|
||||||
|
//update devis status
|
||||||
|
$this->gestion_update('devis','mentions','facturé',$devisId,$idNextcloud);
|
||||||
|
return $factureId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function insertFactureForeEachDevisId($idNextCloud,$devisIdArray,$paymentDate = null){
|
||||||
|
$mentionToNotInclude = 'facturé';
|
||||||
|
$devisIdListFiltered = $this->getDevisIdListFilteredByMentionAndDevisListId($mentionToNotInclude,$devisIdArray);
|
||||||
|
$factureIdsGenerated = [];
|
||||||
|
foreach($devisIdListFiltered as $devis){
|
||||||
|
$factureId = $this->insertFactureByDevisId($idNextCloud,$devis['id'],$devis['devis_date'],$paymentDate);
|
||||||
|
$factureIdsGenerated[] = $factureId;
|
||||||
|
}
|
||||||
|
return $factureIdsGenerated;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -104,7 +104,7 @@ class DevisPdfService {
|
|||||||
|
|
||||||
public function generateDevisPdfByDevisId($devisId,$idNextCloud){
|
public function generateDevisPdfByDevisId($devisId,$idNextCloud){
|
||||||
$storage = $this->rootFolder->getUserFolder($idNextCloud);
|
$storage = $this->rootFolder->getUserFolder($idNextCloud);
|
||||||
$configs = json_decode($this->gestionBdd->getConfiguration(self::DEFAULT_NEXTCLOUD_H2F_ADMIN));
|
$configs = json_decode($this->gestionBdd->getConfiguration(self::DEFAULT_NEXTCLOUD_ADMIN));
|
||||||
$currentConfig = $configs[0];
|
$currentConfig = $configs[0];
|
||||||
$logo = $this->getLogo();
|
$logo = $this->getLogo();
|
||||||
$devisPdfData = $this->gestionBdd->getDevisPdfDataByDevisId($devisId);
|
$devisPdfData = $this->gestionBdd->getDevisPdfDataByDevisId($devisId);
|
||||||
@ -162,7 +162,7 @@ class DevisPdfService {
|
|||||||
|
|
||||||
public function generateMultipleDevisPdfByClientAndMonthYear($clientId,$month,$year,$idNextCloud){
|
public function generateMultipleDevisPdfByClientAndMonthYear($clientId,$month,$year,$idNextCloud){
|
||||||
$storage = $this->rootFolder->getUserFolder($idNextCloud);
|
$storage = $this->rootFolder->getUserFolder($idNextCloud);
|
||||||
$configs = json_decode($this->gestionBdd->getConfiguration(self::DEFAULT_NEXTCLOUD_H2F_ADMIN));
|
$configs = json_decode($this->gestionBdd->getConfiguration(self::DEFAULT_NEXTCLOUD_ADMIN));
|
||||||
$currentConfig = $configs[0];
|
$currentConfig = $configs[0];
|
||||||
$logo = $this->getLogo();
|
$logo = $this->getLogo();
|
||||||
$mulitpleDevisData = $this->gestionBdd->getDevisPdfDataByClientAndMonthYear($clientId,$month,$year,$currentConfig);
|
$mulitpleDevisData = $this->gestionBdd->getDevisPdfDataByClientAndMonthYear($clientId,$month,$year,$currentConfig);
|
||||||
|
|||||||
@ -69,7 +69,7 @@ class InvoicePdfService {
|
|||||||
|
|
||||||
public function generateFacturePdfByFactureId($factureId,$idNextCloud){
|
public function generateFacturePdfByFactureId($factureId,$idNextCloud){
|
||||||
$storage = $this->rootFolder->getUserFolder($idNextCloud);
|
$storage = $this->rootFolder->getUserFolder($idNextCloud);
|
||||||
$configs = json_decode($this->gestionBdd->getConfiguration(self::DEFAULT_NEXTCLOUD_H2F_ADMIN));
|
$configs = json_decode($this->gestionBdd->getConfiguration(self::DEFAULT_NEXTCLOUD_ADMIN));
|
||||||
$currentConfig = $configs[0];
|
$currentConfig = $configs[0];
|
||||||
$logo = $this->getLogo();
|
$logo = $this->getLogo();
|
||||||
$invoicePdfData = $this->gestionBdd->getInvoicePdfData($factureId,$currentConfig);
|
$invoicePdfData = $this->gestionBdd->getInvoicePdfData($factureId,$currentConfig);
|
||||||
@ -121,7 +121,7 @@ class InvoicePdfService {
|
|||||||
|
|
||||||
public function generateMultipleInvoicePdfByClientAndMonthYear($clientId,$month,$year,$idNextCloud){
|
public function generateMultipleInvoicePdfByClientAndMonthYear($clientId,$month,$year,$idNextCloud){
|
||||||
$storage = $this->rootFolder->getUserFolder($idNextCloud);
|
$storage = $this->rootFolder->getUserFolder($idNextCloud);
|
||||||
$configs = json_decode($this->gestionBdd->getConfiguration(self::DEFAULT_NEXTCLOUD_H2F_ADMIN));
|
$configs = json_decode($this->gestionBdd->getConfiguration(self::DEFAULT_NEXTCLOUD_ADMIN));
|
||||||
$currentConfig = $configs[0];
|
$currentConfig = $configs[0];
|
||||||
$logo = $this->getLogo();
|
$logo = $this->getLogo();
|
||||||
$invoiceData = $this->gestionBdd->getInvoicePdfDataByClientAndMonthYear($clientId,$month,$year,$currentConfig);
|
$invoiceData = $this->gestionBdd->getInvoicePdfDataByClientAndMonthYear($clientId,$month,$year,$currentConfig);
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import DataTable from "datatables.net";
|
|||||||
import { globalConfiguration, optionDatatable } from "./modules/mainFunction.mjs";
|
import { globalConfiguration, optionDatatable } from "./modules/mainFunction.mjs";
|
||||||
import { Devis } from "./objects/devis.mjs";
|
import { Devis } from "./objects/devis.mjs";
|
||||||
import "./listener/main_listener";
|
import "./listener/main_listener";
|
||||||
|
import "./listener/devisListener";
|
||||||
// import { Client } from './objects/client.mjs';
|
// import { Client } from './objects/client.mjs';
|
||||||
|
|
||||||
window.addEventListener("DOMContentLoaded", function () {
|
window.addEventListener("DOMContentLoaded", function () {
|
||||||
|
|||||||
70
gestion/src/js/listener/devisListener.js
Normal file
70
gestion/src/js/listener/devisListener.js
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
import {showError, showSuccess } from "@nextcloud/dialogs";
|
||||||
|
import {baseUrl} from "../modules/mainFunction.mjs";
|
||||||
|
import { Devis } from "../objects/devis.mjs";
|
||||||
|
import DataTable from "datatables.net";
|
||||||
|
|
||||||
|
window.addEventListener("DOMContentLoaded", function () {
|
||||||
|
|
||||||
|
const today = new Date();
|
||||||
|
const lastDayOfMonth = new Date(today.getFullYear(), today.getMonth() + 1, 0);
|
||||||
|
const formattedDate = lastDayOfMonth.toISOString().split('T')[0];
|
||||||
|
const dateInput = document.getElementById('facturationDate');
|
||||||
|
dateInput.value = formattedDate;
|
||||||
|
});
|
||||||
|
|
||||||
|
$('body').on('click', '#showDevisFacturationModal', function () {
|
||||||
|
var oTable = $('.tabledt').dataTable();
|
||||||
|
var rowcollection = oTable.$(".devisToFacture:checked", {"page": "all"});
|
||||||
|
let devisToFacture = [];
|
||||||
|
rowcollection.each(function(index,elem){
|
||||||
|
var checkbox_value = $(elem).val();
|
||||||
|
devisToFacture.push(checkbox_value);
|
||||||
|
});
|
||||||
|
|
||||||
|
if(devisToFacture.length == 0){
|
||||||
|
showError(t('gestion', "Veuillez choisir une ligne de devis à facturer"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$('#devisFacturationModal').show();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('body').on('click', '#closeDevisModal', function () {
|
||||||
|
$('#devisFacturationModal').hide();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('body').on('click', '#invoiceQuote', function () {
|
||||||
|
var dateValue = document.getElementById("facturationDate").value;
|
||||||
|
var oTable = $('.tabledt').dataTable();
|
||||||
|
var rowcollection = oTable.$(".devisToFacture:checked", {"page": "all"});
|
||||||
|
let devisToFacture = [];
|
||||||
|
rowcollection.each(function(index,elem){
|
||||||
|
var checkbox_value = $(elem).val();
|
||||||
|
devisToFacture.push(checkbox_value);
|
||||||
|
});
|
||||||
|
|
||||||
|
if(devisToFacture.length == 0){
|
||||||
|
$('#devisFacturationModal').hide();
|
||||||
|
showError(t('gestion', "Veuillez choisir une ligne de devis à facturer"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let devisToFacturePayload = {
|
||||||
|
devisToFacture: devisToFacture,
|
||||||
|
paymentDate: dateValue
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: baseUrl + '/exportDevisToFacture',
|
||||||
|
type: 'POST',
|
||||||
|
contentType: 'application/json',
|
||||||
|
data: JSON.stringify(devisToFacturePayload)
|
||||||
|
}).done(function (response) {
|
||||||
|
$('#devisFacturationModal').hide();
|
||||||
|
let datatable = new DataTable('.tabledt');
|
||||||
|
Devis.loadDevisDT(datatable);
|
||||||
|
showSuccess(t('gestion', "Devis facturés avec succès"));
|
||||||
|
}).fail(function (response, code) {
|
||||||
|
$('#devisFacturationModal').hide();
|
||||||
|
showError(t('gestion', "Erreur dans la facturation du devis"));
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -465,4 +465,27 @@ $('body').on('click', '#exportClientStat', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$('body').on('click', '#exportFactureToPdf', function () {
|
||||||
|
var factureIdentifier = $('#factureIdentifier').data('id');
|
||||||
|
var exportFacturePayload = {
|
||||||
|
factureId: factureIdentifier
|
||||||
|
};
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: baseUrl + '/facture/exportFactureToPdf',
|
||||||
|
type: 'POST',
|
||||||
|
contentType: 'application/json',
|
||||||
|
data: JSON.stringify(exportFacturePayload)
|
||||||
|
}).done(function (response) {
|
||||||
|
var fileNames = JSON.parse(response);
|
||||||
|
fileNames.forEach(fileName => {
|
||||||
|
showSuccess('Sauvegardé dans' + fileName);
|
||||||
|
});
|
||||||
|
}).fail(function (response, code) {
|
||||||
|
showError(t('gestion', "Please create a new hypodermique"));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
@ -36,6 +36,7 @@ export class Devis {
|
|||||||
getDTRow() {
|
getDTRow() {
|
||||||
let signe_prop = (this.id_nextcloud.toLowerCase() == 'emmanuelle')?'propdevis-emmanuelle':(this.id_nextcloud.toLowerCase() == 'delphine')?'propdevis-delphine':'';
|
let signe_prop = (this.id_nextcloud.toLowerCase() == 'emmanuelle')?'propdevis-emmanuelle':(this.id_nextcloud.toLowerCase() == 'delphine')?'propdevis-delphine':'';
|
||||||
let myrow = [
|
let myrow = [
|
||||||
|
'<input class="devisToFacture" data-id= '+ this.id + ' type="checkbox" name="devisToFacture" value="' + this.id + '"/>',
|
||||||
'<div><div class="'+signe_prop+'">' + this.user_id + '</div></div>',
|
'<div><div class="'+signe_prop+'">' + this.user_id + '</div></div>',
|
||||||
'<input style="margin:0;padding:0;" class="inputDate" type="date" value=' + this.date + ' data-table="devis" data-column="date" data-id="' + this.id + '"/>',
|
'<input style="margin:0;padding:0;" class="inputDate" type="date" value=' + this.date + ' data-table="devis" data-column="date" data-id="' + this.id + '"/>',
|
||||||
// '<div class="editable" data-table="devis" data-column="num" data-id="' + this.id + '" style="display:inline">' + this.num + '</div>',
|
// '<div class="editable" data-table="devis" data-column="num" data-id="' + this.id + '" style="display:inline">' + this.num + '</div>',
|
||||||
|
|||||||
@ -18,7 +18,10 @@
|
|||||||
<div class="d-flex flex-row align-items-center"><div class="emmanuelle"></div> <div>Emmanuelle</div></div>
|
<div class="d-flex flex-row align-items-center"><div class="emmanuelle"></div> <div>Emmanuelle</div></div>
|
||||||
<div class="d-flex flex-row align-items-center"><div class="delphine"></div> <div>Delphine</div></div>
|
<div class="d-flex flex-row align-items-center"><div class="delphine"></div> <div>Delphine</div></div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="d-flex justify-content-end">
|
||||||
|
<button id="showDevisFacturationModal" class="btn btn-secondary" data-toggle="modal" data-target="#devisFacturationModal">
|
||||||
|
Facturer
|
||||||
|
</button>
|
||||||
<button class="btn btn-secondary" id="apercusDevis">Voir les aperçus</button>
|
<button class="btn btn-secondary" id="apercusDevis">Voir les aperçus</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -26,6 +29,7 @@
|
|||||||
<table id="devis" class="display tabledt">
|
<table id="devis" class="display tabledt">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th></th>
|
||||||
<th><?php p($l->t('ID'));?></th>
|
<th><?php p($l->t('ID'));?></th>
|
||||||
<th><?php p($l->t('Quote date'));?></th>
|
<th><?php p($l->t('Quote date'));?></th>
|
||||||
<!-- <th>Nom du défunt</th> -->
|
<!-- <th>Nom du défunt</th> -->
|
||||||
@ -40,4 +44,20 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<div class="modal" id="devisFacturationModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="exampleModalLabel">Choisir la date de facturation souhaitée</h5>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<input type="date" id="facturationDate">
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button id="closeDevisModal" type="button" class="btn btn-secondary">Annuler</button>
|
||||||
|
<button id="invoiceQuote" type="button" class="btn btn-primary">Facturer</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
<div class="d-flex flex-column w-100">
|
<div class="d-flex flex-column w-100">
|
||||||
<h2 class="mt-3 mb-3 text-center"><?php p($l->t('Invoice #'));?>
|
<h2 class="mt-3 mb-3 text-center"><?php p($l->t('Invoice #'));?>
|
||||||
<div id="factureid" style="display:inline"><?php echo $_['facture'][0]->num;?></div>
|
<div id="factureid" style="display:inline"><?php echo $_['facture'][0]->num;?></div>
|
||||||
|
<div id="factureIdentifier" data-id="<?php echo $_['facture'][0]->id;?>" class="d-none"></div>
|
||||||
</h2>
|
</h2>
|
||||||
<hr/>
|
<hr/>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -98,7 +99,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<div>
|
<div>
|
||||||
<button id="pdf" type="button" class="mb-2 btn btn-outline-success" data-html2canvas-ignore data-name=""><?php p($l->t('Save in Nextcloud'));?></button>
|
<button id="exportFactureToPdf" type="button" class="mb-2 btn btn-outline-success"><?php p($l->t('Save in Nextcloud'));?></button>
|
||||||
<button id="mailGestion" type="button" class="mb-2 btn btn-outline-success sendmail" data-html2canvas-ignore data-name=""><?php p($l->t('Send by email'));?></button>
|
<button id="mailGestion" type="button" class="mb-2 btn btn-outline-success sendmail" data-html2canvas-ignore data-name=""><?php p($l->t('Send by email'));?></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-0 table-responsive">
|
<div class="mt-0 table-responsive">
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user