4562 lines
222 KiB
PHP
4562 lines
222 KiB
PHP
<?php
|
|
namespace OCA\Gestion\Db;
|
|
|
|
use OCA\Gestion\Constants\ClientTemplateTypeConstant;
|
|
use OCA\Gestion\Constants\FactureStatusConstant;
|
|
use OCA\Gestion\Constants\FactureTypeConstant;
|
|
use OCA\Gestion\Helpers\DateHelpers;
|
|
use OCA\Gestion\Helpers\PriceHelpers;
|
|
use OCP\IDBConnection;
|
|
use OCP\IL10N;
|
|
use \Datetime;
|
|
use OCA\Gestion\Constants\BddConstant;
|
|
use OCA\Gestion\Constants\DevisMentionConstant;
|
|
use OCA\Gestion\Constants\MultipleFactureTypeConstant;
|
|
use OCA\Gestion\Constants\ProductConstant;
|
|
use OCA\Gestion\Helpers\FileExportHelpers;
|
|
use Psr\Log\LoggerInterface;
|
|
use OCA\Gestion\Helpers\VCalendarHelpers;
|
|
|
|
class Bdd {
|
|
private String $charset = 'utf8mb4';
|
|
|
|
public const DEFAULT_CALENDAR_UUID_FOR_DEVIS = "not-related";
|
|
public const DEFAULT_TABLE_PREFIX = "*PREFIX*";
|
|
public const DEFAULT_CLIENT_GROUP_NAME = "Nom du groupe";
|
|
public const DEFAULT_CLIENT_GROUP_FACTURATION_NAME = "Nom du groupe";
|
|
private IDbConnection $pdo;
|
|
private array $whiteColumn;
|
|
private array $whiteTable;
|
|
private String $tableprefix;
|
|
private $l;
|
|
|
|
/** @var LoggerInterface */
|
|
private $logger;
|
|
|
|
public function __construct(IDbConnection $db, IL10N $l, LoggerInterface $logger) {
|
|
$this->whiteColumn = array("date", "num", "id_client", "id_thanato", "entreprise", "nom", "prenom", "legal_one", "telephone", "mail", "adresse", "produit_id",
|
|
"quantite", "date_paiement", "type_paiement", "id_devis", "reference", "description", "prix_unitaire", "legal_two", "path", "tva_default", "coefficient_ik",
|
|
"mentions_default", "version", "mentions", "comment", "status_paiement", "devise", "auto_invoice_number", "changelog", "format", "comment", "user_id",
|
|
"facture_prefixe", "arrivee", "depart", "latitude", "longitude", "id_lieu", "rang", "mois", "annee", "id_trajet", "commentaire","source",
|
|
"date_habilitation", "sexe", "observations_generales", "ref_pacemaker", "id_defunt", "article_id", "corpulence",
|
|
"date_naissance", "heure_debut", "heure_fin", "rigidite", "lividite", "observations_corps", "acces", "acces_recherche", "acces_etat",
|
|
"injection", "injection_diffusion", "injection_qte", "preinjection", "preinjection_qte", "coinjection", "coinjection_qte",
|
|
"drainage", "drainage_qte", "drainage_etat", "ponction", "ponction_qte", "cavite", "cavite_qte", "desinfection", "lavage",
|
|
"rasage", "presentation_cosmetique", "presentation_sur", "hypodermiques", "hypodermiques_sur", "local", "local_sur", "contenu",
|
|
"commentaire", "designation", "hypodermiques_text1", "hypodermiques_text2", "qte", "endroit",
|
|
"fk_client_group_id","fk_produit_id","ht_amount","client_group_name",
|
|
"fk_client_group_facturation_id","group_facturation_name",
|
|
"fk_product_type_id",
|
|
"portal_code","alarm_code","funeral_code",
|
|
"product_brand","product_reference",
|
|
"fk_user_uuid",
|
|
"phone_number","address",'postal_code','city','email','siret_number','tva_intracommu',
|
|
'order_number','case_number','fk_template_type_key',
|
|
'facture_case_number','facture_order_number','taker_name');
|
|
$this->whiteTable = array(
|
|
"client", "lieu", "trajet", "devis", "produit_devis", "facture", "produit", "configuration", "ligne_trajet", "thanato", "article", "defunt", "article_devis", "bibliotheque", "bijou_defunt", "obs_defunt", "hypo_defunt",
|
|
"client_group_discount","client_group",
|
|
"client_group_facturation");
|
|
$this->tableprefix = '*PREFIX*' ."gestion_";
|
|
$this->pdo = $db;
|
|
$this->l = $l;
|
|
$this->logger = $logger;
|
|
}
|
|
|
|
public function getConfiguration($idNextcloud){
|
|
$sql = "SELECT * FROM `".$this->tableprefix."configuration` WHERE id_nextcloud = ?";
|
|
return $this->execSQL($sql, array($idNextcloud));
|
|
}
|
|
|
|
public function getTotalDevis($iddevis, $idNextcloud) {
|
|
$articles = json_decode($this->getListArticle($iddevis, $idNextcloud));
|
|
$produits = json_decode($this->getListProduit($iddevis, $idNextcloud));
|
|
$total=0;
|
|
foreach($articles as $key => $article) {
|
|
$total += $article->prix_unitaire*$article->quantite;
|
|
}
|
|
foreach($produits as $key => $produit) {
|
|
$total += $produit->prix_unitaire*$produit->quantite;
|
|
}
|
|
return $total;
|
|
}
|
|
|
|
public function getClients($idNextcloud){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."client;";
|
|
|
|
$clients = $this->execSQLNoJsonReturn($sql,[]);
|
|
foreach($clients as &$client){
|
|
if($client['fk_client_group_id'] == null){
|
|
$client['client_group_name'] = '';
|
|
}
|
|
else{
|
|
$clientGroup = $this->getClientGroupById($client['fk_client_group_id']);
|
|
$client['client_group_name'] = $clientGroup != null ? $clientGroup['client_group_name'] : '';
|
|
}
|
|
|
|
if($client['fk_client_group_facturation_id'] == null){
|
|
$client['client_group_facturation_name'] = '';
|
|
}
|
|
else{
|
|
$clientGroupFacturation = $this->getClientGroupFacturationById($client['fk_client_group_facturation_id']);
|
|
$client['client_group_facturation_name'] = $clientGroupFacturation != null ? $clientGroupFacturation['group_facturation_name'] : '';
|
|
}
|
|
}
|
|
return json_encode($clients);
|
|
}
|
|
|
|
private function getClientGroupById($clientGroupId){
|
|
$sql = "SELECT *
|
|
FROM ".$this->tableprefix."client_group as client_group
|
|
WHERE client_group.id = ? ;";
|
|
|
|
$clientGroup = $this->execSQLNoJsonReturn($sql, array($clientGroupId));
|
|
if(!empty($clientGroup)){
|
|
return $clientGroup[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getClientsName(){
|
|
$sql = "SELECT client.nom, client.prenom, client.id
|
|
FROM ".$this->tableprefix."client as client
|
|
ORDER BY client.id DESC";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function getClient($id,$idNextcloud){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."client WHERE id = ?";
|
|
return $this->execSQL($sql, array($id));
|
|
}
|
|
|
|
public function getClientbyiddevis($id, $idNextcloud){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."devis as d, ".$this->tableprefix."client as c WHERE d.id_client = c.id AND d.id = ?";
|
|
return $this->execSQL($sql, array($id));
|
|
}
|
|
|
|
public function getThanatopracteurs($idNextcloud){
|
|
$sql = "SELECT
|
|
thanato.*,
|
|
users.uid as user_uuid,
|
|
users.displayname as user_display_name
|
|
FROM ".$this->tableprefix."thanato as thanato
|
|
LEFT JOIN ".self::DEFAULT_TABLE_PREFIX."users as users on thanato.fk_user_uuid = users.uid
|
|
;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function getThanatoByIds(array $thanatoIds){
|
|
if(empty($thanatoIds)){
|
|
return [];
|
|
}
|
|
|
|
$sqlConditionsPlaceholder = implode(',', array_fill(0, count($thanatoIds), '?'));
|
|
|
|
$sql = "SELECT
|
|
thanato.id,
|
|
thanato.nom as thanato_nom,
|
|
thanato.prenom as thanato_prenom
|
|
FROM ".$this->tableprefix."thanato as thanato
|
|
WHERE thanato.id IN ($sqlConditionsPlaceholder)";
|
|
$thanatoList = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
$thanatoIds);
|
|
|
|
return $thanatoList;
|
|
}
|
|
|
|
public function getBibliotheques($idNextcloud) {
|
|
$sql = "SELECT * FROM ".$this->tableprefix."bibliotheque;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function getTrajets($idNextcloud) {
|
|
// $sql_delete = "DELETE FROM ".$this->tableprefix."ligne_trajet";
|
|
// $this->execSQL($sql_delete, array());
|
|
// $sql_delete = "DELETE FROM ".$this->tableprefix."trajet";
|
|
// $this->execSQL($sql_delete, array());
|
|
$sql = "SELECT trajet.id, trajet.mois, trajet.annee, trajet.distance, trajet.id_nextcloud, trajet.user_id,
|
|
thanato.id as id_thanato, thanato.nom as nom_thanato, thanato.prenom as prenom_thanato
|
|
FROM ".$this->tableprefix."trajet as trajet
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on trajet.id_thanato = thanato.id
|
|
ORDER BY trajet.annee DESC, trajet.mois DESC;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function getTrajetById($numtrajet, $idNextcloud) {
|
|
$sql = "SELECT trajet.id, trajet.mois, trajet.annee, trajet.distance, trajet.id_nextcloud, trajet.user_id,
|
|
thanato.id as id_thanato, thanato.nom as nom_thanato, thanato.prenom as prenom_thanato
|
|
FROM ".$this->tableprefix."trajet as trajet
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on trajet.id_thanato = thanato.id
|
|
WHERE trajet.id = ?";
|
|
return $this->execSQL($sql, array($numtrajet));
|
|
}
|
|
|
|
public function getTrajetsdetails($numtrajet, $idNextcloud) {
|
|
$sql = "SELECT ligne_trajet.id, ligne_trajet.rang, ligne_trajet.id_nextcloud, ligne_trajet.date, ligne_trajet.user_id, ligne_trajet.commentaire, ligne_trajet.source,
|
|
lieu.id as lid, lieu.nom as lieu, lieu.latitude as latitude, lieu.longitude as longitude,
|
|
devis.id as did, devis.num as dnum, client_devis.nom as dnom, client_devis.prenom as dprenoms, devis.id_nextcloud as didnextcloud,
|
|
defunt.nom as nom_defunt,
|
|
client.nom as cnom, client.id as cid, client.prenom as cprenoms
|
|
FROM (".$this->tableprefix."ligne_trajet as ligne_trajet
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on ligne_trajet.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."devis as devis on ligne_trajet.id_devis = devis.id
|
|
LEFT JOIN ".$this->tableprefix."client as client_devis on devis.id_client = client_devis.id
|
|
LEFT JOIN ".$this->tableprefix."client as client on ligne_trajet.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
) WHERE ligne_trajet.id_trajet = ? ORDER BY ligne_trajet.rang ASC;";
|
|
return $this->execSQL($sql, array($numtrajet));
|
|
}
|
|
|
|
public function getTrajetsdetails_orderByDate($numtrajet, $idNextcloud) {
|
|
$sql = "SELECT ligne_trajet.id, ligne_trajet.rang, ligne_trajet.id_nextcloud, ligne_trajet.date, ligne_trajet.user_id, ligne_trajet.commentaire, ligne_trajet.source,
|
|
lieu.id as lid, lieu.nom as lieu, lieu.latitude as latitude, lieu.longitude as longitude,
|
|
client.nom as cnom, client.id as cid, client.prenom as cprenoms
|
|
FROM (".$this->tableprefix."ligne_trajet as ligne_trajet
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on ligne_trajet.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."client as client on ligne_trajet.id_client = client.id)
|
|
WHERE ligne_trajet.id_trajet = ?
|
|
ORDER BY ligne_trajet.date ASC, ligne_trajet.rang ASC;";
|
|
return $this->execSQL($sql, array($numtrajet));
|
|
}
|
|
|
|
public function getOneTrajetdetails($id, $idNextcloud) {
|
|
$sql = "SELECT * FROM ".$this->tableprefix."ligne_trajet WHERE ".$this->tableprefix."ligne_trajet.id = ?;";
|
|
return $this->execSQL($sql, array($id));
|
|
}
|
|
|
|
public function getOneTrajetdetails_byIdDevis($id_devis, $idNextcloud) {
|
|
$sql = "SELECT * FROM ".$this->tableprefix."ligne_trajet WHERE ".$this->tableprefix."ligne_trajet.id_devis = ? AND ".$this->tableprefix."ligne_trajet.source LIKE 'devis';";
|
|
return $this->execSQL($sql, array($id_devis));
|
|
}
|
|
|
|
public function getOneTrajetdetails_byRang($id_trajet, $rang, $idNextcloud) {
|
|
$sql = "SELECT * FROM ".$this->tableprefix."ligne_trajet WHERE ".$this->tableprefix."ligne_trajet.id_trajet = ? AND ".$this->tableprefix."ligne_trajet.rang = ?;";
|
|
return $this->execSQL($sql, array($id_trajet, $rang));
|
|
}
|
|
|
|
public function getOneTrajet($id, $idNextcloud) {
|
|
$sql = "SELECT trajet.id, trajet.mois, trajet.annee, trajet.distance, trajet.id_nextcloud, trajet.user_id,
|
|
thanato.id as id_thanato, thanato.nom as nom_thanato, thanato.prenom as prenom_thanato
|
|
FROM ".$this->tableprefix."trajet as trajet
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on trajet.id_thanato = thanato.id
|
|
WHERE trajet.id = ".$id." ORDER BY trajet.id DESC;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function getLieux($idNextcloud){
|
|
$sql = "SELECT lieu.nom, lieu.adresse, lieu.latitude,lieu.longitude, lieu.user_id, lieu.id,
|
|
lieu.portal_code,lieu.alarm_code,lieu.funeral_code
|
|
FROM ".$this->tableprefix."lieu as lieu
|
|
ORDER BY lieu.id DESC";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function getLieu($id,$idNextcloud){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."lieu WHERE id = ?";
|
|
return $this->execSQL($sql, array($id));
|
|
}
|
|
|
|
public function getDevis($idNextcloud,$mentionFilters = []){
|
|
$sql = "SELECT ".$this->tableprefix."devis.id, ".$this->tableprefix."devis.id as devisid, ".$this->tableprefix."devis.user_id,".$this->tableprefix."devis.id_nextcloud ,".$this->tableprefix."devis.comment ,"
|
|
.$this->tableprefix."client.nom, ".$this->tableprefix."client.prenom, ".$this->tableprefix."client.id as cid, ".$this->tableprefix."client.id as id_client, "
|
|
.$this->tableprefix."client.adresse as adresse_cli,".$this->tableprefix."client.mail as mail_cli,".$this->tableprefix."client.telephone as telephone_cli,".$this->tableprefix."client.legal_one as legalone_cli,"
|
|
.$this->tableprefix."client.fk_client_group_facturation_id as fk_client_group_facturation_id,"
|
|
.$this->tableprefix."thanato.nom as nom_thanato, ".$this->tableprefix."thanato.prenom as prenom_thanato, ".$this->tableprefix."thanato.id as tid, "
|
|
.$this->tableprefix."devis.num, ".$this->tableprefix."devis.date, ".$this->tableprefix."devis.version, ".$this->tableprefix."devis.mentions, "
|
|
.$this->tableprefix."devis.order_number, ".$this->tableprefix."devis.case_number, "
|
|
.$this->tableprefix."lieu.id as lid, ".$this->tableprefix."lieu.nom as lieu,".$this->tableprefix."lieu.adresse as adresse_soin,".$this->tableprefix."devis.id_lieu, "
|
|
.$this->tableprefix."defunt.id as id_defunt, ".$this->tableprefix."defunt.nom as nom_defunt, "
|
|
.$this->tableprefix."devis.devis_full_number as devis_full_number
|
|
FROM ".$this->tableprefix."devis
|
|
LEFT JOIN ".$this->tableprefix."defunt on id_defunt = ".$this->tableprefix."defunt.id
|
|
LEFT JOIN ".$this->tableprefix."client on id_client = ".$this->tableprefix."client.id
|
|
LEFT JOIN ".$this->tableprefix."thanato on id_thanato = ".$this->tableprefix."thanato.id
|
|
LEFT JOIN ".$this->tableprefix."lieu on id_lieu = ".$this->tableprefix."lieu.id";
|
|
|
|
$conditions = [];
|
|
if(!empty($mentionFilters)){
|
|
$mentionsFilterPlaceholders = implode(',', array_fill(0, count($mentionFilters), '?'));
|
|
$sql .= " WHERE ". $this->tableprefix."devis.mentions IN ($mentionsFilterPlaceholders)";
|
|
$conditions = array_merge($conditions, $mentionFilters);
|
|
}
|
|
$sql .= " ORDER BY ".$this->tableprefix."devis.id DESC, ".$this->tableprefix."devis.date DESC;";
|
|
return $this->execSQL($sql, $conditions);
|
|
}
|
|
|
|
public function getDevisWithProduits($idNextcloud){
|
|
$devis = $this->getDevis($idNextcloud);
|
|
$devisList = json_decode($devis);
|
|
foreach($devisList as $currentDevis){
|
|
$produits = $this->getProduitsDevisByDevisId($currentDevis->devisid);
|
|
$currentDevis->produits = $produits;
|
|
}
|
|
return json_encode($devisList);
|
|
}
|
|
|
|
public function getDevisEmmanuelle($idNextcloud){
|
|
$sql = "SELECT ".$this->tableprefix."devis.id, ".$this->tableprefix."devis.id as devisid, ".$this->tableprefix."devis.user_id,".$this->tableprefix."devis.id_nextcloud ,".$this->tableprefix."devis.comment ,"
|
|
.$this->tableprefix."client.nom, ".$this->tableprefix."client.prenom, ".$this->tableprefix."client.id as cid, ".$this->tableprefix."client.id as id_client, "
|
|
.$this->tableprefix."client.adresse as adresse_cli,".$this->tableprefix."client.mail as mail_cli,".$this->tableprefix."client.telephone as telephone_cli,".$this->tableprefix."client.legal_one as legalone_cli,"
|
|
.$this->tableprefix."thanato.nom as nom_thanato, ".$this->tableprefix."thanato.prenom as prenom_thanato, ".$this->tableprefix."thanato.id as tid, "
|
|
.$this->tableprefix."devis.num, ".$this->tableprefix."devis.date, ".$this->tableprefix."devis.version, ".$this->tableprefix."devis.mentions, "
|
|
.$this->tableprefix."lieu.id as lid, ".$this->tableprefix."lieu.nom as lieu,".$this->tableprefix."lieu.adresse as adresse_soin,".$this->tableprefix."devis.id_lieu, "
|
|
.$this->tableprefix."defunt.id as id_defunt, ".$this->tableprefix."defunt.nom as nom_defunt
|
|
FROM (".$this->tableprefix."devis
|
|
LEFT JOIN ".$this->tableprefix."client on id_client = ".$this->tableprefix."client.id
|
|
LEFT JOIN ".$this->tableprefix."thanato on id_thanato = ".$this->tableprefix."thanato.id
|
|
LEFT JOIN ".$this->tableprefix."lieu on id_lieu = ".$this->tableprefix."lieu.id
|
|
LEFT JOIN ".$this->tableprefix."defunt on id_defunt = ".$this->tableprefix."defunt.id
|
|
) WHERE LOWER(".$this->tableprefix."devis.id_nextcloud) LIKE 'emmanuelle' ORDER BY ".$this->tableprefix."devis.id DESC, ".$this->tableprefix."devis.date DESC;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function getDevisDelphine($idtrajetdetails, $idNextcloud) {
|
|
$ligne_trajet = json_decode($this->getOneTrajetdetails($idtrajetdetails, $idNextcloud))[0];
|
|
$sql = "SELECT ".$this->tableprefix."devis.id, ".$this->tableprefix."devis.user_id,".$this->tableprefix."devis.id_nextcloud ,"
|
|
.$this->tableprefix."client.nom, ".$this->tableprefix."client.prenom, ".$this->tableprefix."client.id as cid, "
|
|
.$this->tableprefix."thanato.nom as nom_thanato, ".$this->tableprefix."thanato.prenom as prenom_thanato, ".$this->tableprefix."thanato.id as tid, "
|
|
.$this->tableprefix."devis.num, ".$this->tableprefix."devis.date, ".$this->tableprefix."devis.version, ".$this->tableprefix."devis.mentions, "
|
|
.$this->tableprefix."lieu.id as lid, ".$this->tableprefix."lieu.nom as lieu,".$this->tableprefix."devis.id_lieu
|
|
FROM (".$this->tableprefix."devis
|
|
LEFT JOIN ".$this->tableprefix."client on id_client = ".$this->tableprefix."client.id
|
|
LEFT JOIN ".$this->tableprefix."thanato on id_thanato = ".$this->tableprefix."thanato.id
|
|
LEFT JOIN ".$this->tableprefix."lieu on id_lieu = ".$this->tableprefix."lieu.id
|
|
) WHERE LOWER(".$this->tableprefix."devis.id_nextcloud) LIKE 'delphine'
|
|
AND ".$this->tableprefix."devis.date LIKE '".$ligne_trajet->date."'";
|
|
|
|
if($ligne_trajet->id_client != NULL) $sql = $sql." AND ".$this->tableprefix."devis.id_client = ".$ligne_trajet->id_client;
|
|
if($ligne_trajet->id_lieu != NULL) $sql = $sql." AND ".$this->tableprefix."devis.id_lieu = ".$ligne_trajet->id_lieu;
|
|
|
|
$sql = $sql." ORDER BY ".$this->tableprefix."devis.id DESC, ".$this->tableprefix."devis.date DESC;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
private function getClientsWithClientType(bool $includeClientInsideGroup = true){
|
|
$sql = "SELECT client.*,'client' as client_type FROM ".$this->tableprefix."client as client";
|
|
if($includeClientInsideGroup == false){
|
|
$sql .= " WHERE client.fk_client_group_facturation_id IS NULL";
|
|
}
|
|
$sql .= ";";
|
|
$clientsWithClientType = $this->execSQLNoJsonReturn($sql,[]);
|
|
return $clientsWithClientType;
|
|
}
|
|
|
|
public function getClientsAndClientGroupFacturations(bool $includeClientInsideGroup = true){
|
|
$clients = $this->getClientsWithClientType($includeClientInsideGroup);
|
|
$clientGroupFacturations = $this->getClientGroupFacturationsWithType();
|
|
$result = [...$clientGroupFacturations,...$clients];
|
|
return json_encode($result);
|
|
}
|
|
|
|
public function getFacturesListWithDependencies(){
|
|
$sql = "SELECT
|
|
facture.id,
|
|
facture.user_id,
|
|
facture.num,
|
|
facture.date,
|
|
facture.fk_facture_status_key,
|
|
facture.fk_facture_payment_type_id,
|
|
facture.payment_date,
|
|
facture_payment_type.facture_payment_type_label,
|
|
facture_status.facture_status_label,
|
|
facture.facture_type,
|
|
facture.fk_client_id as facture_client_id,
|
|
facture.fk_client_group_facturation_id as facture_client_group_facturation_id,
|
|
facture.date_paiement,
|
|
facture.type_paiement,
|
|
facture.id_devis,
|
|
facture.version,
|
|
facture.status_paiement,
|
|
facture_client.nom as facture_client_name,
|
|
facture_client_group_facturation.group_facturation_name as facture_group_name,
|
|
devis.num as dnum,
|
|
devis.comment as dcomment,
|
|
client.entreprise,
|
|
client.nom,
|
|
client.prenom,
|
|
client.id as id_cli,
|
|
client.entreprise as client_entreprise,
|
|
client.fk_client_group_facturation_id as fk_client_group_facturation_id,
|
|
client.adresse as adresse_cli,client.mail as mail_cli,
|
|
client.telephone as telephone_cli,client.legal_one as legalone_cli,
|
|
client.fk_client_group_id as fk_client_group_id,
|
|
defunt.id as id_defunt,
|
|
defunt.nom as nom_defunt,
|
|
lieu.id as lid,
|
|
lieu.nom as lieu,
|
|
lieu.adresse as adresse_soin,devis.id_lieu
|
|
FROM ".$this->tableprefix."facture as facture
|
|
LEFT JOIN ".$this->tableprefix."devis as devis on facture.id_devis = devis.id
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on devis.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
LEFT JOIN ".$this->tableprefix."facture_payment_type as facture_payment_type on facture.fk_facture_payment_type_id = facture_payment_type.id
|
|
LEFT JOIN ".$this->tableprefix."facture_status as facture_status on facture.fk_facture_status_key = facture_status.facture_status_key
|
|
LEFT JOIN ".$this->tableprefix."client as facture_client on facture.fk_client_id = facture_client.id
|
|
LEFT JOIN ".$this->tableprefix."client_group_facturation as facture_client_group_facturation on facture.fk_client_group_facturation_id = facture_client_group_facturation.id
|
|
ORDER BY facture.id DESC, facture.date_paiement DESC";
|
|
$result = $this->execSQL($sql, array());
|
|
return $result;
|
|
}
|
|
|
|
public function getFactures($idNextcloud){
|
|
$sql = "SELECT ".$this->tableprefix."facture.id, ".$this->tableprefix."facture.user_id, ".$this->tableprefix."facture.num, ".$this->tableprefix."facture.date, "
|
|
.$this->tableprefix."facture.fk_facture_status_key, ".$this->tableprefix."facture.fk_facture_payment_type_id, ".$this->tableprefix."facture.payment_date, "
|
|
.$this->tableprefix."facture_payment_type.facture_payment_type_label, "
|
|
.$this->tableprefix."facture_status.facture_status_label, "
|
|
.$this->tableprefix."facture.facture_type, "
|
|
.$this->tableprefix."facture.fk_client_id as facture_client_id, "
|
|
.$this->tableprefix."facture.fk_client_group_facturation_id as facture_client_group_facturation_id, "
|
|
.$this->tableprefix."devis.num as dnum, ".$this->tableprefix."devis.comment as dcomment, date_paiement, type_paiement, id_devis, entreprise, "
|
|
.$this->tableprefix."facture.version, status_paiement,"
|
|
.$this->tableprefix."client.nom, ".$this->tableprefix."client.prenom, "
|
|
.$this->tableprefix."client.id as id_cli, ".$this->tableprefix."client.entreprise as client_entreprise, ".$this->tableprefix."client.fk_client_group_facturation_id as fk_client_group_facturation_id, "
|
|
.$this->tableprefix."client.adresse as adresse_cli,".$this->tableprefix."client.mail as mail_cli, "
|
|
.$this->tableprefix."client.telephone as telephone_cli,".$this->tableprefix."client.legal_one as legalone_cli, "
|
|
.$this->tableprefix."client.fk_client_group_id as fk_client_group_id, "
|
|
.$this->tableprefix."defunt.id as id_defunt, ".$this->tableprefix."defunt.nom as nom_defunt, "
|
|
.$this->tableprefix."lieu.id as lid, ".$this->tableprefix."lieu.nom as lieu,".$this->tableprefix."lieu.adresse as adresse_soin,".$this->tableprefix."devis.id_lieu
|
|
FROM (".$this->tableprefix."facture
|
|
LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."facture.id_devis = ".$this->tableprefix."devis.id)
|
|
LEFT JOIN ".$this->tableprefix."lieu on ".$this->tableprefix."devis.id_lieu = ".$this->tableprefix."lieu.id
|
|
LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt on id_defunt = ".$this->tableprefix."defunt.id
|
|
LEFT JOIN ".$this->tableprefix."facture_payment_type on fk_facture_payment_type_id = ".$this->tableprefix."facture_payment_type.id
|
|
LEFT JOIN ".$this->tableprefix."facture_status on fk_facture_status_key = ".$this->tableprefix."facture_status.facture_status_key
|
|
ORDER BY ".$this->tableprefix."facture.id DESC, ".$this->tableprefix."facture.date_paiement DESC";
|
|
$result = $this->execSQL($sql, array());
|
|
return $result;
|
|
}
|
|
|
|
public function getFacturesWithProduits(){
|
|
$factures = $this->getFacturesListWithDependencies();
|
|
$facturesList = json_decode($factures);
|
|
foreach($facturesList as $currentFacture){
|
|
$produits = $this->getProduitsDevisByDevisId($currentFacture->id_devis);
|
|
$currentFacture->produits = $produits;
|
|
}
|
|
return json_encode($facturesList);
|
|
}
|
|
|
|
private function getClientFacturesByClientIdListAndDate($clientIdList,$date) {
|
|
$clientIdsSqlPlaceholder = implode(',', array_fill(0, count($clientIdList), '?'));
|
|
$sql = "SELECT YEAR(".$this->tableprefix."facture.date_paiement) AS year, MONTH(".$this->tableprefix."facture.date_paiement) AS month,"
|
|
.$this->tableprefix."facture.id, ".$this->tableprefix."facture.user_id, ".$this->tableprefix."facture.num, ".$this->tableprefix."facture.date, "
|
|
.$this->tableprefix."devis.num as dnum,".$this->tableprefix."devis.version as adresse_devis,".$this->tableprefix."devis.comment as numero_commande, "
|
|
.$this->tableprefix."client.adresse as adresse_client, ".$this->tableprefix."devis.date as date_soin, "
|
|
.$this->tableprefix."client.legal_one as client_siret, "
|
|
.$this->tableprefix."client.mail as mail_client, ".$this->tableprefix."client.entreprise as client_entreprise, ".$this->tableprefix."client.fk_client_group_id as fk_client_group_id, "
|
|
.$this->tableprefix."devis.id_client as id_client, date_paiement, type_paiement, id_devis, ".$this->tableprefix."client.nom as nom, prenom, entreprise, "
|
|
.$this->tableprefix."lieu.id as lid, ".$this->tableprefix."lieu.nom as lieu,".$this->tableprefix."lieu.adresse as adresse_soin,"
|
|
.$this->tableprefix."defunt.id as id_defunt, ".$this->tableprefix."defunt.nom as nom_defunt,"
|
|
.$this->tableprefix."client_group_facturation.id as client_group_facturation_id, ".$this->tableprefix."client_group_facturation.group_facturation_name as group_facturation_name,"
|
|
.$this->tableprefix."facture.version, status_paiement
|
|
FROM (".$this->tableprefix."facture
|
|
LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."facture.id_devis = ".$this->tableprefix."devis.id)
|
|
LEFT JOIN ".$this->tableprefix."lieu on ".$this->tableprefix."devis.id_lieu = ".$this->tableprefix."lieu.id
|
|
LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt on ".$this->tableprefix."devis.id_defunt = ".$this->tableprefix."defunt.id
|
|
LEFT JOIN ".$this->tableprefix."client_group_facturation on ".$this->tableprefix."client.fk_client_group_facturation_id = ".$this->tableprefix."client_group_facturation.id
|
|
WHERE YEAR(".$this->tableprefix."facture.date_paiement) = ".explode('-', $date)[2]." AND MONTH(".$this->tableprefix."facture.date_paiement) = ".explode('-', $date)[1]."
|
|
AND ".$this->tableprefix."client.id IN($clientIdsSqlPlaceholder) ORDER BY date_soin ASC";
|
|
$result = $this->execSQL(
|
|
sql: $sql,
|
|
conditions: $clientIdList );
|
|
return $result;
|
|
}
|
|
|
|
public function getClientFacturesByClientGroupFacturationIdAndDate($clientGroupFacturationId,$date){
|
|
$clientIds = $this->getClientIdsByClientGroupFacturationId($clientGroupFacturationId);
|
|
if(empty($clientIds)){
|
|
return [];
|
|
}
|
|
return $this->getClientFacturesByClientIdListAndDate($clientIds,$date);
|
|
}
|
|
|
|
public function getClientFacturesByClientIdAndDate($clientId,$date){
|
|
$sql = "SELECT YEAR(".$this->tableprefix."facture.date_paiement) AS year, MONTH(".$this->tableprefix."facture.date_paiement) AS month,"
|
|
.$this->tableprefix."facture.id, ".$this->tableprefix."facture.user_id, ".$this->tableprefix."facture.num, ".$this->tableprefix."facture.date, "
|
|
.$this->tableprefix."devis.num as dnum,".$this->tableprefix."devis.version as adresse_devis,".$this->tableprefix."devis.comment as numero_commande, "
|
|
.$this->tableprefix."client.adresse as adresse_client, ".$this->tableprefix."devis.date as date_soin, "
|
|
.$this->tableprefix."client.mail as mail_client, ".$this->tableprefix."client.entreprise as client_entreprise, ".$this->tableprefix."client.fk_client_group_id as fk_client_group_id, "
|
|
.$this->tableprefix."client.legal_one as client_siret, "
|
|
.$this->tableprefix."devis.id_client as id_client, date_paiement, type_paiement, id_devis, ".$this->tableprefix."client.nom as nom, prenom, entreprise, "
|
|
.$this->tableprefix."lieu.id as lid, ".$this->tableprefix."lieu.nom as lieu,".$this->tableprefix."lieu.adresse as adresse_soin,"
|
|
.$this->tableprefix."defunt.id as id_defunt, ".$this->tableprefix."defunt.nom as nom_defunt,"
|
|
.$this->tableprefix."facture.version, status_paiement, "
|
|
.$this->tableprefix."client_group_facturation.id as group_id, "
|
|
.$this->tableprefix."client_group_facturation.group_facturation_name as group_name, "
|
|
.$this->tableprefix."client_group_facturation.address as group_address, "
|
|
.$this->tableprefix."client_group_facturation.postal_code as group_postal_code, "
|
|
.$this->tableprefix."client_group_facturation.city as group_city, "
|
|
.$this->tableprefix."client_group_facturation.email as group_email, "
|
|
.$this->tableprefix."client_group_facturation.siret_number as group_siret_number
|
|
FROM (".$this->tableprefix."facture
|
|
LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."facture.id_devis = ".$this->tableprefix."devis.id)
|
|
LEFT JOIN ".$this->tableprefix."lieu on ".$this->tableprefix."devis.id_lieu = ".$this->tableprefix."lieu.id
|
|
LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt on ".$this->tableprefix."devis.id_defunt = ".$this->tableprefix."defunt.id
|
|
LEFT JOIN ".$this->tableprefix."client_group_facturation on ".$this->tableprefix."client.fk_client_group_facturation_id = ".$this->tableprefix."client_group_facturation.id
|
|
WHERE YEAR(".$this->tableprefix."facture.date_paiement) = ".explode('-', string: $date)[2]." AND MONTH(".$this->tableprefix."facture.date_paiement) = ".explode('-', $date)[1]."
|
|
AND ".$this->tableprefix."client.id = ? ORDER BY date_soin ASC";
|
|
$result = $this->execSQL($sql, array($clientId));
|
|
return $result;
|
|
}
|
|
|
|
public function getCurrentMonthFactures_byClient($idNextcloud, $date, $idclient) {
|
|
$sql = "SELECT YEAR(".$this->tableprefix."facture.date_paiement) AS year, MONTH(".$this->tableprefix."facture.date_paiement) AS month,"
|
|
.$this->tableprefix."facture.id, ".$this->tableprefix."facture.user_id, ".$this->tableprefix."facture.num, ".$this->tableprefix."facture.date, "
|
|
.$this->tableprefix."devis.num as dnum,".$this->tableprefix."devis.version as adresse_devis,".$this->tableprefix."devis.comment as numero_commande, "
|
|
.$this->tableprefix."client.adresse as adresse_client, ".$this->tableprefix."devis.date as date_soin, "
|
|
.$this->tableprefix."client.mail as mail_client, "
|
|
.$this->tableprefix."devis.id_client as id_client, date_paiement, type_paiement, id_devis, ".$this->tableprefix."client.nom as nom, prenom, entreprise, "
|
|
.$this->tableprefix."lieu.id as lid, ".$this->tableprefix."lieu.nom as lieu,".$this->tableprefix."lieu.adresse as adresse_soin,"
|
|
.$this->tableprefix."defunt.id as id_defunt, ".$this->tableprefix."defunt.nom as nom_defunt,"
|
|
.$this->tableprefix."facture.version, status_paiement
|
|
FROM (".$this->tableprefix."facture
|
|
LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."facture.id_devis = ".$this->tableprefix."devis.id)
|
|
LEFT JOIN ".$this->tableprefix."lieu on ".$this->tableprefix."devis.id_lieu = ".$this->tableprefix."lieu.id
|
|
LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt on ".$this->tableprefix."devis.id_defunt = ".$this->tableprefix."defunt.id
|
|
WHERE YEAR(".$this->tableprefix."facture.date_paiement) = ".explode('-', $date)[2]." AND MONTH(".$this->tableprefix."facture.date_paiement) = ".explode('-', $date)[1]."
|
|
AND ".$this->tableprefix."client.id = ".$idclient." ORDER BY year DESC, month DESC;";
|
|
// $sql = "SELECT YEAR(".$this->tableprefix."facture.date_paiement) AS year, MONTH(".$this->tableprefix."facture.date_paiement) AS month,".$this->tableprefix."facture.id, ".$this->tableprefix."facture.user_id, ".$this->tableprefix."facture.num, ".$this->tableprefix."facture.date, ".$this->tableprefix."devis.num as dnum,".$this->tableprefix."devis.version as adresse_devis,".$this->tableprefix."client.adresse as adresse_client, ".$this->tableprefix."devis.date as date_soin, ".$this->tableprefix."devis.id_client as id_client, date_paiement, type_paiement, id_devis, nom, prenom, entreprise, ".$this->tableprefix."facture.version, status_paiement FROM (".$this->tableprefix."facture LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."facture.id_devis = ".$this->tableprefix."devis.id) LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
// WHERE YEAR(".$this->tableprefix."facture.date_paiement) = YEAR(CURRENT_DATE) AND MONTH(".$this->tableprefix."facture.date_paiement) = MONTH(CURRENT_DATE)
|
|
// ORDER BY year DESC, month DESC;";
|
|
// $sql = "SELECT YEAR(".$this->tableprefix."facture.date_paiement) AS year, MONTH(".$this->tableprefix."facture.date_paiement) AS month,".$this->tableprefix."facture.id, ".$this->tableprefix."facture.user_id, ".$this->tableprefix."facture.num, ".$this->tableprefix."facture.date, ".$this->tableprefix."devis.num as dnum,".$this->tableprefix."devis.version as adresse_devis,".$this->tableprefix."client.adresse as adresse_client, ".$this->tableprefix."devis.date as date_soin, ".$this->tableprefix."devis.id_client as id_client, date_paiement, type_paiement, id_devis, nom, prenom, entreprise, ".$this->tableprefix."facture.version, status_paiement FROM (".$this->tableprefix."facture LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."facture.id_devis = ".$this->tableprefix."devis.id) LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
// ORDER BY year DESC, month DESC;";
|
|
$result = $this->execSQL($sql, array());
|
|
return $result;
|
|
}
|
|
|
|
public function getCurrentMonthFactures($idNextcloud, $date) {
|
|
$sql = "SELECT YEAR(".$this->tableprefix."facture.date_paiement) AS year, MONTH(".$this->tableprefix."facture.date_paiement) AS month,"
|
|
.$this->tableprefix."facture.id, ".$this->tableprefix."facture.user_id, ".$this->tableprefix."facture.num, ".$this->tableprefix."facture.date, "
|
|
.$this->tableprefix."devis.num as dnum,".$this->tableprefix."devis.version as adresse_devis,".$this->tableprefix."devis.comment as numero_commande, "
|
|
.$this->tableprefix."client.adresse as adresse_client, ".$this->tableprefix."devis.date as date_soin, "
|
|
.$this->tableprefix."client.mail as mail_client, "
|
|
.$this->tableprefix."devis.id_client as id_client, date_paiement, type_paiement, id_devis, ".$this->tableprefix."client.nom as nom, prenom, entreprise, "
|
|
.$this->tableprefix."lieu.id as lid, ".$this->tableprefix."lieu.nom as lieu,".$this->tableprefix."lieu.adresse as adresse_soin,"
|
|
.$this->tableprefix."defunt.id as id_defunt, ".$this->tableprefix."defunt.nom as nom_defunt,"
|
|
.$this->tableprefix."facture.version, status_paiement
|
|
FROM (".$this->tableprefix."facture
|
|
LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."facture.id_devis = ".$this->tableprefix."devis.id)
|
|
LEFT JOIN ".$this->tableprefix."lieu on ".$this->tableprefix."devis.id_lieu = ".$this->tableprefix."lieu.id
|
|
LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt on ".$this->tableprefix."devis.id_defunt = ".$this->tableprefix."defunt.id
|
|
WHERE YEAR(".$this->tableprefix."facture.date_paiement) = ".explode('-', $date)[2]." AND MONTH(".$this->tableprefix."facture.date_paiement) = ".explode('-', $date)[1]."
|
|
ORDER BY year DESC, month DESC;";
|
|
// $sql = "SELECT YEAR(".$this->tableprefix."facture.date_paiement) AS year, MONTH(".$this->tableprefix."facture.date_paiement) AS month,".$this->tableprefix."facture.id, ".$this->tableprefix."facture.user_id, ".$this->tableprefix."facture.num, ".$this->tableprefix."facture.date, ".$this->tableprefix."devis.num as dnum,".$this->tableprefix."devis.version as adresse_devis,".$this->tableprefix."client.adresse as adresse_client, ".$this->tableprefix."devis.date as date_soin, ".$this->tableprefix."devis.id_client as id_client, date_paiement, type_paiement, id_devis, nom, prenom, entreprise, ".$this->tableprefix."facture.version, status_paiement FROM (".$this->tableprefix."facture LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."facture.id_devis = ".$this->tableprefix."devis.id) LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
// WHERE YEAR(".$this->tableprefix."facture.date_paiement) = YEAR(CURRENT_DATE) AND MONTH(".$this->tableprefix."facture.date_paiement) = MONTH(CURRENT_DATE)
|
|
// ORDER BY year DESC, month DESC;";
|
|
// $sql = "SELECT YEAR(".$this->tableprefix."facture.date_paiement) AS year, MONTH(".$this->tableprefix."facture.date_paiement) AS month,".$this->tableprefix."facture.id, ".$this->tableprefix."facture.user_id, ".$this->tableprefix."facture.num, ".$this->tableprefix."facture.date, ".$this->tableprefix."devis.num as dnum,".$this->tableprefix."devis.version as adresse_devis,".$this->tableprefix."client.adresse as adresse_client, ".$this->tableprefix."devis.date as date_soin, ".$this->tableprefix."devis.id_client as id_client, date_paiement, type_paiement, id_devis, nom, prenom, entreprise, ".$this->tableprefix."facture.version, status_paiement FROM (".$this->tableprefix."facture LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."facture.id_devis = ".$this->tableprefix."devis.id) LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
// ORDER BY year DESC, month DESC;";
|
|
$result = $this->execSQL($sql, array());
|
|
return $result;
|
|
}
|
|
|
|
public function getCurrentMonthFactures_COGF($idNextcloud, $date) {
|
|
$sql = "SELECT YEAR(".$this->tableprefix."facture.date_paiement) AS year, MONTH(".$this->tableprefix."facture.date_paiement) AS month,"
|
|
.$this->tableprefix."facture.id, ".$this->tableprefix."facture.user_id, ".$this->tableprefix."facture.num, ".$this->tableprefix."facture.date, "
|
|
.$this->tableprefix."devis.num as dnum,".$this->tableprefix."devis.version as adresse_devis,".$this->tableprefix."devis.comment as numero_commande, "
|
|
.$this->tableprefix."client.adresse as adresse_client, ".$this->tableprefix."devis.date as date_soin, "
|
|
.$this->tableprefix."devis.id_client as id_client, date_paiement, type_paiement, id_devis, ".$this->tableprefix."client.nom as nom, prenom, entreprise, "
|
|
.$this->tableprefix."lieu.id as lid, ".$this->tableprefix."lieu.nom as lieu,".$this->tableprefix."lieu.adresse as adresse_soin,"
|
|
.$this->tableprefix."defunt.id as id_defunt, ".$this->tableprefix."defunt.nom as nom_defunt,"
|
|
.$this->tableprefix."facture.version, status_paiement
|
|
FROM (".$this->tableprefix."facture
|
|
LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."facture.id_devis = ".$this->tableprefix."devis.id)
|
|
LEFT JOIN ".$this->tableprefix."lieu on ".$this->tableprefix."devis.id_lieu = ".$this->tableprefix."lieu.id
|
|
LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt on ".$this->tableprefix."devis.id_defunt = ".$this->tableprefix."defunt.id
|
|
WHERE YEAR(".$this->tableprefix."facture.date_paiement) = ".explode('-', $date)[2]." AND MONTH(".$this->tableprefix."facture.date_paiement) = ".explode('-', $date)[1]." AND LOWER(".$this->tableprefix."client.entreprise) LIKE LOWER('COGF')
|
|
ORDER BY year DESC, month DESC;";
|
|
|
|
// $sql = "SELECT YEAR(".$this->tableprefix."facture.date_paiement) AS year, MONTH(".$this->tableprefix."facture.date_paiement) AS month,".$this->tableprefix."facture.id, ".$this->tableprefix."facture.user_id, ".$this->tableprefix."facture.num, ".$this->tableprefix."facture.date, ".$this->tableprefix."devis.num as dnum,".$this->tableprefix."devis.version as adresse_devis,".$this->tableprefix."client.adresse as adresse_client, ".$this->tableprefix."devis.date as date_soin, ".$this->tableprefix."devis.id_client as id_client, date_paiement, type_paiement, id_devis, nom, prenom, entreprise, ".$this->tableprefix."facture.version, status_paiement FROM (".$this->tableprefix."facture LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."facture.id_devis = ".$this->tableprefix."devis.id) LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
// WHERE LOWER(".$this->tableprefix."client.entreprise) LIKE LOWER('COGF')
|
|
// ORDER BY year DESC, month DESC;";
|
|
|
|
$result = $this->execSQL($sql, array());
|
|
return $result;
|
|
}
|
|
|
|
public function getCurrentMonthTrajet($idNextcloud, $date) {
|
|
$sql = "SELECT t.id_nextcloud, t.date, t.distance, depart.nom as lieu_depart, arrivee.nom as lieu_arrivee,
|
|
depart_c.nom as depart_cnom, depart_c.prenom as depart_cprenoms, arrivee_c.nom as arrivee_cnom, arrivee_c.prenom as arrivee_cprenoms,
|
|
thanato.id as id_thanato, thanato.nom as nom_thanato, thanato.prenom as prenom_thanato
|
|
FROM ".$this->tableprefix."trajet t
|
|
INNER JOIN ".$this->tableprefix."lieu depart ON t.id_lieu_depart = depart.id
|
|
INNER JOIN ".$this->tableprefix."lieu arrivee ON t.id_lieu_arrivee = arrivee.id
|
|
INNER JOIN ".$this->tableprefix."client depart_c ON depart.id_client = depart_c.id
|
|
INNER JOIN ".$this->tableprefix."client arrivee_c ON arrivee.id_client = arrivee_c.id
|
|
WHERE MONTH(t.date) = ".explode('-', $date)[1].";";
|
|
|
|
$result = $this->execSQL($sql, array());
|
|
return $result;
|
|
}
|
|
|
|
public function getOneFacture($numfacture, $idNextcloud){
|
|
// $sql = "SELECT ".$this->tableprefix."facture.id," . $this->tableprefix . "facture.version," . $this->tableprefix . "facture.num, ".$this->tableprefix."facture.date, ".$this->tableprefix."devis.num as dnum, comment, date_paiement, type_paiement, id_devis, nom, prenom, entreprise FROM (".$this->tableprefix."facture LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."facture.id_devis = ".$this->tableprefix."devis.id AND ".$this->tableprefix."facture.id_nextcloud = ".$this->tableprefix."devis.id_nextcloud) LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id AND ".$this->tableprefix."devis.id_nextcloud = ".$this->tableprefix."client.id_nextcloud WHERE ".$this->tableprefix."facture.id = ? AND ".$this->tableprefix."facture.id_nextcloud = ?";
|
|
$sql = "SELECT ".$this->tableprefix."facture.id," . $this->tableprefix . "facture.version," . $this->tableprefix . "facture.num, "
|
|
.$this->tableprefix."facture.date, ".$this->tableprefix."devis.num as dnum, comment, date_paiement, type_paiement, id_devis, ".$this->tableprefix."client.nom, prenom, entreprise,"
|
|
.$this->tableprefix."devis.comment as dcomment,".$this->tableprefix."lieu.nom as lieu, ".$this->tableprefix."lieu.adresse as adresse_soin,"
|
|
.$this->tableprefix."defunt.nom as nom_defunt, "
|
|
.$this->tableprefix."devis.order_number as order_number, "
|
|
.$this->tableprefix."devis.case_number as case_number, "
|
|
.$this->tableprefix."facture_payment_type.facture_payment_type_label as facture_payment_type_label
|
|
FROM (".$this->tableprefix."facture
|
|
LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."facture.id_devis = ".$this->tableprefix."devis.id
|
|
LEFT JOIN ".$this->tableprefix."lieu on ".$this->tableprefix."devis.id_lieu = ".$this->tableprefix."lieu.id)
|
|
LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt on ".$this->tableprefix."devis.id_defunt = ".$this->tableprefix."defunt.id
|
|
LEFT JOIN ".$this->tableprefix."facture_payment_type on ".$this->tableprefix."facture.fk_facture_payment_type_id = ".$this->tableprefix."facture_payment_type.id
|
|
WHERE ".$this->tableprefix."facture.id = ?";
|
|
// return $this->execSQL($sql, array($numfacture, $idNextcloud));
|
|
return $this->execSQL($sql, array($numfacture));
|
|
}
|
|
|
|
public function getProduits($idNextcloud,$orderDirection = 'DESC'){
|
|
$sql = "SELECT
|
|
produit.id,
|
|
produit.reference,
|
|
produit.description,
|
|
produit.prix_unitaire,
|
|
produit.vat,
|
|
produit.fk_product_type_id,
|
|
product_type.id as product_type_id,
|
|
product_type.product_type_key as product_type_key,
|
|
product_type.product_type_name as product_type_name
|
|
FROM ".$this->tableprefix."produit as produit
|
|
LEFT JOIN ".$this->tableprefix."product_type as product_type on produit.fk_product_type_id = product_type.id
|
|
ORDER BY produit.id ". $orderDirection. ";";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
private function getThanatoByIdNextcloud($idNextcloud){
|
|
$sql = "SELECT *
|
|
FROM ".$this->tableprefix."thanato as thanato
|
|
WHERE LOWER(thanato.nom) = LOWER(?)
|
|
ORDER BY thanato.id ASC;";
|
|
|
|
$thanato = $this->execSQLNoJsonReturn($sql, array($idNextcloud));
|
|
if(!empty($thanato)){
|
|
return $thanato[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private function getDefuntIdsRelatedToThanato($thanatoId){
|
|
$devis = $this->getDevisMadeByAThanato($thanatoId);
|
|
$defuntIds = $this->getDefuntIdsFromDevisList($devis);
|
|
return $defuntIds;
|
|
}
|
|
|
|
private function getDefuntIdsFromDevisList($devisList){
|
|
$defuntIds = [];
|
|
foreach($devisList as $devis){
|
|
$defuntIds[] = $devis["id_defunt"];
|
|
}
|
|
return $defuntIds;
|
|
}
|
|
|
|
private function getDevisMadeByAThanato($thanatoId){
|
|
$sql = "SELECT
|
|
devis.id,
|
|
devis.id_thanato,
|
|
devis.id_defunt
|
|
FROM ".$this->tableprefix."devis as devis
|
|
WHERE devis.id_thanato = ? ;";
|
|
|
|
$devisList = $this->execSQLNoJsonReturn($sql, array($thanatoId));
|
|
return $devisList;
|
|
}
|
|
|
|
public function getDefunts($idNextcloud, $isUserThanatoOnly = false)
|
|
{
|
|
$sql = "SELECT ".$this->tableprefix."defunt.id, ".$this->tableprefix."defunt.nom, ".$this->tableprefix."defunt.date_naissance, ".$this->tableprefix."defunt.ref_pacemaker, ".$this->tableprefix."defunt.sexe, "
|
|
.$this->tableprefix."client.nom as nom_client, ".$this->tableprefix."client.id as id_client, "
|
|
.$this->tableprefix."devis.num as numero_devis, ".$this->tableprefix."devis.id as id_devis, ".$this->tableprefix."devis.user_id as user_id, "
|
|
.$this->tableprefix."devis.date as devis_date, "
|
|
.$this->tableprefix."lieu.id as lid, ".$this->tableprefix."lieu.nom as lieu
|
|
FROM ".$this->tableprefix."defunt
|
|
LEFT JOIN ".$this->tableprefix."devis ON ".$this->tableprefix."devis.id_defunt = ".$this->tableprefix."defunt.id
|
|
LEFT JOIN ".$this->tableprefix."client ON ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
LEFT JOIN ".$this->tableprefix."lieu ON ".$this->tableprefix."devis.id_lieu = ".$this->tableprefix."lieu.id";
|
|
|
|
$conditions = [];
|
|
if($isUserThanatoOnly){
|
|
$thanato = $this->getThanatoByIdNextcloud($idNextcloud);
|
|
if($thanato == null){
|
|
return json_encode([]);
|
|
}
|
|
$thanatoId = $thanato["id"];
|
|
$defuntsIdRelatedToThanato = $this->getDefuntIdsRelatedToThanato($thanatoId);
|
|
if(empty($defuntsIdRelatedToThanato)){
|
|
return json_encode([]);
|
|
}
|
|
$defuntListConditionPlaceholder = implode(',', array_fill(0, count($defuntsIdRelatedToThanato), '?'));
|
|
$conditions = $defuntsIdRelatedToThanato;
|
|
$sql .= " WHERE ".$this->tableprefix."defunt.id IN ($defuntListConditionPlaceholder)";
|
|
}
|
|
$sql .= " ORDER BY ".$this->tableprefix."defunt.id DESC;";
|
|
|
|
$defuntsList = $this->execSQLNoJsonReturn($sql,$conditions);
|
|
foreach($defuntsList as &$defunt){
|
|
$defunt["product_cover_description"] = null;
|
|
$defuntHasDevis = $defunt["id_devis"] != null;
|
|
if($defuntHasDevis){
|
|
$productCover = $this->getProductCoverByDevisId($defunt["id_devis"]);
|
|
if($productCover != null){
|
|
$defunt["product_cover_description"] = $productCover["description"];
|
|
}
|
|
}
|
|
}
|
|
return json_encode($defuntsList);
|
|
}
|
|
|
|
public function getUnusedDefunts($idNextcloud) {
|
|
$sql = "SELECT ".$this->tableprefix."defunt.id, ".$this->tableprefix."defunt.nom, ".$this->tableprefix."defunt.date_naissance, ".$this->tableprefix."defunt.ref_pacemaker, ".$this->tableprefix."defunt.sexe,"
|
|
.$this->tableprefix."devis.user_id as user_id
|
|
FROM ".$this->tableprefix."defunt
|
|
LEFT JOIN ".$this->tableprefix."devis ON ".$this->tableprefix."devis.id_defunt = ".$this->tableprefix."defunt.id
|
|
WHERE ".$this->tableprefix."devis.id_defunt IS NULL
|
|
ORDER BY ".$this->tableprefix."defunt.id DESC;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function getOneDevis($numdevis,$idNextcloud){
|
|
$sql = "SELECT ".$this->tableprefix."devis.id as devisid, ".$this->tableprefix."devis.version, ".$this->tableprefix."devis.comment, ".$this->tableprefix."devis.date, num,"
|
|
.$this->tableprefix."devis.id_nextcloud as didnextcloud,".$this->tableprefix."devis.id_client, id_lieu, id_thanato,case_number,order_number,"
|
|
.$this->tableprefix."defunt.id as id_defunt, ".$this->tableprefix."defunt.nom as nom_defunt,"
|
|
.$this->tableprefix."client.id as clientid, ".$this->tableprefix."client.nom, "
|
|
.$this->tableprefix."client.prenom, legal_one, entreprise, telephone, mail, ".$this->tableprefix."client.adresse,"
|
|
.$this->tableprefix."lieu.nom as lieu, ".$this->tableprefix."lieu.adresse as adresse_soin ,"
|
|
.$this->tableprefix."lieu.portal_code as portal_code,"
|
|
.$this->tableprefix."lieu.alarm_code as alarm_code,"
|
|
.$this->tableprefix."lieu.funeral_code as funeral_code,"
|
|
.$this->tableprefix."thanato.nom as nom_thanato, ".$this->tableprefix."thanato.prenom as prenom_thanato
|
|
FROM ".$this->tableprefix."devis
|
|
LEFT JOIN ".$this->tableprefix."client on id_client = ".$this->tableprefix."client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt on id_defunt = ".$this->tableprefix."defunt.id
|
|
LEFT JOIN ".$this->tableprefix."lieu on ".$this->tableprefix."devis.id_lieu = ".$this->tableprefix."lieu.id
|
|
LEFT JOIN ".$this->tableprefix."thanato on ".$this->tableprefix."devis.id_thanato = ".$this->tableprefix."thanato.id
|
|
WHERE ".$this->tableprefix."devis.id = ?";
|
|
return $this->execSQL($sql, array($numdevis));
|
|
}
|
|
|
|
public function getOneDefunt($numdefunt,$idNextcloud,$includeDefuntProductCover = false){
|
|
$sql = "SELECT ".$this->tableprefix."defunt.id, ".$this->tableprefix."devis.version, ".$this->tableprefix."devis.comment, ".$this->tableprefix."devis.date, num,"
|
|
.$this->tableprefix."devis.id as id_devis,".$this->tableprefix."devis.id_client, id_lieu, id_thanato,".$this->tableprefix."devis.user_id as user_id, "
|
|
.$this->tableprefix."defunt.id as id_defunt, ".$this->tableprefix."defunt.nom as nom_defunt,".$this->tableprefix."defunt.date_naissance,".$this->tableprefix."defunt.sexe,".$this->tableprefix."defunt.ref_pacemaker,"
|
|
.$this->tableprefix."defunt.date as date_defunt,"
|
|
.$this->tableprefix."defunt.heure_debut,"
|
|
.$this->tableprefix."defunt.heure_fin,"
|
|
.$this->tableprefix."defunt.corpulence,"
|
|
.$this->tableprefix."defunt.rigidite,"
|
|
.$this->tableprefix."defunt.lividite,"
|
|
.$this->tableprefix."defunt.observations_corps,"
|
|
.$this->tableprefix."defunt.acces,"
|
|
.$this->tableprefix."defunt.acces_recherche,"
|
|
.$this->tableprefix."defunt.acces_etat,"
|
|
.$this->tableprefix."defunt.injection,"
|
|
.$this->tableprefix."defunt.injection_diffusion,"
|
|
.$this->tableprefix."defunt.injection_qte,"
|
|
.$this->tableprefix."defunt.preinjection,"
|
|
.$this->tableprefix."defunt.preinjection_qte,"
|
|
.$this->tableprefix."defunt.coinjection,"
|
|
.$this->tableprefix."defunt.coinjection_qte,"
|
|
.$this->tableprefix."defunt.drainage,"
|
|
.$this->tableprefix."defunt.drainage_qte,"
|
|
.$this->tableprefix."defunt.drainage_etat,"
|
|
.$this->tableprefix."defunt.ponction,"
|
|
.$this->tableprefix."defunt.ponction_qte,"
|
|
.$this->tableprefix."defunt.cavite,"
|
|
.$this->tableprefix."defunt.cavite_qte,"
|
|
.$this->tableprefix."defunt.desinfection,"
|
|
.$this->tableprefix."defunt.lavage,"
|
|
.$this->tableprefix."defunt.rasage,"
|
|
.$this->tableprefix."defunt.presentation_cosmetique,"
|
|
.$this->tableprefix."defunt.presentation_sur,"
|
|
.$this->tableprefix."defunt.observations_generales,"
|
|
.$this->tableprefix."defunt.product_photo,"
|
|
.$this->tableprefix."defunt.product_photo_name,"
|
|
.$this->tableprefix."client.id as clientid, ".$this->tableprefix."client.nom, ".$this->tableprefix."client.prenom, legal_one, entreprise, telephone, mail, ".$this->tableprefix."client.adresse,"
|
|
.$this->tableprefix."lieu.nom as lieu, ".$this->tableprefix."lieu.adresse as adresse_soin ,"
|
|
.$this->tableprefix."thanato.nom as nom_thanato, ".$this->tableprefix."thanato.prenom as prenom_thanato, "
|
|
.$this->tableprefix."thanato.date_habilitation, "
|
|
.$this->tableprefix."thanato.reference as reference_habilitation, "
|
|
.$this->tableprefix."lieu.adresse as adresse_lieu, "
|
|
.$this->tableprefix."lieu.nom as nom_lieu
|
|
FROM ".$this->tableprefix."defunt
|
|
LEFT JOIN ".$this->tableprefix."devis on ".$this->tableprefix."devis.id_defunt = ".$this->tableprefix."defunt.id
|
|
LEFT JOIN ".$this->tableprefix."client on ".$this->tableprefix."devis.id_client = ".$this->tableprefix."client.id
|
|
LEFT JOIN ".$this->tableprefix."lieu on ".$this->tableprefix."devis.id_lieu = ".$this->tableprefix."lieu.id
|
|
LEFT JOIN ".$this->tableprefix."thanato on ".$this->tableprefix."devis.id_thanato = ".$this->tableprefix."thanato.id
|
|
WHERE ".$this->tableprefix."defunt.id = ?";
|
|
|
|
$defunts = $this->execSQLNoJsonReturn($sql,[$numdefunt]);
|
|
if($includeDefuntProductCover){
|
|
foreach($defunts as &$defunt){
|
|
$defunt["product_cover_id"] = null;
|
|
$defuntHasDevis = $defunt["id_devis"] != null;
|
|
if($defuntHasDevis){
|
|
$productCover = $this->getProductCoverByDevisId($defunt["id_devis"]);
|
|
if($productCover != null){
|
|
$defunt["product_cover_id"] = $productCover["produit_id"];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return json_encode($defunts);
|
|
}
|
|
|
|
public function getListProduit($numdevis, $idNextcloud){
|
|
$sql = "SELECT ".
|
|
$this->tableprefix."produit.id as pid,"
|
|
.$this->tableprefix."produit_devis.id as pdid, reference, description,"
|
|
.$this->tableprefix."produit_devis.comment, quantite, prix_unitaire, "
|
|
.$this->tableprefix."devis.id_client
|
|
FROM ".$this->tableprefix."produit, ".$this->tableprefix."devis, ".$this->tableprefix."produit_devis
|
|
WHERE ".$this->tableprefix."produit.id = produit_id AND ".$this->tableprefix."devis.id = devis_id AND ".$this->tableprefix."devis.id = ?";
|
|
|
|
$produits = $this->execSQLNoJsonReturn($sql,[$numdevis]);
|
|
|
|
if(!empty($produits)){
|
|
$clientId = $produits[0]["id_client"];
|
|
$client = $this->getClientById($clientId);
|
|
foreach($produits as &$produit){
|
|
$productPrice = $this->getProductPriceByClientGroupId($client['fk_client_group_id'],$produit['pid']);
|
|
$produit['prix_unitaire'] = $productPrice ?? $produit['prix_unitaire'];
|
|
}
|
|
}
|
|
return json_encode($produits);
|
|
}
|
|
|
|
public function getListArticle($numdevis, $idNextcloud) {
|
|
$sql = "SELECT ".$this->tableprefix."article.id as aid,".$this->tableprefix."article_devis.id as adid, reference, description,".$this->tableprefix."article_devis.comment, quantite, prix_unitaire FROM ".$this->tableprefix."article, ".$this->tableprefix."devis, ".$this->tableprefix."article_devis WHERE ".$this->tableprefix."article.id = article_id AND ".$this->tableprefix."devis.id = devis_id AND ".$this->tableprefix."devis.id = ?";
|
|
return $this->execSQL($sql, array($numdevis));
|
|
}
|
|
|
|
public function getArticles($idNextcloud){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."article";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
private function getFunctionCall(){
|
|
$trace = debug_backtrace();
|
|
return $trace[2]['function'];
|
|
}
|
|
|
|
public function getListObservations($numdefunt, $idNextcloud) {
|
|
$sql = "SELECT ".$this->tableprefix."obs_defunt.id as odid, designation, commentaire FROM "
|
|
.$this->tableprefix."obs_defunt, ".$this->tableprefix."defunt
|
|
WHERE ".$this->tableprefix."defunt.id = defunt_id AND ".$this->tableprefix."defunt.id = ?";
|
|
return $this->execSQL($sql, array($numdefunt));
|
|
}
|
|
|
|
public function getListBijoux($numdefunt, $idNextcloud) {
|
|
$sql = "SELECT ".$this->tableprefix."bijou_defunt.id as bdid, designation, commentaire,photo,photo_name,taker_name FROM "
|
|
.$this->tableprefix."bijou_defunt, ".$this->tableprefix."defunt
|
|
WHERE ".$this->tableprefix."defunt.id = defunt_id AND ".$this->tableprefix."defunt.id = ?";
|
|
return $this->execSQL($sql, array($numdefunt));
|
|
}
|
|
|
|
public function getListHypodermiques($numdefunt, $idNextcloud) {
|
|
$sql = "SELECT ".$this->tableprefix."hypo_defunt.id as hdid, designation, qte, endroit FROM "
|
|
.$this->tableprefix."hypo_defunt, ".$this->tableprefix."defunt
|
|
WHERE ".$this->tableprefix."defunt.id = defunt_id AND ".$this->tableprefix."defunt.id = ?";
|
|
return $this->execSQL($sql, array($numdefunt));
|
|
}
|
|
|
|
/**
|
|
* INSERT client
|
|
* @$idnextcloud
|
|
*/
|
|
public function insertClient($idNextcloud){
|
|
$sql = "INSERT INTO `".$this->tableprefix."client` (`id_nextcloud`,`nom`,`prenom`,`legal_one`,`entreprise`,`telephone`,`mail`,`adresse`) VALUES (?,?,?,?,?,?,?,?)";
|
|
$this->execSQLNoData($sql,array($idNextcloud,
|
|
$this->l->t('Last name'),
|
|
$this->l->t('First name'),
|
|
$this->l->t('Limited company'),
|
|
$this->l->t('Company'),
|
|
$this->l->t('Phone number'),
|
|
$this->l->t('Email'),
|
|
$this->l->t('Address')
|
|
)
|
|
);
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public function insertThanatopracteur($idNextcloud) {
|
|
$sql = "INSERT INTO `".$this->tableprefix."thanato` (`id_nextcloud`,`nom`,`prenom`,`reference`,`date_habilitation`) VALUES (?,?,?,?,NOW())";
|
|
$this->execSQLNoData($sql,array($idNextcloud,
|
|
$this->l->t('Last name'),
|
|
$this->l->t('First name'),
|
|
'reference',
|
|
)
|
|
);
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Insert lieu
|
|
*/
|
|
public function insertTrajet($id_thanato, $mois, $annee, $idNextcloud){
|
|
$last=0;
|
|
$last = $this->lastinsertid("trajet", $idNextcloud) + 1;
|
|
|
|
// $sql = "INSERT INTO `".$this->tableprefix."trajet` ( `id_nextcloud`,
|
|
// `date`,
|
|
// `annee`,
|
|
// `mois`,
|
|
// `id_client`,
|
|
// `id_lieu_depart`,
|
|
// `id_lieu_arrivee`,
|
|
// `distance`,
|
|
// `user_id`
|
|
// )
|
|
// VALUES (?,NOW(),?,?,0,0,0,0,?);";
|
|
$sql = "INSERT INTO `".$this->tableprefix."trajet` ( `id_nextcloud`,
|
|
`date`,
|
|
`annee`,
|
|
`mois`,
|
|
`distance`,
|
|
`id_thanato`,
|
|
`user_id`
|
|
)
|
|
VALUES (?,NOW(),?,?,0,?,?);";
|
|
$this->execSQLNoData($sql, array($idNextcloud,$annee, $mois, $id_thanato, $last));
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Insert lieu
|
|
*/
|
|
public function insertTrajetdetails($numtrajet, $idNextcloud){
|
|
$last=0;
|
|
$last = $this->lastinsertid("ligne_trajet", $idNextcloud) + 1;
|
|
|
|
$rang = $this->get_last_rang_trajetdetails($numtrajet, $idNextcloud);
|
|
|
|
$current_trajet = json_decode($this->getOneTrajet($numtrajet, $idNextcloud))[0];
|
|
|
|
$trajetdetails = json_decode($this->getTrajetsdetails_orderByDate($numtrajet, $idNextcloud));
|
|
|
|
$sql = "INSERT INTO `".$this->tableprefix."ligne_trajet` ( `id_nextcloud`,
|
|
`date`,
|
|
`id_devis`,
|
|
`id_lieu`,
|
|
`id_trajet`,
|
|
`rang`,
|
|
`commentaire`,
|
|
`source`,
|
|
`user_id`
|
|
)
|
|
VALUES (?,?,0,0,?,?,'','lieu',?);";
|
|
$this->execSQLNoData($sql, array($idNextcloud,$trajetdetails[sizeof($trajetdetails)-1]->date,$numtrajet,$rang+1,$last));
|
|
return true;
|
|
}
|
|
|
|
public function insertTrajetdetails_h2f($numtrajet, $date, $idNextcloud,$lieuSiege = "siege",$devisId = 0){
|
|
$lieuSiege = strtolower($lieuSiege);
|
|
$last=0;
|
|
$last = $this->lastinsertid("ligne_trajet", $idNextcloud) + 1;
|
|
|
|
$rang = $this->get_last_rang_trajetdetails($numtrajet, $idNextcloud);
|
|
|
|
$current_trajet = json_decode($this->getOneTrajet($numtrajet, $idNextcloud))[0];
|
|
|
|
$trajetdetails = json_decode($this->getTrajetsdetails_orderByDate($numtrajet, $idNextcloud));
|
|
|
|
$sql_h2f = "SELECT * FROM ".$this->tableprefix."lieu WHERE LOWER(".$this->tableprefix."lieu.nom) = ?";
|
|
$response_h2f = $this->execSQL($sql_h2f, array($lieuSiege));
|
|
$h2f = json_decode($response_h2f)[0];
|
|
|
|
$id_h2f = ($h2f!=NULL)?$h2f->id:0;
|
|
|
|
$sql = "INSERT INTO `".$this->tableprefix."ligne_trajet` ( `id_nextcloud`,
|
|
`date`,
|
|
`id_devis`,
|
|
`id_lieu`,
|
|
`id_trajet`,
|
|
`rang`,
|
|
`commentaire`,
|
|
`source`,
|
|
`user_id`
|
|
)
|
|
VALUES (?,?,?,?,?,?,'','siege',?);";
|
|
$this->execSQLNoData($sql, array($idNextcloud,$date,$devisId,$id_h2f,$numtrajet,$rang+1,$last));
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Insert lieu
|
|
*/
|
|
public function insertTrajetdetails_byDevis($numtrajet, $devis, $idNextcloud){
|
|
$last=0;
|
|
$last = $this->lastinsertid("ligne_trajet", $idNextcloud) + 1;
|
|
|
|
$rang = $this->get_last_rang_trajetdetails($numtrajet, $idNextcloud);
|
|
|
|
$current_trajet = json_decode($this->getOneTrajet($numtrajet, $idNextcloud))[0];
|
|
|
|
$trajetdetails = json_decode($this->getTrajetsdetails_orderByDate($numtrajet, $idNextcloud));
|
|
|
|
$id_client = ($devis->id_client != NULL)?$devis->id_client:0;
|
|
$id_lieu = ($devis->id_lieu != NULL)?$devis->id_lieu:0;
|
|
|
|
$sql = "INSERT INTO `".$this->tableprefix."ligne_trajet` ( `id_nextcloud`,
|
|
`date`,
|
|
`id_devis`,
|
|
`id_client`,
|
|
`id_lieu`,
|
|
`id_trajet`,
|
|
`rang`,
|
|
`commentaire`,
|
|
`source`,
|
|
`user_id`
|
|
)
|
|
VALUES (?,?,?,?,?,?,?,'','devis',?);";
|
|
$this->execSQLNoData($sql, array($idNextcloud,$devis->date,$devis->devisid,$id_client,$id_lieu,$numtrajet,$rang+1,$last));
|
|
return true;
|
|
}
|
|
|
|
public function get_last_rang_trajetdetails($numtrajet, $idNextcloud) {
|
|
$trajetdetails = json_decode($this->getTrajetsdetails($numtrajet, $idNextcloud));
|
|
$rang_max = 0;
|
|
foreach ($trajetdetails as $key => $details) {
|
|
if($rang_max<=$details->rang) $rang_max = $details->rang;
|
|
}
|
|
return $rang_max;
|
|
}
|
|
|
|
/**
|
|
* Insert Defunt
|
|
*/
|
|
public function insertDefunt($idNextcloud) {
|
|
$sql = "INSERT INTO `".$this->tableprefix."defunt` (
|
|
`id_nextcloud`, `nom`, `sexe`, `date_naissance`, `ref_pacemaker`, `date`,
|
|
`corpulence`, `observations_corps`, `observations_generales`
|
|
) VALUES (?,?,?,?,?,NOW(),?,?,?);";
|
|
$this->execSQLNoData($sql, array($idNextcloud, 'Nom du défunt', 'm', '1973-11-11', '', '', '', ''));
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Insert Defunt
|
|
*/
|
|
public function insertDefuntByName($name) {
|
|
$sql = "INSERT INTO `".$this->tableprefix."defunt` (
|
|
`id_nextcloud`, `nom`, `sexe`, `date_naissance`, `ref_pacemaker`, `date`,
|
|
`corpulence`, `observations_corps`, `observations_generales`
|
|
) VALUES (?,?,?,?,?,NOW(),?,?,?);";
|
|
$this->execSQLNoData($sql, array('admin',$name, 'm', '1973-11-11', '', '', '', ''));
|
|
return true;
|
|
}
|
|
|
|
public function insertDefuntByNameAndReturnId($name) {
|
|
$this->insertDefuntByName($name);
|
|
return $this->getLastDefuntIdByName($name);
|
|
}
|
|
|
|
public function getLastDefuntIdByName( $name ) {
|
|
$sql = "SELECT max(id) as LAST_INSERT_ID
|
|
FROM ".$this->tableprefix."defunt
|
|
WHERE nom = ?";
|
|
$res = $this->execSQLNoJsonReturn($sql,array($name));
|
|
if($res){
|
|
return $res[0]['LAST_INSERT_ID'];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getLastClientIdByName($name) {
|
|
$sql = "SELECT max(id) as LAST_INSERT_ID
|
|
FROM ".$this->tableprefix."client
|
|
WHERE nom = ?";
|
|
$res = $this->execSQLNoJsonReturn($sql,array($name));
|
|
if($res){
|
|
return $res[0]['LAST_INSERT_ID'];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getLastLocationIdByName($name) {
|
|
$sql = "SELECT max(id) as LAST_INSERT_ID
|
|
FROM ".$this->tableprefix."lieu
|
|
WHERE nom = ?";
|
|
$res = $this->execSQLNoJsonReturn($sql,array($name));
|
|
if($res){
|
|
return $res[0]['LAST_INSERT_ID'];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getOrCreateThanatoIdByLastName($name){
|
|
$thanatoId = $this->getLastThanatoIdByName($name);
|
|
if($thanatoId == null){
|
|
$this->createThanatoByLastName($name);
|
|
$thanatoId = $this->getLastThanatoIdByName($name);
|
|
}
|
|
return $thanatoId;
|
|
}
|
|
|
|
private function createThanatoByLastName($name){
|
|
$idNextcloud = "admin";
|
|
$sql = "INSERT INTO `".$this->tableprefix."thanato` (`id_nextcloud`,`nom`,`prenom`,`reference`,`date_habilitation`) VALUES (?,?,?,?,NOW())";
|
|
$this->execSQLNoData($sql,array($idNextcloud,
|
|
$name,
|
|
$this->l->t('First name'),
|
|
'reference',
|
|
)
|
|
);
|
|
return true;
|
|
}
|
|
|
|
public function getLastThanatoIdByName($name) {
|
|
$sql = "SELECT max(id) as LAST_INSERT_ID
|
|
FROM ".$this->tableprefix."thanato
|
|
WHERE nom = ?";
|
|
$res = $this->execSQLNoJsonReturn($sql,array($name));
|
|
if($res){
|
|
return $res[0]['LAST_INSERT_ID'];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getFirstThanatoIdByName($name) {
|
|
$sql = "SELECT min(id) as FIRST_INSERT_ID
|
|
FROM ".$this->tableprefix."thanato
|
|
WHERE nom = ?";
|
|
$res = $this->execSQLNoJsonReturn($sql,array($name));
|
|
if($res){
|
|
return $res[0]['FIRST_INSERT_ID'];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getThanatoIdByUserUuid($userUuid){
|
|
$sql = "SELECT min(id) as FIRST_INSERT_ID
|
|
FROM ".$this->tableprefix."thanato
|
|
WHERE fk_user_uuid = ?";
|
|
$res = $this->execSQLNoJsonReturn($sql,array($userUuid));
|
|
if($res){
|
|
return $res[0]['FIRST_INSERT_ID'];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Insert lieu
|
|
*/
|
|
public function insertLieu($idNextcloud){
|
|
$last=0;
|
|
$last = $this->lastinsertid("lieu", $idNextcloud) + 1;
|
|
|
|
// $sql = "INSERT INTO `".$this->tableprefix."lieu` ( `id_nextcloud`,
|
|
// `nom`,
|
|
// `date`,
|
|
// `id_client`,
|
|
// `adresse`,
|
|
// `latitude`,
|
|
// `longitude`,
|
|
// `distance`,
|
|
// `depart`,
|
|
// `arrivee`,
|
|
// `user_id`
|
|
// )
|
|
// VALUES (?,?,NOW(),0,'',?,?,0,'','',?);";
|
|
|
|
$sql = "INSERT INTO `".$this->tableprefix."lieu` ( `id_nextcloud`,
|
|
`nom`,
|
|
`adresse`,
|
|
`latitude`,
|
|
`longitude`
|
|
)
|
|
VALUES (?,?,'',?,?);";
|
|
$this->execSQLNoData($sql, array($idNextcloud,"Ajouter un lieu",'46.73','1.56'));
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Insert quote
|
|
*/
|
|
public function insertDevis($idNextcloud){
|
|
$last=0;
|
|
$last = $this->lastinsertid("devis", $idNextcloud) + 1;
|
|
|
|
$sql = "INSERT INTO `".$this->tableprefix."devis` ( `date`,
|
|
`id_nextcloud`,
|
|
`num`,
|
|
`id_defunt`,
|
|
`id_client`,
|
|
`id_thanato`,
|
|
`version`,
|
|
`id_lieu`,
|
|
`mentions`,
|
|
`comment`,
|
|
`user_id`
|
|
)
|
|
VALUES (NOW(),?,?,0,0,0,?,0,?,?,?);";
|
|
$this->execSQLNoData($sql, array(
|
|
$idNextcloud,
|
|
"Nom du defunt",
|
|
'Ajouter un lieu',
|
|
DevisMentionConstant::NEW,
|
|
'',
|
|
$last
|
|
));
|
|
return true;
|
|
}
|
|
|
|
private function getLastDevisNumberByMonthAndYear($month,$year){
|
|
$sql = "SELECT
|
|
max(devis.devis_number) as LAST_DEVIS_NUMBER, devis.date FROM "
|
|
. $this->tableprefix."devis as devis
|
|
WHERE YEAR(devis.date) = ? AND
|
|
MONTH(devis.date) = ?;";
|
|
$res = $this->execSQLNoJsonReturn($sql,array($year,$month));
|
|
$lastNumber = 0;
|
|
if(!empty($res)){
|
|
$lastNumber = $res[0]['LAST_DEVIS_NUMBER'];
|
|
}
|
|
return $lastNumber;
|
|
}
|
|
|
|
public function insertDevisFromVCalendarAndReturnId($thanatoId,$clientId,$locationId,$defuntId,$calendarUuid = self::DEFAULT_CALENDAR_UUID_FOR_DEVIS,$date = null,$devisComment = "Commentaire"){
|
|
|
|
if($date == null){
|
|
$dateTime = new Datetime();
|
|
$date = $dateTime->format('Y-m-d');
|
|
}
|
|
else{
|
|
$dateTime = new DateTime($date);
|
|
}
|
|
$idNextcloud = "admin";
|
|
$last=0;
|
|
$last = $this->lastinsertid("devis", "admin") + 1;
|
|
|
|
$dateMonth = $dateTime->format('m');
|
|
$dateYear = $dateTime->format('Y');
|
|
|
|
$devisLastNumber = $this->getLastDevisNumberByMonthAndYear($dateMonth,$dateYear);
|
|
$devisNumber = $devisLastNumber + 1;
|
|
$devisFullNumber = DateHelpers::GetFullFactureOrDevisNumberByDate($dateTime,$devisNumber,'DEV');
|
|
|
|
$sql = "INSERT INTO `".$this->tableprefix."devis` ( `date`,
|
|
`id_nextcloud`,
|
|
`num`,
|
|
`id_defunt`,
|
|
`id_client`,
|
|
`id_thanato`,
|
|
`version`,
|
|
`id_lieu`,
|
|
`mentions`,
|
|
`comment`,
|
|
`user_id`,
|
|
`devis_number`,
|
|
`devis_full_number`
|
|
)
|
|
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?);";
|
|
$this->execSQLNoData($sql, array(
|
|
$date,
|
|
$idNextcloud,
|
|
$calendarUuid,
|
|
$defuntId,
|
|
$clientId,
|
|
$thanatoId,
|
|
$this->l->t('New'),
|
|
$locationId,
|
|
DevisMentionConstant::NEW,
|
|
$devisComment,
|
|
$last,
|
|
$devisNumber,
|
|
$devisFullNumber
|
|
)
|
|
);
|
|
|
|
return $this->getLastDevisIdFromVCalendarProperty($thanatoId,$clientId,$locationId,$defuntId,$calendarUuid);
|
|
}
|
|
|
|
public function getLastDevisIdFromVCalendarProperty($thanatoId,$clientId,$locationId,$defuntId,$calendarUuid=self::DEFAULT_CALENDAR_UUID_FOR_DEVIS){
|
|
$sql = "SELECT max(id) as LAST_INSERT_ID
|
|
FROM ".$this->tableprefix."devis
|
|
WHERE id_defunt = ? AND id_lieu = ? AND id_client = ? AND id_thanato = ? AND num = ?";
|
|
$res = $this->execSQLNoJsonReturn($sql,array(
|
|
$defuntId,
|
|
$locationId,
|
|
$clientId,
|
|
$thanatoId,
|
|
$calendarUuid
|
|
));
|
|
if($res){
|
|
return $res[0]['LAST_INSERT_ID'];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getArticlesIdFromArticlesNameArray(array $articles): array {
|
|
$articleIds = [];
|
|
foreach ($articles as $article) {
|
|
$sql = "SELECT id FROM ".$this->tableprefix."produit WHERE description = ?";
|
|
$res = $this->execSQLNoJsonReturn($sql, array($article));
|
|
if ($res) {
|
|
$articleIds[] = $res[0]['id'];
|
|
}
|
|
}
|
|
return $articleIds;
|
|
}
|
|
|
|
public function insertDevisArticleFromDevisIdAndArticlesIdArray($devisId, $articleIds) {
|
|
if (!empty($articleIds)) {
|
|
$idNextcloud = "admin";
|
|
foreach ($articleIds as $articleId) {
|
|
$this->insertDevisArticle(devisId: $devisId, articleId: $articleId,idNextcloud: $idNextcloud);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private function insertDevisArticle($devisId,$articleId,$idNextcloud){
|
|
$sql = "INSERT INTO ".$this->tableprefix."produit_devis (devis_id, produit_id, quantite, discount, comment,id_nextcloud) VALUES (?, ?, 1, 0, '-',?)";
|
|
$this->execSQLNoData($sql, array($devisId, $articleId,$idNextcloud));
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Insert invoice
|
|
*/
|
|
public function insertFacture($idNextcloud){
|
|
$last = 0;
|
|
$last = $this->lastNumFacture($idNextcloud);
|
|
$pref = $this->execSQLNoJsonReturn("SELECT * FROM ".$this->tableprefix."configuration WHERE id_nextcloud LIKE ?",array($idNextcloud));
|
|
$sql = "INSERT INTO `".$this->tableprefix."facture` (`date`,`id_nextcloud`,`num`,`date_paiement`,`type_paiement`,`id_devis`,`user_id`, `version`,`facture_number`) VALUES (?,?,?,NOW(),?,0,?,?,?);";
|
|
$date_temp = new DateTime();
|
|
$date = $date_temp->format('Y-m-d');
|
|
$dateMonth = $date_temp->format('m');
|
|
$dateYear = $date_temp->format('Y');
|
|
$factureLastNumber = $this->getLastFactureNumberByMonthAndYear($dateMonth,$dateYear);
|
|
$factureNumber = $factureLastNumber + 1;
|
|
$factureFullNumber = DateHelpers::GetFullFactureOrDevisNumberByDate($date_temp,$factureNumber,'FAC');
|
|
|
|
$datesplit = explode('-', $date);
|
|
$this->execSQLNoData($sql, array($date , $idNextcloud, $factureFullNumber,"Comptant",$last+1,"Ajouter un lieu",$factureNumber));
|
|
|
|
return $last;
|
|
}
|
|
|
|
private function getDevisIdListFilteredByMentionAndDevisListId($mentionsFilter,$devisListId){
|
|
if (empty($devisListId)) {
|
|
return [];
|
|
}
|
|
$placeholders = implode(',', array_fill(0, count($devisListId), '?'));
|
|
$mentionsFilterPlaceholders = implode(',', array_fill(0, count($mentionsFilter), '?'));
|
|
$sql = "SELECT devis.id as id,devis.date as devis_date
|
|
FROM ".$this->tableprefix."devis as devis
|
|
WHERE devis.id IN ($placeholders) AND
|
|
mentions IN ($mentionsFilterPlaceholders)";
|
|
|
|
$result = $this->execSQLNoJsonReturn($sql,array_merge(
|
|
$devisListId,
|
|
$mentionsFilter));
|
|
return $result;
|
|
}
|
|
|
|
public function insertFactureForeEachDevisId($idNextCloud,$devisIdArray,$facturationDate = null){
|
|
$mentionsFilter = [
|
|
DevisMentionConstant::NEW,
|
|
DevisMentionConstant::MENTION
|
|
];
|
|
$devisIdListFiltered = $this->getDevisIdListFilteredByMentionAndDevisListId($mentionsFilter,$devisIdArray);
|
|
$factureIdsGenerated = [];
|
|
foreach($devisIdListFiltered as $devis){
|
|
$factureId = $this->insertFactureByDevisId($idNextCloud,$devis['id'],$devis['devis_date'],$facturationDate);
|
|
$factureIdsGenerated[] = $factureId;
|
|
}
|
|
return $factureIdsGenerated;
|
|
}
|
|
|
|
/**
|
|
* Insert invoice with a devis
|
|
*/
|
|
public function insertFactureByDevisId($idNextcloud,$devisId,$devisDate = null,$facturationDate = null){
|
|
if($facturationDate == null || $facturationDate == ""){
|
|
$datetimeNow = new Datetime();
|
|
$facturationDate = DateHelpers::GetLastDayOfTheMonthOfADate($datetimeNow);
|
|
$facturationDate = $facturationDate->format('Y-m-d');
|
|
}
|
|
else{
|
|
$facturationDate = Datetime::createFromFormat('Y-m-d',$facturationDate);
|
|
$facturationDate = $facturationDate->format('Y-m-d');
|
|
}
|
|
$devisDatetime = new Datetime();
|
|
if($devisDate != null){
|
|
$devisDatetime = new Datetime($devisDate);
|
|
}
|
|
$factureDate = $devisDatetime->format('Y-m-d');
|
|
$factureNumber = $this->getFactureNumberByDate($devisDatetime);
|
|
$fullFactureNumber = DateHelpers::GetFullFactureOrDevisNumberByDate($devisDatetime,$factureNumber,"FAC");
|
|
$last = 0;
|
|
$last = $this->lastNumFacture($idNextcloud);
|
|
$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,
|
|
$facturationDate,
|
|
"Comptant",
|
|
$devisId,
|
|
$last+1,
|
|
"Ajouter un lieu",
|
|
$factureNumber)
|
|
);
|
|
|
|
$factureId = $this->getFactureIdByDevisId($devisId);
|
|
//update devis status
|
|
$this->gestion_update('devis','mentions',DevisMentionConstant::FACTURED_FORMATTED,$devisId,$idNextcloud);
|
|
return $factureId;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
|
|
|
|
public function insertProduit($idNextcloud){
|
|
$sql = "INSERT INTO `".$this->tableprefix."produit` (`id_nextcloud`,`reference`,`description`,`prix_unitaire`) VALUES (?,?,?,0);";
|
|
$this->execSQLNoData($sql, array($idNextcloud,$this->l->t('Reference'),$this->l->t('Designation')));
|
|
return true;
|
|
}
|
|
|
|
public function insertProduitDevis($id,$idNextcloud){
|
|
$res = $this->searchMaxIdProduit($idNextcloud);
|
|
$sql = "INSERT INTO `".$this->tableprefix."produit_devis` (`devis_id`, `id_nextcloud`,`produit_id`,`quantite`,`discount`) VALUES (?,?,?,1,0);";
|
|
$this->execSQLNoData($sql, array($id,$idNextcloud,($res[0]['id']==NULL)?0:$res[0]['id']));
|
|
return true;
|
|
}
|
|
|
|
public function insertArticle($idNextcloud){
|
|
$sql = "INSERT INTO `".$this->tableprefix."article` (`id_nextcloud`,`reference`,`description`,`prix_unitaire`) VALUES (?,?,?,0);";
|
|
$this->execSQLNoData($sql, array($idNextcloud,$this->l->t('Reference'),$this->l->t('Designation')));
|
|
return true;
|
|
}
|
|
|
|
public function insertArticleDevis($id,$idNextcloud){
|
|
$res = $this->searchMaxIdArticle($idNextcloud);
|
|
$sql = "INSERT INTO `".$this->tableprefix."article_devis` (`devis_id`, `id_nextcloud`,`article_id`,`quantite`,`discount`, `comment`) VALUES (?,?,?,1,0,'-');";
|
|
$this->execSQLNoData($sql, array($id,$idNextcloud,($res[0]['id']==NULL)?0:$res[0]['id']));
|
|
return true;
|
|
}
|
|
|
|
public function insertObservationDefunt($id,$idNextcloud){
|
|
$sql = "INSERT INTO `".$this->tableprefix."obs_defunt` (`defunt_id`, `id_nextcloud`,`designation`,`commentaire`) VALUES (?,?,?,?);";
|
|
$this->execSQLNoData($sql, array($id,$idNextcloud,'inserer une observation', 'inserer un commentaire'));
|
|
return true;
|
|
}
|
|
|
|
public function insertBijouDefunt($id,$idNextcloud){
|
|
$sql = "INSERT INTO `".$this->tableprefix."bijou_defunt` (`defunt_id`, `id_nextcloud`,`designation`,`commentaire`) VALUES (?,?,?,?);";
|
|
$this->execSQLNoData($sql, array($id,$idNextcloud,'', ''));
|
|
return true;
|
|
}
|
|
|
|
public function insertHypoDefunt($id,$idNextcloud){
|
|
$sql = "INSERT INTO `".$this->tableprefix."hypo_defunt` (`defunt_id`, `id_nextcloud`,`designation`,`qte`, `endroit`) VALUES (?,?,?,?,?);";
|
|
$this->execSQLNoData($sql, array($id,$idNextcloud,'', 0, ''));
|
|
return true;
|
|
}
|
|
|
|
public function searchMaxIdProduit($idNextcloud){
|
|
// $sqlSearchMax = "SELECT MIN(id) as id FROM `".$this->tableprefix."produit` WHERE id_nextcloud = ?";
|
|
$sqlSearchMax = "SELECT MIN(id) as id FROM `".$this->tableprefix."produit`";
|
|
// return $this->execSQLNoJsonReturn($sqlSearchMax, array($idNextcloud));
|
|
return $this->execSQLNoJsonReturn($sqlSearchMax, array());
|
|
}
|
|
|
|
public function searchMaxIdArticle($idNextcloud){
|
|
$sqlSearchMax = "SELECT MIN(id) as id FROM `".$this->tableprefix."article`";
|
|
return $this->execSQLNoJsonReturn($sqlSearchMax, array());
|
|
}
|
|
|
|
public function insertBibliotheque($idNextcloud){
|
|
$sql = "INSERT INTO `".$this->tableprefix."bibliotheque` (`id_nextcloud`,`contenu`) VALUES (?,?);";
|
|
$this->execSQLNoData($sql, array($idNextcloud,'inserer un texte ici'));
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* UPDATE
|
|
*/
|
|
public function gestion_update($table, $column, $data, $id, $idNextcloud){
|
|
|
|
if(in_array($table, $this->whiteTable) && in_array($column, $this->whiteColumn)){
|
|
if(strcmp($table, "facture")==0 && strcmp($column, "date_paiement")==0) {
|
|
$facture = $this->getFactureByFactureId($id);
|
|
if($facture['date_paiement'] != $data){
|
|
$facturationDatetime = Datetime::createFromFormat('Y-m-d',$data);
|
|
$factureNumber = $this->getFactureNumberByDate($facturationDatetime);
|
|
$fullFactureNumber = DateHelpers::GetFullFactureOrDevisNumberByDate($facturationDatetime,$factureNumber,"FAC");
|
|
$sql = "UPDATE ".$this->tableprefix.$table." SET `facture_number`= ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($factureNumber, $id));
|
|
$sql = "UPDATE ".$this->tableprefix.$table." SET $column = ?, `num`= ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($data, $fullFactureNumber, $id));
|
|
}
|
|
|
|
} else if(strcmp($table, "facture")==0 && strcmp($column, "id_devis")==0) {
|
|
|
|
$facture = json_decode($this->getOneFacture($id, $idNextcloud))[0];
|
|
$devis = json_decode($this->getOneDevis(htmlentities(rtrim($data)), $idNextcloud))[0];
|
|
$sql = "UPDATE ".$this->tableprefix.$table." SET $column = ?, `date`= ?, `version`= ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array(htmlentities(rtrim($data)), $devis->date, html_entity_decode($devis->version),$id));
|
|
|
|
} else if(strcmp($table, "lieu")==0 && (strcmp($column, "latitude")==0 || strcmp($column, "longitude")==0)) {
|
|
|
|
$lieu = json_decode($this->getLieu($id, $idNextcloud))[0];
|
|
|
|
if(floatval($data)!=0) {
|
|
$sql = "UPDATE ".$this->tableprefix.$table." SET $column = ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array(htmlentities(rtrim(floatval($data))), $id));
|
|
|
|
$lieu = json_decode($this->getLieu($id, $idNextcloud))[0];
|
|
if(floatval($lieu->latitude)!=0 && floatval($lieu->longitude)!=0) {
|
|
$adresse = $this->recuperer_adresse(floatval($lieu->latitude), floatval($lieu->longitude));
|
|
$sql = "UPDATE ".$this->tableprefix.$table." SET adresse = ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($adresse, $id));
|
|
}
|
|
}
|
|
|
|
} else if(strcmp($table, "devis")==0 && (strcmp($column, "id_lieu")==0 || strcmp($column, "date")==0 || strcmp($column, "id_client")==0 || strcmp($column, "id_thanato")==0)) {
|
|
|
|
$devis = json_decode($this->getOneDevis($id, $idNextcloud))[0];
|
|
$this->update_lieu_date_devis($devis, $column, htmlentities(rtrim($data)), $idNextcloud);
|
|
|
|
} else if(strcmp($table, "ligne_trajet")==0 && (strcmp($column, "id_devis")==0 || strcmp($column, "date")==0 || strcmp($column, "id_lieu")==0 || strcmp($column, "rang")==0)) {
|
|
$ligne_trajet = json_decode($this->getOneTrajetdetails($id, $idNextcloud))[0];
|
|
$this->update_lieu_date_devis_rang_ligneTrajet($ligne_trajet, $column, htmlentities(rtrim($data)), $idNextcloud);
|
|
} else {
|
|
$sql = "UPDATE ".$this->tableprefix.$table." SET $column = ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array(trim($data), $id));
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function init_trajets_data($idNextcloud) {
|
|
// supprimer d'abord les lignes de trajet ainsi que les trajets existants
|
|
$sqldeletelignetrajet = "DELETE FROM ".$this->tableprefix."ligne_trajet;";
|
|
$this->execSQLNoData($sqldeletelignetrajet, array());
|
|
$sqldeletetrajet = "DELETE FROM ".$this->tableprefix."trajet;";
|
|
$this->execSQLNoData($sqldeletetrajet, array());
|
|
|
|
//recuperer tous les trajets
|
|
// $all_devis = json_decode($this->getDevisEmmanuelle($idNextcloud));
|
|
$all_devis = json_decode($this->getDevis($idNextcloud));
|
|
foreach ($all_devis as $key => $devis) {
|
|
if($devis->id_lieu != NULL) {
|
|
$this->update_lieu_date_devis($devis, 'id_lieu', $devis->id_lieu, $idNextcloud);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function createDevisTrajetFromVCalendar($devisId,$idNextcloud = "admin"){
|
|
$devis = json_decode($this->getOneDevis($devisId, $idNextcloud))[0];
|
|
$this->generate_ligneTrajet($devis, $idNextcloud);
|
|
$ligne_trajet = json_decode(json: $this->getOneTrajetdetails_byIdDevis($devis->devisid, $idNextcloud))[0];
|
|
$this->range_ligneTrajet($ligne_trajet->id_trajet, $idNextcloud,$devis->devisid);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
}
|
|
|
|
/**
|
|
* update lieu et date devis
|
|
*/
|
|
public function update_lieu_date_devis($devis, $column, $data, $idNextcloud) {
|
|
$ligne_trajet = json_decode($this->getOneTrajetdetails_byIdDevis($devis->devisid, $idNextcloud))[0];
|
|
switch ($column) {
|
|
case 'id_client':
|
|
$sql = "UPDATE ".$this->tableprefix."devis SET $column = ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($data, $devis->devisid));
|
|
$updated_devis = json_decode($this->getOneDevis($devis->devisid, $idNextcloud))[0];
|
|
|
|
if($ligne_trajet != NULL) { // si il existe déja une ligne trajet
|
|
$sql = "UPDATE ".$this->tableprefix."ligne_trajet SET $column = ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($data, $ligne_trajet->id));
|
|
$this->range_ligneTrajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
} else {
|
|
if($updated_devis->id_lieu!=0) {
|
|
// ajouter le devis dans trajet s'il n'existe pas encore
|
|
$this->generate_ligneTrajet($updated_devis, $idNextcloud);
|
|
$ligne_trajet = json_decode($this->getOneTrajetdetails_byIdDevis($updated_devis->devisid, $idNextcloud))[0];
|
|
$this->range_ligneTrajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'date':
|
|
$sql = "UPDATE ".$this->tableprefix."devis SET $column = ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($data, $devis->devisid));
|
|
$updated_devis = json_decode($this->getOneDevis($devis->devisid, $idNextcloud))[0];
|
|
|
|
if($devis->id_lieu!=NULL) {
|
|
if(strcmp(explode('-', $devis->date)[1], explode('-', $updated_devis->date)[1]) != 0) { // si le mois a changé
|
|
// deplacer la ligne de trajet
|
|
if($ligne_trajet != NULL) $this->gestion_delete('ligne_trajet', $ligne_trajet->id, $idNextcloud);
|
|
$this->generate_ligneTrajet($updated_devis, $idNextcloud);
|
|
$ligne_trajet = json_decode($this->getOneTrajetdetails_byIdDevis($updated_devis->devisid, $idNextcloud))[0];
|
|
$this->range_ligneTrajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
} else {
|
|
// mettre a jour ligne_trajet
|
|
if($ligne_trajet != NULL) {
|
|
$sql = "UPDATE ".$this->tableprefix."ligne_trajet SET $column = ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($data, $ligne_trajet->id));
|
|
$this->range_ligneTrajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'id_lieu':
|
|
// mettre a jour devis et ligne_trajet
|
|
$sql = "UPDATE ".$this->tableprefix."devis SET $column = ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($data, $devis->devisid));
|
|
$updated_devis = json_decode($this->getOneDevis($devis->devisid, $idNextcloud))[0];
|
|
|
|
if($ligne_trajet != NULL) {
|
|
$sql = "UPDATE ".$this->tableprefix."ligne_trajet SET $column = ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($data, $ligne_trajet->id));
|
|
$this->range_ligneTrajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
} else {
|
|
if($updated_devis->id_lieu!=0 && $updated_devis->id_thanato!=0) {
|
|
// ajouter le devis dans trajet s'il n'existe pas encore
|
|
$this->generate_ligneTrajet($updated_devis, $idNextcloud);
|
|
$ligne_trajet = json_decode($this->getOneTrajetdetails_byIdDevis($updated_devis->devisid, $idNextcloud))[0];
|
|
$this->range_ligneTrajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'id_thanato':
|
|
// mettre a jour devis et ligne_trajet
|
|
$sql = "UPDATE ".$this->tableprefix."devis SET $column = ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($data, $devis->devisid));
|
|
$updated_devis = json_decode($this->getOneDevis($devis->devisid, $idNextcloud))[0];
|
|
|
|
if($ligne_trajet != NULL) {
|
|
$this->gestion_delete('ligne_trajet', $ligne_trajet->id, $idNextcloud);
|
|
}
|
|
$this->generate_ligneTrajet($updated_devis, $idNextcloud);
|
|
$ligne_trajet = json_decode($this->getOneTrajetdetails_byIdDevis($updated_devis->devisid, $idNextcloud))[0];
|
|
$this->range_ligneTrajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
break;
|
|
}
|
|
}
|
|
|
|
public function update_lieu_date_devis_rang_ligneTrajet($ligne_trajet, $column, $data, $idNextcloud) {
|
|
switch ($column) {
|
|
case 'id_devis':
|
|
$current_devis = json_decode($this->getOneDevis($data, $idNextcloud))[0];
|
|
|
|
$this->update_ligneTrajet('ligne_trajet', 'id_devis', $current_devis->devisid, $ligne_trajet->id, $idNextcloud);
|
|
$this->update_ligneTrajet('ligne_trajet', 'date', $current_devis->date, $ligne_trajet->id, $idNextcloud);
|
|
$this->update_ligneTrajet('ligne_trajet', 'id_client', $current_devis->id_client, $ligne_trajet->id, $idNextcloud);
|
|
$this->update_ligneTrajet('ligne_trajet', 'id_lieu', $current_devis->id_lieu, $ligne_trajet->id, $idNextcloud);
|
|
|
|
$this->range_ligneTrajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
break;
|
|
case 'id_lieu':
|
|
$this->update_ligneTrajet('ligne_trajet', 'id_lieu', $data, $ligne_trajet->id, $idNextcloud);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
break;
|
|
case 'date':
|
|
$this->update_ligneTrajet('ligne_trajet', 'date', $data, $ligne_trajet->id, $idNextcloud);
|
|
$this->range_ligneTrajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
break;
|
|
case 'rang':
|
|
$ligneTrajet_surLeRang = json_decode($this->getOneTrajetdetails_byRang($ligne_trajet->id_trajet, $data, $idNextcloud))[0];
|
|
if($ligneTrajet_surLeRang != NULL) {
|
|
$this->update_ligneTrajet('ligne_trajet', 'rang', intval($data), $ligne_trajet->id, $idNextcloud);
|
|
$this->update_ligneTrajet('ligne_trajet', 'rang', intval($data)+1, $ligneTrajet_surLeRang->id, $idNextcloud);
|
|
$this->range_ligneTrajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
} else {
|
|
$this->update_ligneTrajet('ligne_trajet', 'rang', $data, $ligne_trajet->id, $idNextcloud);
|
|
$this->range_ligneTrajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* generer une ligne de trajet par un devis
|
|
*/
|
|
public function generate_ligneTrajet($devis, $idNextcloud) {
|
|
$date_devis_split = explode('-', $devis->date);
|
|
|
|
// creer le trajet s'il n'existe pas
|
|
$trajet = json_decode($this->getOneTrajet_byThanatoMonthYear($devis->id_thanato, $date_devis_split[1], $date_devis_split[0]))[0];
|
|
if($trajet == NULL) {
|
|
$this->insertTrajet($devis->id_thanato, $date_devis_split[1], $date_devis_split[0], $idNextcloud);
|
|
$trajet = json_decode($this->getOneTrajet_byThanatoMonthYear($devis->id_thanato, $date_devis_split[1], $date_devis_split[0]))[0];
|
|
}
|
|
|
|
$this->insertTrajetdetails_byDevis($trajet->id, $devis, $idNextcloud);
|
|
}
|
|
|
|
/**
|
|
* ranger les lignes de trajet dans un trajet par date et par rang
|
|
* inserer ligne siege au debut et fin de chaque journee s'il n'existe pas
|
|
*/
|
|
public function range_ligneTrajet($id_trajet, $idNextcloud,$devisId = 0) {
|
|
$lignes = json_decode($this->getTrajetsdetails_orderByDate($id_trajet, $idNextcloud));
|
|
$nb_jour = 0;
|
|
if(sizeof($lignes)>0) {
|
|
$nb_jour = 1;
|
|
$dates = array(0=>$lignes[0]->date);
|
|
$date_temp = $lignes[0]->date;
|
|
foreach ($lignes as $key => $ligne) {
|
|
if(strcmp($date_temp, string2: $ligne->date)!=0) {
|
|
$date_temp = $ligne->date;
|
|
array_push($dates, $date_temp);
|
|
$nb_jour++;
|
|
}
|
|
}
|
|
|
|
// on verifie si le nombre de ligne ets correspond à 2*nb_jour (debut et fin de journee)
|
|
$reste = (2*$nb_jour) - (sizeof(array_filter($lignes, function($ligne) {return strcmp($ligne->source,'siege')==0;})));
|
|
while ($reste>0) {
|
|
$this->insertTrajetdetails_h2f($id_trajet, $lignes[0]->date, $idNextcloud,$idNextcloud,$devisId);
|
|
$reste--;
|
|
}
|
|
|
|
$current_lines = json_decode($this->getTrajetsdetails_orderByDate($id_trajet, $idNextcloud));
|
|
|
|
// ici le nombre de ligne h2f est egale au nb_jour*2
|
|
$array_siege = array();
|
|
foreach ($current_lines as $key => $ligne) {
|
|
if(strcmp($ligne->source,'siege')==0) array_push($array_siege, $ligne);
|
|
}
|
|
|
|
$j=0;
|
|
for ($i=0; $i < sizeof($dates); $i++) {
|
|
$this->update_ligneTrajet('ligne_trajet', 'rang', 0, $array_siege[$j]->id, $idNextcloud);
|
|
$this->update_ligneTrajet('ligne_trajet', 'date', $dates[$i], $array_siege[$j]->id, $idNextcloud);
|
|
$this->update_ligneTrajet('ligne_trajet', 'rang', sizeof($current_lines)+1, $array_siege[$j+1]->id, $idNextcloud);
|
|
$this->update_ligneTrajet('ligne_trajet', 'date', $dates[$i], $array_siege[$j+1]->id, $idNextcloud);
|
|
$j+=2;
|
|
}
|
|
|
|
$ordered_lines = json_decode($this->getTrajetsdetails_orderByDate($id_trajet, $idNextcloud));
|
|
foreach ($ordered_lines as $key => $line) {
|
|
$this->update_ligneTrajet('ligne_trajet', 'rang', $key+1, $line->id, $idNextcloud);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
public function update_ligneTrajet($table, $column, $data, $id, $idNextcloud){
|
|
|
|
if(in_array($table, $this->whiteTable) && in_array($column, $this->whiteColumn)){
|
|
$sql = "UPDATE ".$this->tableprefix.$table." SET $column = ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($data, $id));
|
|
}
|
|
}
|
|
|
|
public function calculer_distance_trajet($numtrajet, $idNextcloud) {
|
|
$trajetdetails = json_decode($this->getTrajetsdetails_orderByDate($numtrajet, $idNextcloud));
|
|
$distance_temp = 0;
|
|
$distances = array();
|
|
$last_point = NULL;
|
|
for ($i=0; $i < sizeof($trajetdetails); $i++) {
|
|
if(strcmp(explode('-', $trajetdetails[$i]->date)[2], explode('-', $trajetdetails[$i+1]->date)[2])!=0) {
|
|
array_push($distances, $distance_temp);
|
|
$distance_temp = 0;
|
|
$last_point = NULL;
|
|
} else {
|
|
if($trajetdetails[$i]->lid != NULL) $last_point = $trajetdetails[$i];
|
|
if($last_point->lid != NULL && $trajetdetails[$i+1]->lid != NULL) $distance_temp += $this->calcul_distance(floatval($last_point->latitude), floatval($last_point->longitude), floatval($trajetdetails[$i+1]->latitude), floatval($trajetdetails[$i+1]->longitude));
|
|
}
|
|
}
|
|
if(sizeof($trajetdetails)>1 && sizeof($distances)==0) array_push($distances, $distance_temp);
|
|
$distance_final = 0;
|
|
foreach ($distances as $key => $valdistance) {
|
|
$distance_final += $valdistance;
|
|
}
|
|
$sql = "UPDATE ".$this->tableprefix."trajet SET `distance` = ? WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($distance_final, $numtrajet));
|
|
}
|
|
|
|
public function getOneTrajet_byThanatoMonthYear($id_thanato, $mois, $annee) {
|
|
$sql = "SELECT " . $this->tableprefix . "trajet.id, " . $this->tableprefix . "trajet.distance, " . $this->tableprefix . "trajet.date, " . $this->tableprefix . "trajet.mois, " . $this->tableprefix . "trajet.annee
|
|
FROM " . $this->tableprefix . "trajet
|
|
WHERE " . $this->tableprefix . "trajet.annee = " . $annee . " AND " . $this->tableprefix . "trajet.mois = " . $mois . " AND " . $this->tableprefix . "trajet.id_thanato = " . $id_thanato . ";";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function recuperer_adresse($latitude, $longitude) {
|
|
|
|
$curl = curl_init();
|
|
|
|
curl_setopt_array($curl, array(
|
|
CURLOPT_URL => 'https://api.geoapify.com/v1/geocode/reverse?lat='.$latitude.'&lon='.$longitude.'&format=json&apiKey=8dadbe28a8894e9ebb7d0d1053b743f4',
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_ENCODING => '',
|
|
CURLOPT_MAXREDIRS => 10,
|
|
CURLOPT_TIMEOUT => 0,
|
|
CURLOPT_FOLLOWLOCATION => true,
|
|
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
|
CURLOPT_CUSTOMREQUEST => 'GET',
|
|
));
|
|
|
|
$response = curl_exec($curl);
|
|
|
|
curl_close($curl);
|
|
|
|
// Vérifiez s'il y a eu une erreur lors de la requête cURL
|
|
if ($response === false) {
|
|
return '';
|
|
} else {
|
|
return (json_decode($response)->results)[0]->formatted;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Calcul la distance entre les deux points à vol d'oiseau
|
|
*/
|
|
public function calcul_distance($lat1, $lon1, $lat2, $lon2) {
|
|
$R = 6371; // Rayon moyen de la Terre en kilomètres
|
|
$dLat = deg2rad($lat2 - $lat1);
|
|
$dLon = deg2rad($lon2 - $lon1);
|
|
$a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2) * sin($dLon/2);
|
|
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
|
|
$d = $R * $c;
|
|
return round($d, 2);
|
|
}
|
|
|
|
/**
|
|
* Verification si la valeur d'un coordonnees est valide
|
|
*/
|
|
private function is_valid_gps($latitude, $longitude) {
|
|
// Vérifie si les valeurs sont des nombres décimaux valides entre -90 et 90 pour la latitude et -180 et 180 pour la longitude
|
|
if (is_numeric($latitude) && is_numeric($longitude) && $latitude >= -90 && $latitude <= 90 && $longitude >= -180 && $longitude <= 180) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* DELETE
|
|
*/
|
|
public function gestion_delete($table, $id, $idNextcloud){
|
|
if(in_array($table, $this->whiteTable)){
|
|
if(strcmp($table, "ligne_trajet")==0) {
|
|
|
|
$distance = 0;
|
|
$ligne_trajet = json_decode($this->getOneTrajetdetails($id, $idNextcloud))[0];
|
|
|
|
$sql = "DELETE FROM ".$this->tableprefix.$table." WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($id));
|
|
|
|
$this->range_ligneTrajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
$this->calculer_distance_trajet($ligne_trajet->id_trajet, $idNextcloud);
|
|
|
|
} else {
|
|
$sql = "DELETE FROM ".$this->tableprefix.$table." WHERE `id` = ?";
|
|
$this->execSQLNoData($sql, array($id));
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check
|
|
* TODO Translation
|
|
*/
|
|
public function checkConfig($idNextcloud){
|
|
$sql = "SELECT count(*) as res FROM `".$this->tableprefix."configuration` WHERE `id_nextcloud` = ?";
|
|
$res = json_decode($this->execSQL($sql, array($idNextcloud)))[0]->res;
|
|
if ( $res < 1 ){
|
|
$sql = "INSERT INTO `".$this->tableprefix."configuration` (`entreprise`, `nom`, `prenom`, `legal_one`, `legal_two`, `mail`, `telephone`, `adresse`, `path`, `id_nextcloud`,`mentions_default`,`tva_default`,`devise`,`facture_prefixe`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, '', ?, ?, '0',?,?);";
|
|
$this->execSQLNoData($sql, array($this->l->t('Your company name'),
|
|
$this->l->t('Your company contact last name'),
|
|
$this->l->t('Your company contact first name'),
|
|
$this->l->t('Company legal information line one'),
|
|
$this->l->t('Company legal information line two'),
|
|
$this->l->t('Your company email'),
|
|
$this->l->t('Your company phone'),
|
|
$this->l->t('Your company address'),
|
|
$idNextcloud,
|
|
$this->l->t('All Legal mentions, disclaimer or everything you want to place in the footer.'),
|
|
$this->l->t('EUR'),
|
|
$this->l->t('INVOICE')
|
|
)
|
|
);
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
public function isConfig($idNextcloud){
|
|
$changelog = 9; //+1 if you want changelog appear for everybody one time !
|
|
|
|
$sql = "SELECT count(*) as res FROM `".$this->tableprefix."configuration` WHERE `id_nextcloud` = ?";
|
|
$res = json_decode($this->execSQL($sql, array($idNextcloud)))[0]->res;
|
|
|
|
// Utilisateur jamais utilisé l'application
|
|
if ( $res < 1 ){
|
|
return false;
|
|
}else{
|
|
$sql = "SELECT id as id, changelog as res FROM `".$this->tableprefix."configuration` WHERE `id_nextcloud` = ?";
|
|
$res = json_decode($this->execSQL($sql, array($idNextcloud)))[0]->res;
|
|
$id = json_decode($this->execSQL($sql, array($idNextcloud)))[0]->id;
|
|
if($res < $changelog){
|
|
$this->gestion_update("configuration","changelog",$changelog,$id,$idNextcloud);
|
|
return false;
|
|
}else{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Number client
|
|
*/
|
|
public function numberClient($idNextcloud){
|
|
// $sql = "SELECT count(*) as c from ".$this->tableprefix."client WHERE `id_nextcloud` = ?;";
|
|
$sql = "SELECT count(*) as c from ".$this->tableprefix."client;";
|
|
return $this->execSQL($sql, array());
|
|
// return $this->execSQL($sql, array($idNextcloud));
|
|
}
|
|
|
|
/**
|
|
* Number thanatopracteur
|
|
*/
|
|
public function numberThanato($idNextcloud){
|
|
// $sql = "SELECT count(*) as c from ".$this->tableprefix."thanato WHERE `id_nextcloud` = ?;";
|
|
$sql = "SELECT count(*) as c from ".$this->tableprefix."thanato;";
|
|
return $this->execSQL($sql, array());
|
|
// return $this->execSQL($sql, array($idNextcloud));
|
|
}
|
|
|
|
/**
|
|
* Number devis
|
|
*/
|
|
public function numberDevis($idNextcloud){
|
|
// $sql = "SELECT count(*) as c from ".$this->tableprefix."devis WHERE `id_nextcloud` = ? AND `mentions` NOT LIKE 'facturé';";
|
|
// $sql = "SELECT count(*) as c from ".$this->tableprefix."devis WHERE `mentions` NOT LIKE 'facturé';";
|
|
$sql = "SELECT count(*) as c from ".$this->tableprefix."devis;";
|
|
// $sql = "SELECT count(*) as c from ".$this->tableprefix."devis WHERE `id_nextcloud` = ?;";
|
|
// return $this->execSQL($sql, array($idNextcloud));
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
/**
|
|
* Number facture
|
|
*/
|
|
public function numberFacture($idNextcloud){
|
|
// $sql = "SELECT count(*) as c from ".$this->tableprefix."facture WHERE `id_nextcloud` = ?;";
|
|
$sql = "SELECT count(*) as c from ".$this->tableprefix."facture;";
|
|
// return $this->execSQL($sql, array($idNextcloud));
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
/**
|
|
* Number lieu
|
|
*/
|
|
public function numberLieu($idNextcloud){
|
|
$sql = "SELECT count(*) as c from ".$this->tableprefix."lieu;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
/**
|
|
* Number trajet
|
|
*/
|
|
public function numberTrajet($idNextcloud){
|
|
$sql = "SELECT count(*) as c from ".$this->tableprefix."trajet;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
/**
|
|
* Number produit
|
|
*/
|
|
public function numberProduit($idNextcloud){
|
|
// $sql = "SELECT count(*) as c from ".$this->tableprefix."produit WHERE `id_nextcloud` = ?;";
|
|
$sql = "SELECT count(*) as c from ".$this->tableprefix."produit;";
|
|
// return $this->execSQL($sql, array($idNextcloud));
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
/**
|
|
* Number article
|
|
*/
|
|
public function numberArticle($idNextcloud){
|
|
$sql = "SELECT count(*) as c from ".$this->tableprefix."article;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
/**
|
|
* Number défunt
|
|
*/
|
|
public function numberDefunt($idNextcloud, $isUserThanatoOnly = false){
|
|
$defuntCount = 0;
|
|
if($isUserThanatoOnly == false){
|
|
$sql = "SELECT count(*) as c from ".$this->tableprefix."defunt;";
|
|
$defuntCountBythanato = $this->execSQLNoJsonReturn($sql, array());
|
|
if(!empty($defuntCountBythanato)){
|
|
$defuntCount = $defuntCountBythanato[0]['c'];
|
|
}
|
|
}
|
|
else{
|
|
$thanato = $this->getThanatoByIdNextcloud($idNextcloud);
|
|
if($thanato != null){
|
|
$thanatoId = $thanato["id"];
|
|
$defuntsIdRelatedToThanato = $this->getDefuntIdsRelatedToThanato($thanatoId);
|
|
$defuntCount = count($defuntsIdRelatedToThanato);
|
|
}
|
|
}
|
|
return $defuntCount;
|
|
}
|
|
|
|
/**
|
|
* Number bibliotheque
|
|
*/
|
|
public function numberBibliotheque($idNextcloud){
|
|
$sql = "SELECT count(*) as c from ".$this->tableprefix."bibliotheque;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
/**
|
|
* Annual turnover per month without VAT
|
|
*/
|
|
public function getAnnualTurnoverPerMonthNoVat($idNextcloud){
|
|
$sql = "SELECT
|
|
EXTRACT(YEAR FROM facture.date_paiement) AS y,
|
|
EXTRACT(MONTH FROM facture.date_paiement) AS m,
|
|
SUM(
|
|
COALESCE(client_group_discount.ht_amount,produit.prix_unitaire)
|
|
* produit_devis.quantite
|
|
) AS total
|
|
FROM ".$this->tableprefix."facture AS facture
|
|
JOIN ".$this->tableprefix."produit_devis AS produit_devis
|
|
ON facture.id_devis = produit_devis.devis_id
|
|
JOIN ".$this->tableprefix."produit AS produit
|
|
ON produit_devis.produit_id = produit.id
|
|
JOIN ".$this->tableprefix."devis AS devis
|
|
ON facture.id_devis = devis.id
|
|
JOIN ".$this->tableprefix."client AS client
|
|
ON devis.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."client_group AS client_group
|
|
ON client.fk_client_group_id = client_group.id
|
|
LEFT JOIN ".$this->tableprefix."client_group_discount AS client_group_discount
|
|
ON client_group.id = client_group_discount.fk_client_group_id
|
|
AND produit.id = client_group_discount.fk_produit_id
|
|
GROUP BY
|
|
EXTRACT(YEAR FROM facture.date_paiement),
|
|
EXTRACT(MONTH FROM facture.date_paiement)
|
|
ORDER BY
|
|
EXTRACT(YEAR FROM facture.date_paiement) DESC,
|
|
EXTRACT(MONTH FROM facture.date_paiement);";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function getStatArticleAnnuel($idNextcloud, $annee) {
|
|
$sql = "SELECT p.id, p.reference,
|
|
COALESCE(SUM(CASE WHEN MONTH(f.date_paiement) = 1 THEN pd.quantite ELSE 0 END), 0) AS janvier,
|
|
COALESCE(SUM(CASE WHEN MONTH(f.date_paiement) = 2 THEN pd.quantite ELSE 0 END), 0) AS fevrier,
|
|
COALESCE(SUM(CASE WHEN MONTH(f.date_paiement) = 3 THEN pd.quantite ELSE 0 END), 0) AS mars,
|
|
COALESCE(SUM(CASE WHEN MONTH(f.date_paiement) = 4 THEN pd.quantite ELSE 0 END), 0) AS avril,
|
|
COALESCE(SUM(CASE WHEN MONTH(f.date_paiement) = 5 THEN pd.quantite ELSE 0 END), 0) AS mai,
|
|
COALESCE(SUM(CASE WHEN MONTH(f.date_paiement) = 6 THEN pd.quantite ELSE 0 END), 0) AS juin,
|
|
COALESCE(SUM(CASE WHEN MONTH(f.date_paiement) = 7 THEN pd.quantite ELSE 0 END), 0) AS juillet,
|
|
COALESCE(SUM(CASE WHEN MONTH(f.date_paiement) = 8 THEN pd.quantite ELSE 0 END), 0) AS aout,
|
|
COALESCE(SUM(CASE WHEN MONTH(f.date_paiement) = 9 THEN pd.quantite ELSE 0 END), 0) AS septembre,
|
|
COALESCE(SUM(CASE WHEN MONTH(f.date_paiement) = 10 THEN pd.quantite ELSE 0 END), 0) AS octobre,
|
|
COALESCE(SUM(CASE WHEN MONTH(f.date_paiement) = 11 THEN pd.quantite ELSE 0 END), 0) AS novembre,
|
|
COALESCE(SUM(CASE WHEN MONTH(f.date_paiement) = 12 THEN pd.quantite ELSE 0 END), 0) AS decembre
|
|
FROM ".$this->tableprefix."produit p
|
|
LEFT JOIN ".$this->tableprefix."produit_devis pd ON p.id = pd.produit_id
|
|
LEFT JOIN ".$this->tableprefix."devis d ON pd.devis_id = d.id
|
|
LEFT JOIN ".$this->tableprefix."facture f ON f.id_devis = d.id
|
|
WHERE YEAR(f.date_paiement) = ".$annee." AND pd.devis_id IS NOT NULL
|
|
GROUP BY p.id, p.reference;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function getStatSoinsThanatoAnnuel($idNextcloud, $annee) {
|
|
$sql = "SELECT
|
|
thanato.nom AS nom_thanato,
|
|
thanato.prenom AS prenom_thanato,
|
|
COALESCE(SUM(CASE WHEN MONTH(d.date) = 1 THEN 1 ELSE 0 END), 0) AS janvier,
|
|
COALESCE(SUM(CASE WHEN MONTH(d.date) = 2 THEN 1 ELSE 0 END), 0) AS fevrier,
|
|
COALESCE(SUM(CASE WHEN MONTH(d.date) = 3 THEN 1 ELSE 0 END), 0) AS mars,
|
|
COALESCE(SUM(CASE WHEN MONTH(d.date) = 4 THEN 1 ELSE 0 END), 0) AS avril,
|
|
COALESCE(SUM(CASE WHEN MONTH(d.date) = 5 THEN 1 ELSE 0 END), 0) AS mai,
|
|
COALESCE(SUM(CASE WHEN MONTH(d.date) = 6 THEN 1 ELSE 0 END), 0) AS juin,
|
|
COALESCE(SUM(CASE WHEN MONTH(d.date) = 7 THEN 1 ELSE 0 END), 0) AS juillet,
|
|
COALESCE(SUM(CASE WHEN MONTH(d.date) = 8 THEN 1 ELSE 0 END), 0) AS aout,
|
|
COALESCE(SUM(CASE WHEN MONTH(d.date) = 9 THEN 1 ELSE 0 END), 0) AS septembre,
|
|
COALESCE(SUM(CASE WHEN MONTH(d.date) = 10 THEN 1 ELSE 0 END), 0) AS octobre,
|
|
COALESCE(SUM(CASE WHEN MONTH(d.date) = 11 THEN 1 ELSE 0 END), 0) AS novembre,
|
|
COALESCE(SUM(CASE WHEN MONTH(d.date) = 12 THEN 1 ELSE 0 END), 0) AS decembre
|
|
FROM ".$this->tableprefix."devis d
|
|
LEFT JOIN ".$this->tableprefix."facture f ON f.id_devis = d.id
|
|
LEFT JOIN ".$this->tableprefix."thanato thanato ON d.id_thanato = thanato.id
|
|
WHERE YEAR(d.date) = ".$annee." AND d.id_thanato IS NOT NULL
|
|
AND thanato.id IS NOT NULL
|
|
GROUP BY nom_thanato, prenom_thanato
|
|
ORDER BY nom_thanato;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function getStatSoinsThanatoWeekend($idNextcloud, $annee, $mois) {
|
|
/**
|
|
* stat nombre de soins samedis et dimanches
|
|
* */
|
|
// $sql = "SELECT
|
|
// thanato.nom AS nom_thanato,
|
|
// thanato.prenom AS prenom_thanato,
|
|
// SUM(CASE WHEN DAYOFWEEK(DISTINCT d.date) = 1 THEN 1 ELSE 0 END) AS sunday,
|
|
// SUM(CASE WHEN DAYOFWEEK(DISTINCT d.date) = 7 THEN 1 ELSE 0 END) AS saturday,
|
|
// SUM(CASE WHEN DAYOFWEEK(DISTINCT d.date) IN (1, 7) THEN 1 ELSE 0 END) AS total_devis
|
|
// FROM ".$this->tableprefix."devis d
|
|
// LEFT JOIN ".$this->tableprefix."facture f ON f.id_devis = d.id
|
|
// LEFT JOIN ".$this->tableprefix."thanato thanato ON d.id_thanato = thanato.id
|
|
// WHERE MONTH(d.date) = ".$mois." AND YEAR(d.date) = ".$annee."
|
|
// GROUP BY nom_thanato, prenom_thanato;";
|
|
|
|
/**
|
|
* stat nombre de jours travaillés les weekends d'un mois
|
|
* */
|
|
$sql = "SELECT
|
|
thanato.id,
|
|
thanato.nom as nom_thanato,
|
|
thanato.prenom AS prenom_thanato,
|
|
COUNT(DISTINCT DATE_FORMAT(devis.date, '%Y-%m-%d')) AS weekends_travailles
|
|
FROM
|
|
".$this->tableprefix."thanato as thanato
|
|
JOIN
|
|
".$this->tableprefix."devis as devis ON thanato.id = devis.id_thanato
|
|
WHERE
|
|
MONTH(devis.date) = ".$mois."
|
|
AND YEAR(devis.date) = ".$annee."
|
|
AND DAYOFWEEK(devis.date) IN (1, 7)
|
|
GROUP BY
|
|
thanato.id, nom_thanato, prenom_thanato;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
/**
|
|
* Get last insert id
|
|
*/
|
|
public function lastinsertid($table,$idNextcloud){
|
|
// $sql = "SELECT max(user_id) as LAST_INSERT_ID FROM `" . $this->tableprefix . $table . "` WHERE " . $this->tableprefix . $table .".id_nextcloud = ?;";
|
|
// $res = $this->execSQLNoJsonReturn($sql,array($idNextcloud));
|
|
$sql = "SELECT max(user_id) as LAST_INSERT_ID FROM `" . $this->tableprefix . $table. "`;";
|
|
$res = $this->execSQLNoJsonReturn($sql,array());
|
|
return $res[0]['LAST_INSERT_ID'];
|
|
}
|
|
|
|
public function lastNumFacture($idNextcloud) {
|
|
$lastFactureId = $this->getLastFactureId();
|
|
return $lastFactureId;
|
|
}
|
|
|
|
private function getLastFactureId(){
|
|
$sql = "SELECT
|
|
max(facture.id) as LAST_FACTURE_ID FROM "
|
|
. $this->tableprefix."facture as facture;";
|
|
$res = $this->execSQLNoJsonReturn($sql,[]);
|
|
$lastId = 0;
|
|
if(!empty($res)){
|
|
$lastId = $res[0]['LAST_FACTURE_ID'];
|
|
}
|
|
return $lastId;
|
|
}
|
|
|
|
public function backup(){
|
|
$res = array();
|
|
$res[] = array("===client===");
|
|
$sql = "SELECT * FROM ".$this->tableprefix."client";
|
|
$res = array_merge($res, $this->execSQLNoJsonReturn($sql, array()));
|
|
|
|
$res[] = array("===devis===");
|
|
$sql = "SELECT * FROM ".$this->tableprefix."devis";
|
|
$res = array_merge($res,$this->execSQLNoJsonReturn($sql, array()));
|
|
|
|
$res[] = array("===facture===");
|
|
$sql = "SELECT * FROM ".$this->tableprefix."facture";
|
|
$res = array_merge($res,$this->execSQLNoJsonReturn($sql, array()));
|
|
|
|
$res[] = array("===produit===");
|
|
$sql = "SELECT * FROM ".$this->tableprefix."produit";
|
|
$res = array_merge($res,$this->execSQLNoJsonReturn($sql, array()));
|
|
|
|
$res[] = array("===produit_devis===");
|
|
$sql = "SELECT * FROM ".$this->tableprefix."produit_devis";
|
|
$res = array_merge($res,$this->execSQLNoJsonReturn($sql, array()));
|
|
|
|
$res[] = array("===configuration===");
|
|
$sql = "SELECT * FROM ".$this->tableprefix."configuration";
|
|
$res = array_merge($res,$this->execSQLNoJsonReturn($sql, array()));
|
|
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* @sql
|
|
* @array() //prepare statement
|
|
*/
|
|
private function execSQL($sql, $conditions){
|
|
$stmt = $this->pdo->prepare($sql);
|
|
$stmt->execute($conditions);
|
|
$data = $stmt->fetchAll(\PDO::FETCH_ASSOC);
|
|
$stmt->closeCursor();
|
|
return json_encode($data);
|
|
}
|
|
|
|
private function execSQLNoData($sql, $conditions){
|
|
$stmt = $this->pdo->prepare($sql);
|
|
$stmt->execute($conditions);
|
|
$stmt->closeCursor();
|
|
}
|
|
|
|
private function execSQLNoJsonReturn($sql, $conditions){
|
|
$stmt = $this->pdo->prepare($sql);
|
|
$stmt->execute($conditions);
|
|
$data = $stmt->fetchAll(\PDO::FETCH_ASSOC);
|
|
$stmt->closeCursor();
|
|
return $data;
|
|
}
|
|
|
|
private function getThanatoDevisListByDate($thanatoId,$date){
|
|
$dateFormatted = $date->format('Y-m-d');
|
|
$sql = "SELECT
|
|
devis.id,
|
|
devis.date,
|
|
devis.mentions,
|
|
devis.num as calendar_uuid,
|
|
devis.id_defunt as id_defunt,
|
|
devis.id_lieu as id_lieu,
|
|
devis.id_client as id_client,
|
|
devis.id_thanato as id_thanato,
|
|
thanato.nom as nom_thanato,
|
|
thanato.prenom as prenom_thanato,
|
|
defunt.nom as nom_defunt,
|
|
lieu.nom as nom_lieu,
|
|
lieu.latitude as lieu_latitude,
|
|
lieu.longitude as lieu_longitude,
|
|
client.nom as nom_client,
|
|
client.entreprise as client_entreprise,
|
|
client.adresse as client_adresse,
|
|
facture.num as facture_num
|
|
FROM ".$this->tableprefix."devis as devis
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on devis.id_thanato = thanato.id
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on devis.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."facture as facture on devis.id = facture.id_devis
|
|
WHERE devis.date = ? AND
|
|
devis.id_thanato = ? AND
|
|
(devis.mentions = ? OR devis.mentions = ?)
|
|
ORDER BY devis.date ASC;";
|
|
$devisList = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[$dateFormatted,$thanatoId,DevisMentionConstant::FACTURED,DevisMentionConstant::FACTURED_FORMATTED]);
|
|
return $devisList;
|
|
}
|
|
|
|
public function getThanatoById($thanatoId){
|
|
$sql = "SELECT id, nom, prenom,fk_user_uuid FROM ".$this->tableprefix."thanato WHERE id = ? LIMIT 1;";
|
|
$thanato = $this->execSQLNoJsonReturn($sql,[$thanatoId]);
|
|
if(!empty($thanato)){
|
|
return $thanato[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private function getCalendarByThanatoIdNextcloud($idNextCloud){
|
|
$searchString = "%principals/users/$idNextCloud%";
|
|
$sql = "SELECT * FROM ".self::DEFAULT_TABLE_PREFIX."calendars as calendar WHERE calendar.principaluri LIKE ? LIMIT 1;";
|
|
$calendar = $this->execSQLNoJsonReturn($sql,[$searchString]);
|
|
if(!empty($calendar)){
|
|
return $calendar[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private function getThanatoLeaveByCalendarAndDate($calendarId,$date){
|
|
$datetimeFormatted = $date->format('Ymd');
|
|
$dateCondition = "%DTSTART%".$datetimeFormatted."%";
|
|
$isLeaveConditionAsString = "%".BddConstant::ISLEAVEPROPERTYONVCALENDAR.":1%";
|
|
$sql = "SELECT * FROM ".self::DEFAULT_TABLE_PREFIX."calendarobjects as calendarobject WHERE
|
|
calendarobject.calendarid = ? AND
|
|
calendarobject.calendardata LIKE ? AND
|
|
calendarobject.calendardata LIKE ? AND
|
|
calendarobject.deleted_at IS NULL;";
|
|
$leaves = $this->execSQLNoJsonReturn($sql,[$calendarId,$isLeaveConditionAsString,$dateCondition]);
|
|
return $leaves;
|
|
}
|
|
public function getThanatoDevisPerDateInAMonthYear($thanatoId,$month,$year){
|
|
$dateOfMonths = DateHelpers::getDatesOfMonth($year,$month);
|
|
$devisListPerThanatoPerDate = [];
|
|
$thanato = $this->getThanatoById($thanatoId);
|
|
$thanatoName = $thanato["nom"];
|
|
$thanatoCalendar = $this->getCalendarByThanatoIdNextcloud($thanato["fk_user_uuid"] ?? $thanato["nom"]);
|
|
if($thanatoCalendar == null){
|
|
return [];
|
|
}
|
|
$thanatoCalendarId = $thanatoCalendar["id"];
|
|
foreach($dateOfMonths as $currentDate){
|
|
$currentDateFormatted = $currentDate->format('Y-m-d');
|
|
$isPublicHoliday = DateHelpers::isPublicHoliday($currentDateFormatted);
|
|
$devisList = $this->getThanatoDevisListByDate($thanatoId,$currentDate);
|
|
$thereIsNoDevisForCurrentDate = empty($devisList);
|
|
if($thereIsNoDevisForCurrentDate){
|
|
$devisListPerThanatoPerDate[$currentDateFormatted]["hasDevis"] = false;
|
|
$thanatoLeavesThisDay = $this->getThanatoLeaveByCalendarAndDate($thanatoCalendarId,$currentDate);
|
|
if(empty($thanatoLeavesThisDay)){
|
|
$devisListPerThanatoPerDate[$currentDateFormatted]["leaves"][] = [
|
|
"onLeave" => false,
|
|
"startTime" => null,
|
|
"endTime" => null,
|
|
"thanatoName"=>$thanatoName,
|
|
"date" => $currentDateFormatted,
|
|
"totalHours" => 0,
|
|
"totalWorkedHours" => 8,
|
|
"isPublicHoliday" => $isPublicHoliday
|
|
];
|
|
}
|
|
else{
|
|
foreach($thanatoLeavesThisDay as $currentLeave){
|
|
$leaveTime = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($currentLeave['calendardata']);
|
|
$devisListPerThanatoPerDate[$currentDateFormatted]["leaves"][] = [
|
|
"onLeave" => true,
|
|
"startTime" => $leaveTime["startTime"],
|
|
"endTime" => $leaveTime["endTime"],
|
|
"thanatoName"=>$thanatoName,
|
|
"date" => $currentDateFormatted,
|
|
"totalHours" => $leaveTime["totalHours"],
|
|
"totalWorkedHours" => $leaveTime["totalWorkedHours"],
|
|
"isPublicHoliday" => $isPublicHoliday
|
|
];
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
foreach($devisList as $devis){
|
|
$devis = $this->setDevisStartAndEndTime($devis);
|
|
$devis = $this->setDevisIsPublicHolidayOrNotText($devis);
|
|
$devis = $this->setDevisProduitsList($devis);
|
|
if (!isset($devisListPerThanatoPerDate[$currentDateFormatted])) {
|
|
$devisListPerThanatoPerDate[$currentDateFormatted] = [
|
|
'total_distance' => 0,
|
|
"devis" => [],
|
|
"devisId" => [],
|
|
"hasDevis" => true,
|
|
"leaves" => []
|
|
];
|
|
}
|
|
$devisListPerThanatoPerDate[$currentDateFormatted]["devis"][] = $devis;
|
|
$devisListPerThanatoPerDate[$currentDateFormatted]["devisId"][] = $devis['id'];
|
|
}
|
|
$devisListPerThanatoPerDate[$currentDateFormatted]["leaves"] = [];
|
|
$thanatoLeavesThisDay = $this->getThanatoLeaveByCalendarAndDate($thanatoCalendarId,$currentDate);
|
|
foreach($thanatoLeavesThisDay as $currentLeave){
|
|
$leaveTime = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($currentLeave['calendardata']);
|
|
$devisListPerThanatoPerDate[$currentDateFormatted]["leaves"][] = [
|
|
"onLeave" => true,
|
|
"startTime" => $leaveTime["startTime"],
|
|
"endTime" => $leaveTime["endTime"],
|
|
"thanatoName"=>$thanatoName,
|
|
"date" => $currentDateFormatted,
|
|
"totalHours" => $leaveTime["totalHours"],
|
|
"totalWorkedHours" => $leaveTime["totalWorkedHours"],
|
|
"isPublicHoliday" => $isPublicHoliday
|
|
];
|
|
}
|
|
}
|
|
}
|
|
return $devisListPerThanatoPerDate;
|
|
}
|
|
|
|
public function getExportThanatoStatisticData($thanatoId,$month,$year){
|
|
$devisList = $this->getThanatoDevisPerDateInAMonthYear($thanatoId,$month,$year);
|
|
return $devisList;
|
|
}
|
|
|
|
public function getProduitsDevisByDevisId($devisId){
|
|
$sql = "SELECT
|
|
produit_devis.id as produit_devis_id,
|
|
produit.id as produit_id,
|
|
produit.reference as produit_reference,
|
|
produit.description as produit_description
|
|
FROM ".$this->tableprefix."produit_devis as produit_devis
|
|
LEFT JOIN ".$this->tableprefix."produit as produit on produit_devis.produit_id = produit.id
|
|
WHERE produit_devis.devis_id = ?;";
|
|
$produitsList = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[$devisId]);
|
|
|
|
$finalProduitList = [];
|
|
foreach($produitsList as $produit){
|
|
if($produit['produit_id'] != null){
|
|
$finalProduitList[] = $produit;
|
|
}
|
|
}
|
|
return $finalProduitList;
|
|
}
|
|
|
|
private function getDevisListGroupedByDateAndThenByThanato(array $devisListPerDate){
|
|
$devisListGroupedByThanatoAndThenByDate = [];
|
|
foreach($devisListPerDate as $date => $devisList){
|
|
foreach($devisList as $devis){
|
|
$devisDate = $devis["date"];
|
|
$devisThanatoId = $devis["id_thanato"];
|
|
$devis = $this->setDevisStartAndEndTime($devis);
|
|
$devis = $this->setDevisIsPublicHolidayOrNotText($devis);
|
|
$devis = $this->setDevisProduitsList($devis);
|
|
//set devis articles list into devis data
|
|
if (!isset($devisListGroupedByThanatoAndThenByDate[$devisThanatoId])) {
|
|
$devisListGroupedByThanatoAndThenByDate[$devisThanatoId] = [];
|
|
}
|
|
if (!isset($devisListGroupedByThanatoAndThenByDate[$devisThanatoId][$devisDate])) {
|
|
$devisListGroupedByThanatoAndThenByDate[$devisThanatoId][$devisDate] = [
|
|
'total_distance' => 0,
|
|
"devis" => [],
|
|
"devisId" => []
|
|
];
|
|
}
|
|
$devisListGroupedByThanatoAndThenByDate[$devisThanatoId][$date]["devis"][] = $devis;
|
|
$devisListGroupedByThanatoAndThenByDate[$devisThanatoId][$date]["devisId"][] = $devis['id'];
|
|
}
|
|
}
|
|
return $devisListGroupedByThanatoAndThenByDate;
|
|
}
|
|
|
|
private function setDevisProduitsList($devis){
|
|
$produitsList = $this->getProduitsDevisByDevisId($devis['id']);
|
|
foreach($produitsList as $produit){
|
|
if (!isset($devis['produits'])) {
|
|
$devis['produits'] = [];
|
|
}
|
|
$devis['produits'][] = $produit;
|
|
}
|
|
return $devis;
|
|
}
|
|
|
|
private function setDevisIsPublicHolidayOrNotText($devis){
|
|
$isPublicHoliday = DateHelpers::isPublicHoliday($devis['date']);
|
|
$devis["dayType"] = DateHelpers::getPublicHolidayText($isPublicHoliday);
|
|
return $devis;
|
|
}
|
|
|
|
public function setDevisStartAndEndTime($devis){
|
|
$calendarData = $this->getCalendarDataByCalendarObjectUuid($devis["calendar_uuid"]);
|
|
$devisTimeValue = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($calendarData);
|
|
$devis["startTime"] = $devisTimeValue["startTime"];
|
|
$devis["endTime"] = $devisTimeValue["endTime"];
|
|
$devis["totalHours"] = $devisTimeValue["totalHours"];
|
|
$devis["totalWorkedHours"] = $devisTimeValue["totalWorkedHours"];
|
|
return $devis;
|
|
}
|
|
|
|
public function getRouteLinesByDevisIdList(array $devisIdList){
|
|
if(empty($devisIdList)){
|
|
return [];
|
|
}
|
|
$sqlConditionsPlaceholder = implode(',', array_fill(0, count($devisIdList), '?'));
|
|
$sql = "SELECT ligne_trajet.id, ligne_trajet.rang, ligne_trajet.id_nextcloud, ligne_trajet.date,
|
|
ligne_trajet.user_id, ligne_trajet.commentaire, ligne_trajet.source,
|
|
lieu.id as lieu_id, lieu.nom as lieu, lieu.latitude as latitude, lieu.longitude as longitude
|
|
FROM (".$this->tableprefix."ligne_trajet as ligne_trajet
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on ligne_trajet.id_lieu = lieu.id)
|
|
WHERE ligne_trajet.id_devis IN ($sqlConditionsPlaceholder)
|
|
ORDER BY ligne_trajet.date ASC, ligne_trajet.rang ASC;";
|
|
return $this->execSQLNoJsonReturn($sql, $devisIdList);
|
|
}
|
|
|
|
private function getDevisListByThanatoIds(array $thanatoIds){
|
|
if(empty($thanatoIds)){
|
|
return [];
|
|
}
|
|
$currentYear = date('Y');
|
|
$currentMonth = date('m');
|
|
|
|
$sqlConditionsPlaceholder = implode(',', array_fill(0, count($thanatoIds), '?'));
|
|
$sql = "SELECT
|
|
devis.id,
|
|
devis.date,
|
|
devis.mentions,
|
|
devis.num as calendar_uuid,
|
|
devis.id_defunt as id_defunt,
|
|
devis.id_lieu as id_lieu,
|
|
devis.id_client as id_client,
|
|
devis.id_thanato as id_thanato,
|
|
thanato.nom as nom_thanato,
|
|
thanato.prenom as prenom_thanato,
|
|
defunt.nom as nom_defunt,
|
|
lieu.nom as nom_lieu,
|
|
lieu.latitude as lieu_latitude,
|
|
lieu.longitude as lieu_longitude,
|
|
client.nom as nom_client,
|
|
client.entreprise as client_entreprise,
|
|
client.adresse as client_adresse,
|
|
facture.num as facture_num
|
|
FROM ".$this->tableprefix."devis as devis
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on devis.id_thanato = thanato.id
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on devis.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."facture as facture on devis.id = facture.id_devis
|
|
WHERE YEAR(devis.date) = ? AND
|
|
MONTH(devis.date) = ? AND
|
|
devis.id_thanato IN ($sqlConditionsPlaceholder) AND
|
|
(devis.mentions = ? OR devis.mentions = ?)
|
|
ORDER BY devis.date ASC;";
|
|
$devisList = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
array_merge([$currentYear, $currentMonth],$thanatoIds,[DevisMentionConstant::FACTURED,DevisMentionConstant::FACTURED_FORMATTED]));
|
|
return $devisList;
|
|
}
|
|
|
|
public function getCalendarDataByCalendarObjectUuid(string $calendarObjectUuid){
|
|
$sql = "SELECT * FROM ".self::DEFAULT_TABLE_PREFIX."calendarobjects WHERE uid = ?;";
|
|
$calendarObjectList = $this->execSQLNoJsonReturn($sql, [$calendarObjectUuid]);
|
|
if(!empty($calendarObjectList)){
|
|
$calendarDataBlob = $calendarObjectList[0]['calendardata'];
|
|
$calendarDataString = VCalendarHelpers::ReadVCalendarDataBlob($calendarDataBlob);
|
|
return $calendarDataString;
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public function getCalendarPrincipalNameByCalendarId($calendarId){
|
|
$calendar = $this->getCalendarById($calendarId);
|
|
if($calendar != null){
|
|
$principalUri = $calendar["principaluri"];
|
|
$organizerName = str_replace('principals/users/','',$principalUri);
|
|
$organizerName = trim($organizerName);
|
|
return $organizerName;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getCalendarOrganizerNameByCalendarObjectUuid(string $calendarObjectUuid){
|
|
$calendarObject = $this->getCalendarObjectByUuid($calendarObjectUuid);
|
|
if($calendarObject != null){
|
|
return $this->getCalendarPrincipalNameByCalendarId($calendarObject['calendarid']);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getCalendarObjectByUuid(string $calendarObjectUuid){
|
|
$sql = "SELECT * FROM ".self::DEFAULT_TABLE_PREFIX."calendarobjects WHERE uid = ?;";
|
|
$calendarObjectList = $this->execSQLNoJsonReturn($sql, [$calendarObjectUuid]);
|
|
if(!empty($calendarObjectList)){
|
|
$calendarData = $calendarObjectList[0];
|
|
return $calendarData;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getCalendarById(int $calendarId){
|
|
$sql = "SELECT * FROM ".self::DEFAULT_TABLE_PREFIX."calendars WHERE id = ?;";
|
|
$calendarList = $this->execSQLNoJsonReturn($sql, [$calendarId]);
|
|
if(!empty($calendarList)){
|
|
$calendarData = $calendarList[0];
|
|
return $calendarData;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getProduitDevisByDevisId($devisId){
|
|
$sql = "SELECT *
|
|
FROM ".$this->tableprefix ."produit_devis as produit_devis
|
|
WHERE produit_devis.devis_id = ?;";
|
|
|
|
$produitDevisList = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[$devisId]);
|
|
|
|
|
|
return $produitDevisList;
|
|
}
|
|
|
|
public function getDevisProduits($devisId){
|
|
$sql = "SELECT
|
|
produit_devis.id,
|
|
produit_devis.produit_id,
|
|
produit_devis.quantite,
|
|
produit_devis.discount,
|
|
produit_devis.devis_id,
|
|
produit.prix_unitaire as produit_price,
|
|
produit.reference as produit_reference,
|
|
produit.description as produit_description,
|
|
produit.fk_product_type_id as fk_product_type_id,
|
|
produit.vat as produit_vat,
|
|
devis.id_client as devis_client_id
|
|
FROM ".$this->tableprefix ."produit_devis as produit_devis
|
|
LEFT JOIN ".$this->tableprefix."produit as produit on produit_devis.produit_id = produit.id
|
|
LEFT JOIN ".$this->tableprefix."devis as devis on produit_devis.devis_id = devis.id
|
|
WHERE produit_devis.devis_id = ?;";
|
|
|
|
$produitList = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[$devisId]);
|
|
|
|
if(!empty($produitList)){
|
|
$clientId = $produitList[0]["devis_client_id"];
|
|
$client = $this->getClientById($clientId);
|
|
foreach($produitList as &$produit){
|
|
$productPrice = $this->getProductPriceByClientGroupId($client['fk_client_group_id'],$produit['produit_id']);
|
|
$produit['produit_price'] = $productPrice ?? $produit['produit_price'];
|
|
}
|
|
}
|
|
|
|
return $produitList;
|
|
}
|
|
|
|
public function getProductPriceByClientGroupId($clientGroupId,$productId){
|
|
$sql = "SELECT *
|
|
FROM ".$this->tableprefix ."client_group_discount as client_group_discount
|
|
WHERE client_group_discount.fk_client_group_id = ? AND
|
|
client_group_discount.fk_produit_id = ?;
|
|
";
|
|
$clientGroupDiscount = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[$clientGroupId,$productId]);
|
|
if(!empty($clientGroupDiscount)){
|
|
return $clientGroupDiscount[0]['ht_amount'];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private function getProductPriceByClient($productId,$clientId,$productInitialPrice){
|
|
$client = $this->getClientById($clientId);
|
|
if($client != null){
|
|
$productDiscountPrice = $this->getProductPriceByClientGroupId($client['fk_client_group_id'],$productId);
|
|
$productInitialPrice = $productDiscountPrice ?? $productInitialPrice;
|
|
}
|
|
return $productInitialPrice;
|
|
}
|
|
|
|
private function getDevisProductsQuantityByDevisListAndProductId($devisList,$productId){
|
|
if(empty($devisList)){
|
|
return 0;
|
|
}
|
|
$sqlConditionsPlaceholder = implode(',', array_fill(0, count($devisList), '?'));
|
|
$sql = "SELECT
|
|
SUM(produit_devis.quantite) as total_quantity
|
|
FROM ".$this->tableprefix ."produit_devis as produit_devis
|
|
WHERE produit_devis.devis_id IN ($sqlConditionsPlaceholder) AND
|
|
produit_devis.produit_id = ?;";
|
|
|
|
$produitList = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
array_merge($devisList,array($productId)));
|
|
|
|
if(!empty($produitList)){
|
|
return $produitList[0]['total_quantity'];
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
private function getClientFactureStatisticPerMonth($clientId,array $produitList){
|
|
$currentYear = date('Y');
|
|
$monthLists = range(1,12);
|
|
$data = [] ;
|
|
foreach($monthLists as $monthValue){
|
|
if(!isset($data[$monthValue])){
|
|
$data[$monthValue] = [];
|
|
}
|
|
$sql = "SELECT
|
|
facture.id,
|
|
facture.date,
|
|
facture.date_paiement,
|
|
devis.id as devis_id,
|
|
devis.id_client as devis_client_id,
|
|
devis.date as devis_date,
|
|
devis.mentions as devis_mention
|
|
FROM ".$this->tableprefix."facture as facture
|
|
LEFT JOIN ".$this->tableprefix."devis as devis on facture.id_devis = devis.id
|
|
WHERE YEAR(facture.date_paiement) = ? AND
|
|
MONTH(facture.date_paiement) = ? AND
|
|
devis.id_client = ? AND
|
|
(devis.mentions = ? OR devis.mentions = ?)
|
|
ORDER BY facture.date_paiement ASC;";
|
|
$factureList = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[$currentYear,$monthValue,$clientId,DevisMentionConstant::FACTURED,DevisMentionConstant::FACTURED_FORMATTED]);
|
|
|
|
$factureDevisIds = [];
|
|
foreach($factureList as $facture){
|
|
$factureDevisIds[] = $facture['devis_id'];
|
|
}
|
|
|
|
$defuntCount = count($factureList);
|
|
$produitsPrice = 0;
|
|
$statisticForeachProductPerMonth = [];
|
|
foreach($produitList as $produit){
|
|
if(!isset($statisticForeachProductPerMonth[$produit['id']])){
|
|
$statisticForeachProductPerMonth[$produit['id']] = 0;
|
|
}
|
|
$productTotalCount = $this->getDevisProductsQuantityByDevisListAndProductId($factureDevisIds,$produit['id']);
|
|
$totalWithoutVat = $productTotalCount * $produit["prix_unitaire"];
|
|
$statisticForeachProductPerMonth[$produit['id']] += $productTotalCount;
|
|
$produitsPrice += $totalWithoutVat;
|
|
}
|
|
$data[$monthValue] = [
|
|
"defunt_count" => $defuntCount,
|
|
"total_price" => $produitsPrice,
|
|
"year" => $currentYear,
|
|
"products" => $statisticForeachProductPerMonth
|
|
];
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
public function getExportClientStatData(array $clientIds){
|
|
$data = [];
|
|
$produitList = $this->getProduitsListAsArray();
|
|
foreach($clientIds as $clientId){
|
|
if(!isset($data[$clientId])){
|
|
$data[$clientId] = [];
|
|
}
|
|
//get client name
|
|
$clientName = "Default client name";
|
|
$client = $this->getClientById($clientId);
|
|
if($client != null){
|
|
$clientName = trim($client["client_nom"]) . '-' .trim($client['client_entreprise']);
|
|
}
|
|
$data[$clientId]["client_name"] = $clientName;
|
|
$data[$clientId]["client_data"] = $this->getClientFactureStatisticPerMonth($clientId,$produitList);
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
private function getClientById($clientId){
|
|
$sql = "SELECT
|
|
client.id,
|
|
client.nom as client_nom,
|
|
client.prenom as client_prenom,
|
|
client.entreprise as client_entreprise,
|
|
client.legal_one as client_legal_one,
|
|
client.adresse as client_address,
|
|
client.mail as client_mail,
|
|
client.fk_client_group_id as fk_client_group_id
|
|
FROM ".$this->tableprefix."client as client
|
|
WHERE client.id = ?;";
|
|
$clientList = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[$clientId]);
|
|
|
|
if(!empty($clientList)){
|
|
return $clientList[0];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public function getClientsByClientsID(array $clientIds){
|
|
if(empty($clientIds)){
|
|
return [];
|
|
}
|
|
|
|
$sqlConditionsPlaceholder = implode(',', array_fill(0, count($clientIds), '?'));
|
|
$sql = "SELECT
|
|
client.id,
|
|
client.nom as client_nom,
|
|
client.prenom as client_prenom,
|
|
client.entreprise as client_entreprise
|
|
FROM ".$this->tableprefix."client as client
|
|
WHERE client.id IN ($sqlConditionsPlaceholder);";
|
|
$clientList = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
$clientIds);
|
|
|
|
return $clientList;
|
|
}
|
|
|
|
private function getInvoiceGroupDevisDatasByFactureId($factureId){
|
|
$sql = "SELECT
|
|
devis_facture.id as devis_facture_id,
|
|
devis.id as devis_id,
|
|
devis.date as devis_date,
|
|
devis.num as calendar_uuid,
|
|
devis.comment as devis_comment,
|
|
devis.order_number as order_number,
|
|
devis.case_number as case_number,
|
|
client.nom as client_nom,
|
|
client.entreprise as client_entreprise,
|
|
client.adresse as client_adresse,
|
|
client.mail as client_mail,
|
|
client.legal_one as client_legal_one,
|
|
defunt.nom as defunt_nom,
|
|
defunt.sexe as defunt_sexe,
|
|
lieu.nom as lieu_nom,
|
|
lieu.adresse as lieu_adresse,
|
|
thanato.nom as thanato_nom,
|
|
thanato.prenom as thanato_prenom,
|
|
client_group_facturation.id as group_id,
|
|
client_group_facturation.group_facturation_name as group_name,
|
|
client_group_facturation.phone_number as group_phone_number,
|
|
client_group_facturation.address as group_address,
|
|
client_group_facturation.postal_code as group_postal_code,
|
|
client_group_facturation.city as group_city,
|
|
client_group_facturation.email as group_email,
|
|
client_group_facturation.siret_number as group_siret_number,
|
|
client_group_facturation.tva_intracommu as group_tva_intracommu
|
|
FROM ".$this->tableprefix."devis_facture as devis_facture
|
|
LEFT JOIN ".$this->tableprefix."devis as devis on devis_facture.fk_devis_id = devis.id
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on devis.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on devis.id_thanato = thanato.id
|
|
LEFT JOIN ".$this->tableprefix."client_group_facturation as client_group_facturation on client.fk_client_group_facturation_id = client_group_facturation.id
|
|
WHERE devis_facture.fk_facture_id = ?
|
|
;";
|
|
$devis = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[$factureId]);
|
|
|
|
return $devis;
|
|
}
|
|
|
|
public function getFactureByFactureId($factureId){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."facture as facture
|
|
WHERE facture.id = ? LIMIT 1;
|
|
";
|
|
|
|
$result = $this->execSQLNoJsonReturn($sql,[$factureId]);
|
|
if(!empty($result)){
|
|
return $result[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getInvoiceGroupPdfData($factureId,$configuration){
|
|
$tvaValue = $configuration->tva_default;
|
|
$factureData = $this->getFactureByFactureId($factureId);
|
|
$isFactureForSingleClient = $factureData['fk_client_id'] != null && $factureData['fk_client_id'] != 0;
|
|
$devisMentionFilters = [
|
|
DevisMentionConstant::FACTURED_FORMATTED,
|
|
DevisMentionConstant::FACTURED
|
|
];
|
|
if($isFactureForSingleClient){
|
|
$factureDevisList = $this->getDevisDataByClientIdAndMonthYear(
|
|
$factureData['fk_client_id'],
|
|
$factureData['month'],
|
|
$factureData['year'],$devisMentionFilters
|
|
);
|
|
}
|
|
else{
|
|
$factureDevisList = $this->getDevisDataByClientGroupFacturationIdAndMonthYear(
|
|
$factureData['fk_client_group_facturation_id'],
|
|
$factureData['month'],
|
|
$factureData['year'],$devisMentionFilters
|
|
);
|
|
}
|
|
$factureIncrement = 0;
|
|
$productsCount = 0;
|
|
$totalHt = 0;
|
|
$totalTtc = 0;
|
|
$totalTva = 0;
|
|
$templateType = ClientTemplateTypeConstant::PRIVEES;
|
|
foreach($factureDevisList as &$devis){
|
|
if($factureIncrement == 0){
|
|
if($isFactureForSingleClient){
|
|
$clientAddresses = FileExportHelpers::GetAddressAndCityFromAddress($devis['client_adresse']);
|
|
$factureData["client_real_adress"] = $clientAddresses['address'];
|
|
$factureData["client_adress_city"] = $clientAddresses['city'];
|
|
$factureData["client_mail"] = $devis["client_mail"];
|
|
$factureData["siret"] = $devis["client_legal_one"];
|
|
$factureData["group_name"] = $devis["client_nom"] ?? "";
|
|
}
|
|
else{
|
|
$factureData["client_real_adress"] = $devis["group_address"] ?? "";
|
|
$factureData["client_adress_city"] = $devis["group_postal_code"]." ".$devis["group_city"];
|
|
$factureData["client_mail"] = $devis["group_email"];
|
|
$factureData["siret"] = $devis["group_siret_number"];
|
|
$factureData["group_name"] = $devis["group_name"] ?? "";
|
|
$templateType = $devis['fk_template_type_key'] ?? ClientTemplateTypeConstant::PRIVEES;
|
|
}
|
|
}
|
|
$products = $this->getDevisProduits($devis["devis_id"]);
|
|
if(count($products) > 1){
|
|
usort($products, function ($a, $b) {
|
|
if ($a["fk_product_type_id"] === null && $b["fk_product_type_id"] !== null) {
|
|
return -1;
|
|
}
|
|
if ($a["fk_product_type_id"] !== null && $b["fk_product_type_id"] === null) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
});
|
|
}
|
|
foreach($products as $product){
|
|
$valueHt = $product['produit_price'] * $product['quantite'];
|
|
$valueTtc = PriceHelpers::calculPriceWithVatValue($valueHt,$tvaValue);
|
|
$totalHt+=$valueHt;
|
|
$totalTtc+=$valueTtc;
|
|
$tvaAmount = $valueTtc - $valueHt;
|
|
$totalTva += $tvaAmount;
|
|
}
|
|
$productsCount += count($products);
|
|
$devis['products'] = $products;
|
|
$factureIncrement++;
|
|
}
|
|
$totaPricesArray = [
|
|
"TOTAL HT" => $totalHt,
|
|
"TVA ".$tvaValue. "%" => $totalTva,
|
|
"TOTAL TTC" => $totalTtc
|
|
];
|
|
$factureData["devis"] = $factureDevisList;
|
|
$factureData["configuration"] = $configuration;
|
|
$configurationAdresses = FileExportHelpers::GetAddressAndCityFromAddress($configuration->adresse);
|
|
$factureData["configuration_adresse"] = $configurationAdresses["address"];
|
|
$factureData["configuration_adresse_city"] = $configurationAdresses["city"];
|
|
$factureData["productsCount"] = $productsCount;
|
|
$factureData["totalPrices"] = $totaPricesArray;
|
|
$factureData["template_type_key"] = $templateType;
|
|
return $factureData;
|
|
}
|
|
|
|
public function getInvoicePdfData($factureId,$configuration){
|
|
$factureData = $this->getFactureByIdWithDevis($factureId);
|
|
if($factureData == null){
|
|
return null;
|
|
}
|
|
$products = $this->getDevisProduits($factureData["devis_id"]);
|
|
$factureData = $this->setDevisStartAndEndTime($factureData);
|
|
|
|
$factureData["products"] = $products;
|
|
$factureData["configuration"] = $configuration;
|
|
|
|
$isClientInsideGroup = $factureData["group_id"] != null;
|
|
if($isClientInsideGroup){
|
|
$factureData["client_real_adress"] = $factureData["group_address"];
|
|
$factureData["client_adress_city"] = $factureData["group_postal_code"]." ".$factureData["group_city"];
|
|
$factureData["client_mail"] = $factureData["group_email"];
|
|
$factureData["siret"] = $factureData["group_siret_number"];
|
|
}
|
|
else{
|
|
$factureData["siret"] = $factureData["client_legal_one"];
|
|
$clientAdresses = FileExportHelpers::GetAddressAndCityFromAddress($factureData["client_adresse"]);
|
|
$factureData["client_real_adress"] = $clientAdresses["address"];
|
|
$factureData["client_adress_city"] = $clientAdresses["city"];
|
|
}
|
|
|
|
$configurationAdresses = FileExportHelpers::GetAddressAndCityFromAddress($configuration->adresse);
|
|
$factureData["configuration_adresse"] = $configurationAdresses["address"];
|
|
$factureData["configuration_adresse_city"] = $configurationAdresses["city"];
|
|
return $factureData;
|
|
}
|
|
|
|
private function getDevisByClientAndMonthYear($clientId,$month,$year){
|
|
$sql = "SELECT
|
|
devis.id as devis_id,
|
|
devis.date as devis_date,
|
|
devis.num as calendar_uuid,
|
|
devis.comment as devis_comment,
|
|
devis.id_client as devis_id_client,
|
|
client.nom as client_nom,
|
|
client.entreprise as client_entreprise,
|
|
client.adresse as client_adresse,
|
|
defunt.nom as defunt_nom,
|
|
defunt.sexe as defunt_sexe,
|
|
lieu.nom as lieu_nom,
|
|
lieu.adresse as lieu_adresse,
|
|
thanato.nom as thanato_nom,
|
|
thanato.prenom as thanato_prenom
|
|
FROM ".$this->tableprefix."devis as devis
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on devis.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on devis.id_thanato = thanato.id
|
|
WHERE devis.id_client = ? AND
|
|
YEAR(devis.date) = ?";
|
|
|
|
$conditions = [$clientId,$year];
|
|
if($month != 0){
|
|
$conditions[] = $month;
|
|
$sql .= " AND MONTH(devis.date) = ?";
|
|
}
|
|
$sql .= ";";
|
|
$devisList = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
$conditions);
|
|
|
|
return $devisList;
|
|
}
|
|
|
|
public function getDevisPdfDataByClientAndMonthYear($clientId,$month,$year,$configuration){
|
|
$devisList = $this->getDevisByClientAndMonthYear($clientId,$month,$year);
|
|
return $devisList;
|
|
}
|
|
|
|
public function getInvoicePdfDataByClientAndMonthYear($filter,$month,$year,$configuration,$filterType){
|
|
$isFilterByClient = $filterType === MultipleFactureTypeConstant::CLIENT_FILTER_TYPE;
|
|
if($isFilterByClient){
|
|
$invoices = $this->getInvoiceByClientAndMonthYear(
|
|
clientId: $filter,
|
|
month: $month,
|
|
year: $year
|
|
);
|
|
}
|
|
else{
|
|
$invoices = $this->getInvoiceByClientGroupFacturationAndMonthYear(
|
|
clientGroupFacturationId: $filter,
|
|
month: $month,
|
|
year: $year
|
|
);
|
|
}
|
|
foreach($invoices as &$invoice){
|
|
$products = $this->getDevisProduits($invoice["devis_id"]);
|
|
$invoice["products"] = $products;
|
|
$invoice["configuration"] = $configuration;
|
|
|
|
$isClientInsideGroup = $invoice["group_id"] != null;
|
|
if($isClientInsideGroup){
|
|
$invoice["client_real_adress"] = $invoice["group_address"];
|
|
$invoice["client_adress_city"] = $invoice["group_postal_code"]." ".$invoice["group_city"];
|
|
$invoice["client_mail"] = $invoice["group_email"];
|
|
$invoice["siret"] = $invoice["group_siret_number"];
|
|
}
|
|
else{
|
|
$invoice["siret"] = $invoice["client_legal_one"];
|
|
$clientAdresses = FileExportHelpers::GetAddressAndCityFromAddress($invoice["client_adresse"]);
|
|
$invoice["client_real_adress"] = $clientAdresses["address"];
|
|
$invoice["client_adress_city"] = $clientAdresses["city"];
|
|
}
|
|
|
|
$configurationAdresses = FileExportHelpers::GetAddressAndCityFromAddress($configuration->adresse);
|
|
$invoice["configuration_adresse"] = $configurationAdresses["address"];
|
|
$invoice["configuration_adresse_city"] = $configurationAdresses["city"];
|
|
}
|
|
return $invoices;
|
|
}
|
|
|
|
private function getClientIdsByClientGroupFacturationId($clientGroupFacturationId){
|
|
$sql = "SELECT client.id
|
|
FROM ".$this->tableprefix."client as client
|
|
WHERE client.fk_client_group_facturation_id = ? ;";
|
|
|
|
$clientIds = [];
|
|
$clients = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[$clientGroupFacturationId]);
|
|
|
|
if(!empty($clients)){
|
|
foreach($clients as $client){
|
|
$clientIds[] = $client["id"];
|
|
}
|
|
}
|
|
return $clientIds;
|
|
}
|
|
|
|
private function getInvoiceByClientIdsListAndMonthYear($clientIds,$month,$year){
|
|
|
|
$clientIdsSqlPlaceholder = implode(',', array_fill(0, count($clientIds), '?'));
|
|
$sql = "SELECT
|
|
facture.id,
|
|
facture.date,
|
|
facture.date_paiement,
|
|
facture.num,
|
|
devis.id as devis_id,
|
|
devis.date as devis_date,
|
|
devis.num as calendar_uuid,
|
|
devis.comment as devis_comment,
|
|
devis.id_client as devis_id_client,
|
|
devis.order_number as order_number,
|
|
devis.case_number as case_number,
|
|
client.nom as client_nom,
|
|
client.prenom as client_prenom,
|
|
client.entreprise as client_entreprise,
|
|
client.adresse as client_adresse,
|
|
client.mail as client_mail,
|
|
client.legal_one as client_legal_one,
|
|
defunt.nom as defunt_nom,
|
|
defunt.sexe as defunt_sexe,
|
|
lieu.nom as lieu_nom,
|
|
lieu.adresse as lieu_adresse,
|
|
thanato.nom as thanato_nom,
|
|
thanato.prenom as thanato_prenom,
|
|
client_group_facturation.group_facturation_name as group_name,
|
|
client_group_facturation.id as group_id,
|
|
client_group_facturation.phone_number as group_phone_number,
|
|
client_group_facturation.address as group_address,
|
|
client_group_facturation.postal_code as group_postal_code,
|
|
client_group_facturation.city as group_city,
|
|
client_group_facturation.email as group_email,
|
|
client_group_facturation.siret_number as group_siret_number,
|
|
client_group_facturation.tva_intracommu as group_tva_intracommu,
|
|
'group' as facture_type
|
|
FROM ".$this->tableprefix."facture as facture
|
|
LEFT JOIN ".$this->tableprefix."devis as devis on facture.id_devis = devis.id
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on devis.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on devis.id_thanato = thanato.id
|
|
LEFT JOIN ".$this->tableprefix."client_group_facturation as client_group_facturation on client.fk_client_group_facturation_id = client_group_facturation.id
|
|
WHERE client.id IN ($clientIdsSqlPlaceholder) AND
|
|
YEAR(facture.date_paiement) = ?";
|
|
|
|
$conditions = array_merge($clientIds,[$year]);
|
|
if($month != 0){
|
|
$conditions[] = $month;
|
|
$sql .= " AND MONTH(facture.date_paiement) = ?";
|
|
}
|
|
$sql .= ";";
|
|
$factures = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
$conditions);
|
|
|
|
return $factures;
|
|
}
|
|
|
|
private function getInvoiceByClientGroupFacturationAndMonthYear($clientGroupFacturationId,$month, $year){
|
|
$clientIdsInsideClientFacturationGroup = $this->getClientIdsByClientGroupFacturationId($clientGroupFacturationId);
|
|
if(empty($clientIdsInsideClientFacturationGroup)){
|
|
return [];
|
|
}
|
|
return $this->getInvoiceByClientIdsListAndMonthYear($clientIdsInsideClientFacturationGroup,$month,$year);
|
|
}
|
|
|
|
private function getInvoiceByClientAndMonthYear($clientId,$month,$year){
|
|
$sql = "SELECT
|
|
facture.id,
|
|
facture.date,
|
|
facture.date_paiement,
|
|
facture.num,
|
|
devis.id as devis_id,
|
|
devis.date as devis_date,
|
|
devis.num as calendar_uuid,
|
|
devis.comment as devis_comment,
|
|
devis.id_client as devis_id_client,
|
|
devis.order_number as order_number,
|
|
devis.case_number as case_number,
|
|
client.nom as client_nom,
|
|
client.prenom as client_prenom,
|
|
client.entreprise as client_entreprise,
|
|
client.adresse as client_adresse,
|
|
client.legal_one as client_legal_one,
|
|
client.mail as client_mail,
|
|
defunt.nom as defunt_nom,
|
|
defunt.sexe as defunt_sexe,
|
|
lieu.nom as lieu_nom,
|
|
lieu.adresse as lieu_adresse,
|
|
thanato.nom as thanato_nom,
|
|
thanato.prenom as thanato_prenom,
|
|
client_group_facturation.id as group_id,
|
|
client_group_facturation.group_facturation_name as group_name,
|
|
client_group_facturation.phone_number as group_phone_number,
|
|
client_group_facturation.address as group_address,
|
|
client_group_facturation.postal_code as group_postal_code,
|
|
client_group_facturation.city as group_city,
|
|
client_group_facturation.email as group_email,
|
|
client_group_facturation.siret_number as group_siret_number,
|
|
client_group_facturation.tva_intracommu as group_tva_intracommu,
|
|
'client' as facture_type
|
|
FROM ".$this->tableprefix."facture as facture
|
|
LEFT JOIN ".$this->tableprefix."devis as devis on facture.id_devis = devis.id
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on devis.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on devis.id_thanato = thanato.id
|
|
LEFT JOIN ".$this->tableprefix."client_group_facturation as client_group_facturation on client.fk_client_group_facturation_id = client_group_facturation.id
|
|
WHERE client.id = ? AND
|
|
YEAR(facture.date_paiement) = ?";
|
|
|
|
$conditions = [$clientId,$year];
|
|
if($month != 0){
|
|
$conditions[] = $month;
|
|
$sql .= " AND MONTH(facture.date_paiement) = ?";
|
|
}
|
|
$sql .= ";";
|
|
$factures = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
$conditions);
|
|
|
|
return $factures;
|
|
}
|
|
|
|
public function getDevisPdfDataByDevisId($devisId){
|
|
$sql = "SELECT
|
|
devis.id as devis_id,
|
|
devis.date as devis_date,
|
|
devis.num as calendar_uuid,
|
|
devis.devis_full_number as devis_full_number,
|
|
devis.comment as devis_comment,
|
|
client.nom as client_nom,
|
|
client.entreprise as client_entreprise,
|
|
client.adresse as client_adresse,
|
|
defunt.nom as defunt_nom,
|
|
defunt.sexe as defunt_sexe,
|
|
lieu.nom as lieu_nom,
|
|
lieu.adresse as lieu_adresse,
|
|
thanato.nom as thanato_nom,
|
|
thanato.prenom as thanato_prenom
|
|
FROM ".$this->tableprefix."devis as devis
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on devis.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on devis.id_thanato = thanato.id
|
|
WHERE devis.id = ?
|
|
;";
|
|
$devis = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[$devisId]);
|
|
if(!empty($devis)){
|
|
return $devis[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private function getFactureByIdWithDevis($factureId){
|
|
$sql = "SELECT
|
|
facture.id,
|
|
facture.date,
|
|
facture.date_paiement,
|
|
facture.num,
|
|
devis.id as devis_id,
|
|
devis.date as devis_date,
|
|
devis.num as calendar_uuid,
|
|
devis.comment as devis_comment,
|
|
devis.order_number as order_number,
|
|
devis.case_number as case_number,
|
|
client.nom as client_nom,
|
|
client.entreprise as client_entreprise,
|
|
client.adresse as client_adresse,
|
|
client.mail as client_mail,
|
|
client.legal_one as client_legal_one,
|
|
defunt.nom as defunt_nom,
|
|
defunt.sexe as defunt_sexe,
|
|
lieu.nom as lieu_nom,
|
|
lieu.adresse as lieu_adresse,
|
|
thanato.nom as thanato_nom,
|
|
thanato.prenom as thanato_prenom,
|
|
client_group_facturation.id as group_id,
|
|
client_group_facturation.group_facturation_name as group_name,
|
|
client_group_facturation.phone_number as group_phone_number,
|
|
client_group_facturation.address as group_address,
|
|
client_group_facturation.postal_code as group_postal_code,
|
|
client_group_facturation.city as group_city,
|
|
client_group_facturation.email as group_email,
|
|
client_group_facturation.siret_number as group_siret_number,
|
|
client_group_facturation.tva_intracommu as group_tva_intracommu
|
|
FROM ".$this->tableprefix."facture as facture
|
|
LEFT JOIN ".$this->tableprefix."devis as devis on facture.id_devis = devis.id
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on devis.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on devis.id_thanato = thanato.id
|
|
LEFT JOIN ".$this->tableprefix."client_group_facturation as client_group_facturation on client.fk_client_group_facturation_id = client_group_facturation.id
|
|
WHERE facture.id = ?
|
|
;";
|
|
$facture = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[$factureId]);
|
|
if(!empty($facture)){
|
|
return $facture[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getProduitsListAsArray(){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."produit as produit;";
|
|
|
|
$produitList = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[]);
|
|
|
|
return $produitList;
|
|
}
|
|
|
|
public function getArticleIdsByArticleReferences(array $articleReferences){
|
|
$articleIds = [];
|
|
foreach ($articleReferences as $reference) {
|
|
$reference = trim($reference);
|
|
$sql = "SELECT id FROM ".$this->tableprefix."produit WHERE reference = ?";
|
|
$res = $this->execSQLNoJsonReturn($sql, array($reference));
|
|
if ($res) {
|
|
$articleIds[] = $res[0]['id'];
|
|
}
|
|
}
|
|
return $articleIds;
|
|
}
|
|
|
|
public function addNumberColumnOnDevis(){
|
|
$sql = "ALTER TABLE ". $this->tableprefix."devis
|
|
ADD devis_number INT DEFAULT 1;" ;
|
|
$this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[]);
|
|
|
|
$sql = "ALTER TABLE ". $this->tableprefix."devis
|
|
ADD devis_full_number VARCHAR(255);" ;
|
|
$this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[]);
|
|
|
|
$sql = "UPDATE ".$this->tableprefix."devis as devis
|
|
SET devis.devis_full_number = CONCAT('DEV', YEAR(devis.date) % 100, LPAD(MONTH(devis.date), 2, '0'), LPAD(devis.devis_number, 2, '0'));";
|
|
$this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[]);
|
|
|
|
return true;
|
|
}
|
|
|
|
public function addNumberColumnOnFacture(){
|
|
$sql = "ALTER TABLE ". $this->tableprefix."facture
|
|
ADD facture_number INT DEFAULT 1;" ;
|
|
$this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[]);
|
|
|
|
$sql = "UPDATE ".$this->tableprefix."facture as facture
|
|
SET facture.num = CONCAT('FAC', YEAR(facture.date) % 100, LPAD(MONTH(facture.date), 2, '0'), LPAD(facture.facture_number, 2, '0'));";
|
|
$this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[]);
|
|
|
|
return true;
|
|
}
|
|
|
|
private function getLastFactureNumberByMonthAndYear($month,$year){
|
|
$sql = "SELECT
|
|
max(facture.facture_number) as LAST_FACTURE_NUMBER, facture.date FROM "
|
|
. $this->tableprefix."facture as facture
|
|
WHERE YEAR(facture.date) = ? AND
|
|
MONTH(facture.date) = ?;";
|
|
$res = $this->execSQLNoJsonReturn($sql,array($year,$month));
|
|
$lastNumber = 0;
|
|
if(!empty($res)){
|
|
$lastNumber = $res[0]['LAST_FACTURE_NUMBER'];
|
|
}
|
|
return $lastNumber;
|
|
}
|
|
|
|
public function getFactureNumberByDate($datetime){
|
|
$month = $datetime->format('m');
|
|
$year = $datetime->format('Y');
|
|
$lastFactureNumber = $this->getLastFactureNumberByMonthAndYear($month,$year);
|
|
$factureNumber = $lastFactureNumber + 1;
|
|
return $factureNumber;
|
|
}
|
|
|
|
public function getFactureFullNumberByDate($datetime){
|
|
$factureNumber = $this->getFactureNumberByDate($datetime);
|
|
$factureFullNumber = DateHelpers::GetFullFactureOrDevisNumberByDate($datetime,$factureNumber,'FAC');
|
|
return $factureFullNumber;
|
|
}
|
|
|
|
public function getDevisNumberByDate($datetime){
|
|
$month = $datetime->format('m');
|
|
$year = $datetime->format('Y');
|
|
$lastDevisNumber = $this->getLastDevisNumberByMonthAndYear($month,$year);
|
|
$devisNumber = $lastDevisNumber + 1;
|
|
return $devisNumber;
|
|
}
|
|
|
|
public function getDevisFullNumberByDate($datetime){
|
|
$devisNumber = $this->getDevisNumberByDate($datetime);
|
|
$devisFullNumber = DateHelpers::GetFullFactureOrDevisNumberByDate($datetime,$devisNumber,'DEV');
|
|
return $devisFullNumber;
|
|
}
|
|
|
|
public function getFirstClient(){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."client as client LIMIT 1;";
|
|
$client = $this->execSQLNoJsonReturn(
|
|
$sql,
|
|
[]);
|
|
|
|
if(!empty($client)){
|
|
return $client[0];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public function getClientGroupDiscounts(){
|
|
|
|
$sql = "SELECT
|
|
client_group_discount.id as id,
|
|
client_group_discount.fk_client_group_id as fk_client_group_id,
|
|
client_group_discount.fk_produit_id as fk_produit_id,
|
|
client_group_discount.ht_amount as ht_amount,
|
|
client_group.client_group_name as client_group_name,
|
|
produit.id as produit_id,
|
|
produit.reference as produit_reference,
|
|
produit.prix_unitaire as prix_unitaire
|
|
FROM ".$this->tableprefix."client_group_discount as client_group_discount
|
|
LEFT JOIN ".$this->tableprefix."client_group as client_group on client_group_discount.fk_client_group_id = client_group.id
|
|
LEFT JOIN ".$this->tableprefix."produit as produit on client_group_discount.fk_produit_id = produit.id
|
|
ORDER BY client_group_discount.id DESC
|
|
";
|
|
|
|
$clientGroupDiscounts = $this->execSQL(
|
|
$sql,
|
|
[]);
|
|
|
|
return $clientGroupDiscounts;
|
|
}
|
|
|
|
public function getClientGroups(){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."client_group as client_group ORDER BY client_group.id DESC;";
|
|
$clientGroups = $this->execSQL($sql,[]);
|
|
return $clientGroups;
|
|
}
|
|
|
|
public function createDefaultClientGroup(){
|
|
$sql = "INSERT INTO `".$this->tableprefix."client_group` (`client_group_name`) VALUES (?);";
|
|
$this->execSQLNoData($sql, array(self::DEFAULT_CLIENT_GROUP_NAME));
|
|
return true;
|
|
}
|
|
|
|
public function createDefaultClientGroupDiscount(){
|
|
$sql = "INSERT INTO `".$this->tableprefix."client_group_discount` (`fk_client_group_id`,`fk_produit_id`,`ht_amount`) VALUES (0,0,0);";
|
|
$this->execSQLNoData($sql, array());
|
|
return true;
|
|
}
|
|
|
|
public function getClientGroupCount(){
|
|
$sql = "SELECT count(*) as c from ".$this->tableprefix."client_group;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function getClientGroupDiscountCount(){
|
|
$sql = "SELECT count(*) as c from ".$this->tableprefix."client_group_discount;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function addClientGroupDiscountFeatureTables(){
|
|
$createTableClientGroupSQL = "CREATE TABLE oc_gestion_client_group (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
client_group_name VARCHAR(255) DEFAULT ''
|
|
);";
|
|
|
|
$this->execSQLNoData($createTableClientGroupSQL,[]);
|
|
|
|
$addColumnFkClientGroupIdIntoClientTableSQL= "ALTER TABLE oc_gestion_client
|
|
ADD fk_client_group_id INT NULL;";
|
|
|
|
$this->execSQLNoData($addColumnFkClientGroupIdIntoClientTableSQL,[]);
|
|
|
|
$createTableClientGroupDiscountSQL = "CREATE TABLE oc_gestion_client_group_discount (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
fk_client_group_id INT NOT NULL,
|
|
fk_produit_id INT NOT NULL,
|
|
ht_amount FLOAT NOT NULL
|
|
);";
|
|
|
|
$this->execSQLNoData($createTableClientGroupDiscountSQL,[]);
|
|
|
|
return true;
|
|
}
|
|
|
|
public function getDevisOfDefunt($defuntId){
|
|
$sql = "SELECT
|
|
devis.id as id,
|
|
devis.date as devis_date,
|
|
devis.id_defunt as defunt_id,
|
|
devis.id_lieu as lieu_id,
|
|
lieu.nom as lieu_nom,
|
|
lieu.adresse as lieu_adresse,
|
|
defunt.nom as defunt_nom,
|
|
defunt.sexe as defunt_sexe,
|
|
defunt.ref_pacemaker as defunt_reference_pacemaker,
|
|
defunt.product_brand as defunt_product_brand,
|
|
defunt.product_reference as defunt_product_reference,
|
|
client.nom as client_nom,
|
|
client.prenom as client_prenom,
|
|
client.mail as client_mail,
|
|
client.entreprise as client_entreprise,
|
|
client.adresse as client_adresse,
|
|
thanato.nom as thanato_nom,
|
|
thanato.prenom as thanato_prenom,
|
|
thanato.reference as thanato_reference,
|
|
thanato.date_habilitation as thanato_date_habilitation
|
|
FROM ".$this->tableprefix."devis as devis
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on devis.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on devis.id_thanato = thanato.id
|
|
WHERE devis.id_defunt = ? ;";
|
|
|
|
$devisOfDefunt = $this->execSQLNoJsonReturn($sql, [$defuntId]);
|
|
|
|
if(!empty( $devisOfDefunt)){
|
|
return $devisOfDefunt[0];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private function getDefuntById($defuntId){
|
|
$sql = "SELECT
|
|
defunt.id as id,
|
|
defunt.nom as defunt_nom,
|
|
devis.id as devis_id
|
|
FROM ".$this->tableprefix."defunt as defunt
|
|
LEFT JOIN ".$this->tableprefix."devis as devis on defunt.id = devis.id_defunt
|
|
WHERE defunt.id = ?
|
|
LIMIT 1;";
|
|
|
|
$defunt = $this->execSQLNoJsonReturn($sql,[$defuntId]);
|
|
if(!empty($defunt)){
|
|
return $defunt[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private function getProductAsDefuntCoverProduct($productCoverId){
|
|
$product = $this->getProductByProductId($productCoverId);
|
|
if($product == null){
|
|
return null;
|
|
}
|
|
$productCoverType = $this->getProductTypeByKey(ProductConstant::PRODUCT_COVER_TYPE_KEY);
|
|
if($product["fk_product_type_id"] == $productCoverType["id"]){
|
|
return $product;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private function isProductAlreadyExistInDevis($productId,$devisId){
|
|
$sql = "SELECT
|
|
produit_devis.id
|
|
FROM ".$this->tableprefix."produit_devis as produit_devis
|
|
WHERE produit_devis.produit_id = ? AND
|
|
produit_devis.devis_id = ?
|
|
LIMIT 1;";
|
|
|
|
$product = $this->execSQLNoJsonReturn($sql,[$productId,$devisId]);
|
|
if(!empty($product)){
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private function removeProductFromDevis($productId,$devisId){
|
|
$sql = "DELETE
|
|
FROM ".
|
|
$this->tableprefix."produit_devis
|
|
WHERE devis_id = ? AND produit_id = ?
|
|
";
|
|
$this->execSQLNoData($sql,[$devisId,$productId]);
|
|
}
|
|
|
|
private function getProductByReference($productReference){
|
|
$sql = "SELECT
|
|
produit.id,
|
|
produit.reference
|
|
FROM ".$this->tableprefix."produit as produit
|
|
WHERE produit.reference = ?
|
|
LIMIT 1;";
|
|
|
|
$product = $this->execSQLNoJsonReturn($sql,[$productReference]);
|
|
if(!empty($product)){
|
|
return $product[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private function removeProductFromDevisByProductReference($productReference,$devisId){
|
|
$product = $this->getProductByReference($productReference);
|
|
if($product != null){
|
|
$this->removeProductFromDevis($product["id"],$devisId);
|
|
}
|
|
}
|
|
|
|
private function createProductDevisIfNotExist($productId,$devisId){
|
|
$isProductDevisAlreadyExist = $this->isProductAlreadyExistInDevis($productId,$devisId);
|
|
if(!$isProductDevisAlreadyExist){
|
|
$idNextcloud = "admin";
|
|
$this->insertDevisArticle(devisId: $devisId, articleId: $productId,idNextcloud: $idNextcloud);
|
|
}
|
|
}
|
|
|
|
private function getProductByProductId($productId){
|
|
$sql = "SELECT
|
|
produit.id,
|
|
produit.reference,
|
|
produit.fk_product_type_id
|
|
FROM ".$this->tableprefix."produit as produit
|
|
WHERE produit.id = ?
|
|
LIMIT 1;";
|
|
|
|
$result = $this->execSQLNoJsonReturn($sql,[$productId]);
|
|
if(!empty($result)){
|
|
return $result[0];
|
|
}
|
|
return null;
|
|
}
|
|
public function setDefuntCover($defuntId, $productCoverId){
|
|
$defunt = $this->getDefuntById($defuntId);
|
|
if($defunt == null){
|
|
return null;
|
|
}
|
|
if($defunt["devis_id"] == null){
|
|
return null;
|
|
}
|
|
$product = $this->getProductAsDefuntCoverProduct($productCoverId);
|
|
if($product == null){
|
|
return null;
|
|
}
|
|
|
|
$coverProductList = $this->getProductsByProductTypeKey(ProductConstant::PRODUCT_COVER_TYPE_KEY);
|
|
$coverProductList = json_decode($coverProductList);
|
|
foreach($coverProductList as $currentCoverProduct){
|
|
if($currentCoverProduct->id == $product["id"]){
|
|
$this->createProductDevisIfNotExist($product["id"],$defunt["devis_id"]);
|
|
}
|
|
else{
|
|
$this->removeProductFromDevis($currentCoverProduct->id,$defunt["devis_id"]);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private function getProductsByProductTypeKey(string $productTypeKey){
|
|
$sql = "SELECT
|
|
produit.id,
|
|
produit.reference,
|
|
produit.description
|
|
FROM ".$this->tableprefix."produit as produit
|
|
LEFT JOIN ".$this->tableprefix."product_type as product_type on produit.fk_product_type_id = product_type.id
|
|
WHERE product_type.product_type_key = ?;";
|
|
|
|
$products = $this->execSQL($sql,[$productTypeKey]);
|
|
return $products;
|
|
}
|
|
|
|
public function getCoverProducts(){
|
|
return $this->getProductsByProductTypeKey(ProductConstant::PRODUCT_COVER_TYPE_KEY);
|
|
}
|
|
|
|
private function getProductTypeByKey(string $key){
|
|
$sql = "SELECT
|
|
product_type.id,
|
|
product_type.product_type_name,
|
|
product_type.product_type_key
|
|
FROM ".$this->tableprefix."product_type as product_type
|
|
WHERE product_type.product_type_key = ?;";
|
|
|
|
$productType = $this->execSQLNoJsonReturn($sql,[$key]);
|
|
if(!empty($productType)){
|
|
return $productType[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private function getProductCoverByDevisId($devisId){
|
|
|
|
$coverProductType = $this->getProductTypeByKey(ProductConstant::PRODUCT_COVER_TYPE_KEY);
|
|
$sql = "SELECT
|
|
produit_devis.id,
|
|
produit.id as produit_id,
|
|
produit.reference,
|
|
produit.description,
|
|
produit.fk_product_type_id
|
|
FROM ".$this->tableprefix."produit_devis as produit_devis
|
|
LEFT JOIN ".$this->tableprefix."produit as produit on produit_devis.produit_id = produit.id
|
|
WHERE produit_devis.devis_id = ? AND
|
|
produit.fk_product_type_id = ? LIMIT 1";
|
|
|
|
$productCover = $this->execSQLNoJsonReturn($sql,[$devisId,$coverProductType["id"]]);
|
|
if($productCover){
|
|
return $productCover[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private function getDevisByIdWithCalendarDataAndProducts($devisId,$idNextcloud){
|
|
$devis = $this->getOneDevis($devisId,$idNextcloud);
|
|
$devis= json_decode($devis);
|
|
if(empty($devis)){
|
|
return null;
|
|
}
|
|
$devis = $devis[0];
|
|
if(isset($devis->numm) && $devis->num == null){
|
|
return null;
|
|
}
|
|
$calendarData = $this->getCalendarDataByCalendarObjectUuid($devis->num);
|
|
$devisTimeValue = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($calendarData);
|
|
$devis->startTime = $devisTimeValue["startTime"];
|
|
$devis->endTime = $devisTimeValue["endTime"];
|
|
$devisProducts = $this->getDevisProduits($devisId);
|
|
$devisProducts = json_encode($devisProducts);
|
|
$devisProducts = json_decode($devisProducts);
|
|
$devis->products = $devisProducts;
|
|
return $devis;
|
|
}
|
|
|
|
private function getDevisTalkRoomProductSectionMessage($devisProducts){
|
|
if(empty($devisProducts)){
|
|
return "";
|
|
}
|
|
$productMessage = ". ACTE A FAIRE : ";
|
|
foreach($devisProducts as $product){
|
|
$productMessage.= html_entity_decode($product->produit_reference).", ";
|
|
}
|
|
$productMessage = trim( $productMessage );
|
|
$productMessage = rtrim($productMessage,",");
|
|
return $productMessage;
|
|
}
|
|
|
|
private function getDevisTalkRoomClientContent($clientPrenom){
|
|
$message = ". Pour PF: ";
|
|
$clientNameContent = "aucun";
|
|
$clientPrenomIsSet = $clientPrenom != null && $clientPrenom != "" && $clientPrenom != "-";
|
|
if($clientPrenomIsSet){
|
|
$clientNameContent = html_entity_decode($clientPrenom);
|
|
}
|
|
$message .= $clientNameContent;
|
|
return $message;
|
|
}
|
|
|
|
|
|
public function getDevisTalkRoomMessage($devisId,$idNextcloud){
|
|
$devis = $this->getDevisByIdWithCalendarDataAndProducts($devisId,$idNextcloud);
|
|
if($devis == null){
|
|
return null;
|
|
}
|
|
$devisDate = new Datetime($devis->date);
|
|
$devisDate = $devisDate->format('d/m/Y');
|
|
$message = "NOUVELLE INTERVENTION: ";
|
|
$message .= html_entity_decode($devis->nom_defunt) . ' ';
|
|
$message .= 'le '.$devisDate. ' ';
|
|
$message .= 'à '.$devis->startTime. ' ';
|
|
$message .= 'à '.html_entity_decode($devis->lieu). ' '. html_entity_decode($devis->adresse_soin);
|
|
|
|
$clientMessageContent = $this->getDevisTalkRoomClientContent($devis->prenom);
|
|
$message .= $clientMessageContent;
|
|
$productMessage = $this->getDevisTalkRoomProductSectionMessage($devis->products);
|
|
$message .= $productMessage;
|
|
$comment = "aucun";
|
|
if(strtolower($devis->comment) != "commentaire" && $devis->comment != ""){
|
|
$comment = html_entity_decode($devis->comment);
|
|
}
|
|
$message .= ". COMMENTAIRES: ".$comment.". ";
|
|
$locationCodes = [
|
|
"Code portail" => $devis->portal_code,
|
|
"Code alarme" => $devis->alarm_code,
|
|
"Code funéraire" => $devis->funeral_code
|
|
];
|
|
$locationCodeMessageContent = "";
|
|
foreach($locationCodes as $label => $code){
|
|
$value = "Aucun";
|
|
if($code != null && trim($code) != ""){
|
|
$value = $code;
|
|
}
|
|
$locationCodeMessageContent .= $label. ": ".$value.". ";
|
|
}
|
|
$locationCodeMessageContent = trim($locationCodeMessageContent);
|
|
$message .= $locationCodeMessageContent;
|
|
return $message;
|
|
}
|
|
|
|
public function getDevisByCalendarUuid($calendarUuid){
|
|
if($calendarUuid === self::DEFAULT_CALENDAR_UUID_FOR_DEVIS){
|
|
return null;
|
|
}
|
|
$sql = "SELECT
|
|
devis.id,
|
|
devis.id_thanato,
|
|
devis.id_defunt as defunt_id,
|
|
devis.num,
|
|
devis.comment,
|
|
devis.id_lieu as lieu_id,
|
|
devis.id_client as client_id,
|
|
defunt.nom as defunt_nom
|
|
FROM ".$this->tableprefix."devis as devis
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
WHERE devis.num = ? ;";
|
|
|
|
$devis = $this->execSQLNoJsonReturn($sql, array($calendarUuid));
|
|
if(empty($devis)){
|
|
return null;
|
|
}
|
|
return $devis[0];
|
|
}
|
|
|
|
public function updateDevisMentionToCanceled($devisId){
|
|
$sql= "UPDATE ".$this->tableprefix."devis as devis
|
|
SET devis.mentions = ?
|
|
WHERE devis.id = ?";
|
|
|
|
$this->execSQLNoData($sql,[DevisMentionConstant::CANCELED,$devisId]);
|
|
}
|
|
|
|
private function updateDefuntByName($defuntId,$requestedDefuntName){
|
|
$sql= "UPDATE ".$this->tableprefix."defunt as defunt
|
|
SET defunt.nom = ?
|
|
WHERE defunt.id = ?";
|
|
$this->execSQLNoData($sql,[$requestedDefuntName,$defuntId]);
|
|
}
|
|
|
|
public function createOrUpdateDefuntByNameAndReturnDefuntId($defuntId,$currentDefuntName,$requestedDefuntName){
|
|
if($defuntId != null){
|
|
$defuntNameIsUpdated = $currentDefuntName != $requestedDefuntName;
|
|
if($defuntNameIsUpdated){
|
|
$this->updateDefuntByName($defuntId,$requestedDefuntName);
|
|
}
|
|
}
|
|
else{
|
|
$this->insertDefuntByName($requestedDefuntName);
|
|
$defunt = $this->getLastDefuntIdByName($requestedDefuntName);
|
|
$defuntId = $defunt['id'];
|
|
}
|
|
return $defuntId;
|
|
}
|
|
|
|
public function updateDevisDefunt($devisId,$requestedDefuntId,$currentDefuntId = null){
|
|
$defuntIsUpdated = $currentDefuntId != $requestedDefuntId;
|
|
if($defuntIsUpdated){
|
|
$sql= "UPDATE ".$this->tableprefix."devis as devis
|
|
SET devis.id_defunt = ?
|
|
WHERE devis.id = ?";
|
|
$this->execSQLNoData($sql,[$requestedDefuntId,$devisId]);
|
|
}
|
|
}
|
|
|
|
public function updateDevisThanato($devisId,$requestedThanatoId){
|
|
$sql= "UPDATE ".$this->tableprefix."devis as devis
|
|
SET devis.id_thanato = ?
|
|
WHERE devis.id = ?";
|
|
$this->execSQLNoData($sql,[$requestedThanatoId,$devisId]);
|
|
}
|
|
|
|
public function updateDevisClient($devisId,$requestedClientId,$currentClientId = null){
|
|
$clientIsUpdated = $currentClientId != $requestedClientId;
|
|
if($clientIsUpdated){
|
|
$sql= "UPDATE ".$this->tableprefix."devis as devis
|
|
SET devis.id_client = ?
|
|
WHERE devis.id = ?";
|
|
$this->execSQLNoData($sql,[$requestedClientId,$devisId]);
|
|
}
|
|
}
|
|
|
|
public function updateDevisLieu($devisId,$requestedLieuId,$currentLieuId = null){
|
|
$lieuIsUpdated = $currentLieuId != $requestedLieuId;
|
|
if($lieuIsUpdated){
|
|
$sql= "UPDATE ".$this->tableprefix."devis as devis
|
|
SET devis.id_lieu = ?
|
|
WHERE devis.id = ?";
|
|
$this->execSQLNoData($sql,[$requestedLieuId,$devisId]);
|
|
}
|
|
}
|
|
|
|
public function updateDevisComment($devisId,$requestedComment,$currentComment = null){
|
|
$commentIsUpdated = $currentComment != $requestedComment;
|
|
if($commentIsUpdated){
|
|
$sql= "UPDATE ".$this->tableprefix."devis as devis
|
|
SET devis.comment = ?
|
|
WHERE devis.id = ?";
|
|
$this->execSQLNoData($sql,[$requestedComment,$devisId]);
|
|
}
|
|
}
|
|
|
|
public function deleteDevisProduit($devisProductId){
|
|
$sql = "DELETE FROM ".$this->tableprefix."produit_devis WHERE id = ?;";
|
|
$this->execSQLNoData($sql, array($devisProductId));
|
|
}
|
|
|
|
public function updateDevisArticles($devisId,$requestedArticlesIds){
|
|
$currentDevisProducts = $this->getDevisProduits($devisId);
|
|
$currentDevisProduitIds = [];
|
|
|
|
//delete old product
|
|
foreach($currentDevisProducts as $devisProduct){
|
|
$currentDevisProduitIds[] = $devisProduct['produit_id'];
|
|
$currentProductIsNotPartOfRequestedDevisProduct = !in_array($devisProduct['produit_id'],$requestedArticlesIds);
|
|
if($currentProductIsNotPartOfRequestedDevisProduct){
|
|
$this->deleteDevisProduit($devisProduct['id']);
|
|
}
|
|
}
|
|
|
|
//add new requested product
|
|
foreach($requestedArticlesIds as $requestedArticleId){
|
|
$currentRequestedArticleIsNewArticleForDevis = !in_array($requestedArticleId,$currentDevisProduitIds);
|
|
if($currentRequestedArticleIsNewArticleForDevis){
|
|
$this->insertDevisArticle(devisId: $devisId, articleId: $requestedArticleId,idNextcloud: BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public function addClientGroupFacturationFeatureTables(){
|
|
$createTableClientGroupSQL = "CREATE TABLE oc_gestion_client_group_facturation (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
group_facturation_name VARCHAR(255) DEFAULT ''
|
|
);";
|
|
|
|
$this->execSQLNoData($createTableClientGroupSQL,[]);
|
|
|
|
$addColumnFkClientGroupFacturationIdIntoClientTableSQL= "ALTER TABLE oc_gestion_client
|
|
ADD fk_client_group_facturation_id INT NULL;";
|
|
|
|
$this->execSQLNoData($addColumnFkClientGroupFacturationIdIntoClientTableSQL,[]);
|
|
return true;
|
|
}
|
|
|
|
private function getClientGroupFacturationsWithType(){
|
|
$sql = "SELECT
|
|
client_group_facturation.id as id,
|
|
client_group_facturation.group_facturation_name as nom,
|
|
'group' as client_type
|
|
FROM ".$this->tableprefix."client_group_facturation as client_group_facturation ORDER BY client_group_facturation.id DESC;";
|
|
$clientGroupFacturations = $this->execSQLNoJsonReturn($sql,[]);
|
|
return $clientGroupFacturations;
|
|
}
|
|
|
|
public function getClientGroupFacturations(){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."client_group_facturation as client_group_facturation ORDER BY client_group_facturation.id DESC;";
|
|
$clientGroupFacturations = $this->execSQL($sql,[]);
|
|
return $clientGroupFacturations;
|
|
}
|
|
|
|
public function createDefaultGroupFacturation(){
|
|
$sql = "INSERT INTO `".$this->tableprefix."client_group_facturation` (`group_facturation_name`) VALUES (?);";
|
|
$this->execSQLNoData($sql, array(self::DEFAULT_CLIENT_GROUP_FACTURATION_NAME));
|
|
return true;
|
|
}
|
|
|
|
public function getClientGroupFacturationById($clientGroupFacturationId){
|
|
$sql = "SELECT *
|
|
FROM ".$this->tableprefix."client_group_facturation as client_group_facturation
|
|
WHERE client_group_facturation.id = ? ;";
|
|
|
|
$clientGroupFacturation = $this->execSQLNoJsonReturn($sql, array($clientGroupFacturationId));
|
|
if(!empty($clientGroupFacturation)){
|
|
return $clientGroupFacturation[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getClientGroupFacturationCount(){
|
|
$sql = "SELECT count(*) as c from ".$this->tableprefix."client_group_facturation;";
|
|
return $this->execSQL($sql, array());
|
|
}
|
|
|
|
public function addProductTypeTables(){
|
|
$sql = "CREATE TABLE oc_gestion_product_type (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
product_type_key VARCHAR(255) DEFAULT '',
|
|
product_type_name VARCHAR(255) DEFAULT ''
|
|
);";
|
|
|
|
$this->execSQLNoData($sql,[]);
|
|
|
|
$sql = "ALTER TABLE oc_gestion_produit
|
|
ADD fk_product_type_id INT NULL;";
|
|
|
|
$this->execSQLNoData($sql,[]);
|
|
|
|
$sql = "INSERT INTO oc_gestion_product_type (product_type_key,product_type_name) VALUES (?,?);";
|
|
$this->execSQLNoData($sql,[ProductConstant::PRODUCT_COVER_TYPE_KEY,ProductConstant::PRODUCT_COVER_TYPE_NAME]);
|
|
}
|
|
|
|
public function getProductTypes(){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."product_type;";
|
|
$productTypes = $this->execSQL($sql,[]);
|
|
return $productTypes;
|
|
}
|
|
|
|
public function addLocationCodesColumn(){
|
|
$sql = "ALTER TABLE oc_gestion_lieu
|
|
ADD portal_code VARCHAR(255) DEFAULT NULL;";
|
|
$this->execSQLNoData($sql,[]);
|
|
|
|
$sql = "ALTER TABLE oc_gestion_lieu
|
|
ADD alarm_code VARCHAR(255) DEFAULT NULL;";
|
|
$this->execSQLNoData($sql,[]);
|
|
|
|
$sql = "ALTER TABLE oc_gestion_lieu
|
|
ADD funeral_code VARCHAR(255) DEFAULT NULL;";
|
|
$this->execSQLNoData($sql,[]);
|
|
}
|
|
|
|
public function updateDevisMention(int $devisId,string $mention){
|
|
$sql = "UPDATE ".$this->tableprefix."devis as devis
|
|
SET devis.mentions = ?
|
|
WHERE devis.id = ?;";
|
|
$this->execSQLNoData($sql,[$mention,$devisId]);
|
|
}
|
|
|
|
public function getBijouxWithDefuntByBijouxId($bijouxId){
|
|
$sql = "SELECT
|
|
bijou.id,
|
|
bijou.defunt_id,
|
|
bijou.designation,
|
|
bijou.commentaire,
|
|
bijou.photo,
|
|
defunt.nom as defunt_nom
|
|
FROM ".$this->tableprefix."bijou_defunt as bijou
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on bijou.defunt_id = defunt.id
|
|
WHERE bijou.id = ? ;";
|
|
|
|
$bijoux = $this->execSQLNoJsonReturn($sql,[$bijouxId,]);
|
|
if(!empty($bijoux)){
|
|
return $bijoux[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function saveBijouxPhoto($bijouxId,$photo,$photoRealName){
|
|
$sql = "UPDATE ".$this->tableprefix."bijou_defunt as bijou_defunt
|
|
SET bijou_defunt.photo = ?,bijou_defunt.photo_name = ?
|
|
WHERE bijou_defunt.id = ? ;";
|
|
$this->execSQLNoData(
|
|
$sql,
|
|
[$photo,$photoRealName,$bijouxId]);
|
|
|
|
return true;
|
|
}
|
|
|
|
public function saveDefuntPacemakerPhoto($defuntId,$photo,$photoRealName){
|
|
$sql = "UPDATE ".$this->tableprefix."defunt as defunt
|
|
SET defunt.product_photo = ?,defunt.product_photo_name = ?
|
|
WHERE defunt.id = ? ;";
|
|
$this->execSQLNoData(
|
|
$sql,
|
|
[$photo,$photoRealName,$defuntId]);
|
|
|
|
return true;
|
|
}
|
|
|
|
private function getFacturePaymentTypeById($facturePaymentTypeId){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."facture_payment_type as facture_payment_type
|
|
WHERE facture_payment_type.id = ? LIMIT 1
|
|
";
|
|
$facturePaymentType = $this->execSQLNoJsonReturn($sql,[$facturePaymentTypeId]);
|
|
if(!empty($facturePaymentType)){
|
|
return $facturePaymentType[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getFacturePaymentList(){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."facture_payment_type";
|
|
return $this->execSQL($sql,[]);
|
|
}
|
|
|
|
public function payInvoices($factureIds,$facturePaymentTypeId,$paymentDate){
|
|
$facturePaymentType = $this->getFacturePaymentTypeById($facturePaymentTypeId);
|
|
if($facturePaymentType == null){
|
|
return null;
|
|
}
|
|
$paymentDate = Datetime::createFromFormat('Y-m-d',$paymentDate);
|
|
$paymentDate = $paymentDate->format('Y-m-d');
|
|
foreach($factureIds as $factureId){
|
|
$this->payAnInvoice($factureId,$facturePaymentTypeId,$paymentDate);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private function payAnInvoice($factureId,$facturePaymentTypeId,$paymentDate){
|
|
$sql = "UPDATE ".$this->tableprefix."facture as facture
|
|
SET facture.fk_facture_status_key = ?,
|
|
facture.payment_date = ?,
|
|
facture.fk_facture_payment_type_id = ?
|
|
WHERE facture.id = ?
|
|
";
|
|
$this->execSQLNoData($sql,[
|
|
FactureStatusConstant::PAID_KEY,
|
|
$paymentDate,
|
|
$facturePaymentTypeId,
|
|
$factureId
|
|
]);
|
|
return true;
|
|
}
|
|
|
|
public function getUsersNotLinkedToThanato(){
|
|
$sql = "SELECT
|
|
users.uid,
|
|
users.uid_lower,
|
|
users.displayname
|
|
FROM ".self::DEFAULT_TABLE_PREFIX."users as users
|
|
JOIN .".self::DEFAULT_TABLE_PREFIX."group_user group_user ON users.uid = group_user.uid
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on users.uid = thanato.fk_user_uuid
|
|
WHERE group_user.gid = ? AND
|
|
thanato.fk_user_uuid IS NULL;
|
|
";
|
|
|
|
return $this->execSQL($sql,[BddConstant::DEFAULT_THANATOS_GROUP_NAME]);
|
|
}
|
|
|
|
public function doDevisIdsListIdsBelongsToTheSameClientFacturationGroup(array $devisIds){
|
|
if(empty($devisIds)){
|
|
return [];
|
|
}
|
|
$sqlPlacholders = implode(',', array_fill(0, count($devisIds), '?'));
|
|
$sql = "SELECT
|
|
devis.id,
|
|
client.fk_client_group_facturation_id
|
|
FROM ".$this->tableprefix."devis as devis
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
WHERE
|
|
devis.id_client IS NOT NULL AND
|
|
devis.id IN($sqlPlacholders);";
|
|
|
|
$results = $this->execSQLNoJsonReturn($sql,$devisIds);
|
|
$clientGroupFacturationsIds = [];
|
|
foreach($results as $currentResult){
|
|
if($currentResult['fk_client_group_facturation_id'] == null){
|
|
return false;
|
|
}
|
|
$clientGroupFacturationsIds[] = $currentResult['fk_client_group_facturation_id'];
|
|
}
|
|
$uniqueClientGroupFacturation = array_unique($clientGroupFacturationsIds);
|
|
return $uniqueClientGroupFacturation > 1;
|
|
|
|
}
|
|
|
|
private function doesDevisFactureGroupAlreadyExist($factureId,$devisId){
|
|
$sql = "SELECT count(*) as DEVIS_FACTURE_COUNT
|
|
FROM ".$this->tableprefix."devis_facture as devis_facture
|
|
WHERE devis_facture.fk_devis_id = ? AND devis_facture.fk_facture_id = ?";
|
|
|
|
$result = $this->execSQLNoJsonReturn($sql,[$devisId,$factureId]);
|
|
if(!empty($result)){
|
|
return $result[0]["DEVIS_FACTURE_COUNT"] > 0;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private function createFactureGroupDevis($factureId,$devisId){
|
|
$doesDevisFactureGroupAlreadyExist = $this->doesDevisFactureGroupAlreadyExist($factureId,$devisId);
|
|
if(!$doesDevisFactureGroupAlreadyExist){
|
|
$sql = "INSERT INTO `".$this->tableprefix."devis_facture` (`fk_devis_id`,`fk_facture_id`) VALUES (?,?);";
|
|
$this->execSQLNoData($sql, [$devisId,$factureId]);
|
|
$this->gestion_update('devis','mentions',DevisMentionConstant::FACTURED_FORMATTED,$devisId,BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD);
|
|
}
|
|
}
|
|
|
|
public function createFactureGroupForDevisList($factureId,$devisIds){
|
|
foreach($devisIds as $devis){
|
|
$this->createFactureGroupDevis($factureId,$devis['id']);
|
|
}
|
|
}
|
|
|
|
private function getFactureIdByFactureNumber($factureNumber){
|
|
$sql = "SELECT max(facture.id) AS FACTURE_ID
|
|
FROM ".$this->tableprefix."facture as facture
|
|
WHERE facture.num = ? ;";
|
|
|
|
$result = $this->execSQLNoJsonReturn($sql,[$factureNumber]);
|
|
if(!empty($result)){
|
|
return $result[0]['FACTURE_ID'];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function createFactureAndReturnFactureId($facturationDate,$type,$month = null,$year = null,$fkClientId = null,$fkClientGroupFacturationId = null){
|
|
$datetimeNow = new Datetime();
|
|
$month = $month ?? $datetimeNow->format('m');
|
|
$year = $year ?? $datetimeNow->format('Y');
|
|
if($facturationDate == null || $facturationDate == ""){
|
|
$facturationDatetime = DateHelpers::GetLastDayOfTheMonthOfADate($datetimeNow);
|
|
}
|
|
else{
|
|
$facturationDatetime = Datetime::createFromFormat('Y-m-d',$facturationDate);
|
|
}
|
|
$facturationDate = $facturationDatetime->format('Y-m-d');
|
|
$factureDate = $facturationDate;
|
|
$factureNumber = $this->getFactureNumberByDate($facturationDatetime);
|
|
$fullFactureNumber = DateHelpers::GetFullFactureOrDevisNumberByDate($facturationDatetime,$factureNumber,"FAC");
|
|
$last = 0;
|
|
$last = $this->lastNumFacture(BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD);
|
|
$sql = "INSERT INTO `".$this->tableprefix."facture` (`date`,`id_nextcloud`,`num`,`date_paiement`,`type_paiement`,`id_devis`,`user_id`, `version`,`facture_number`,`facture_type`,`month`,`year`,`fk_client_id`,`fk_client_group_facturation_id`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
|
|
$this->execSQLNoData($sql, array(
|
|
$factureDate,
|
|
BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD,
|
|
$fullFactureNumber,
|
|
$facturationDate,
|
|
"",
|
|
0,
|
|
$last+1,
|
|
"",
|
|
$factureNumber,
|
|
$type,
|
|
$month,
|
|
$year,
|
|
$fkClientId,
|
|
$fkClientGroupFacturationId)
|
|
);
|
|
|
|
return $this->getFactureIdByFactureNumber($fullFactureNumber);
|
|
|
|
}
|
|
|
|
public function generateGroupFactureForMultipleDevis($devisToFacture,$paymentDate){
|
|
$mentionsFilter = [
|
|
DevisMentionConstant::NEW,
|
|
DevisMentionConstant::MENTION
|
|
];
|
|
$devisIdListFiltered = $this->getDevisIdListFilteredByMentionAndDevisListId($mentionsFilter,$devisToFacture);
|
|
$factureId = $this->createFactureAndReturnFactureId($paymentDate,FactureTypeConstant::TYPE_GROUP);
|
|
$this->createFactureGroupForDevisList($factureId,$devisIdListFiltered);
|
|
return [$factureId];
|
|
}
|
|
|
|
public function getFactureTypeByFactureId($factureId): mixed{
|
|
$sql = "SELECT
|
|
facture.facture_type
|
|
FROM ".$this->tableprefix."facture as facture
|
|
WHERE facture.id = ? LIMIT 1;";
|
|
|
|
$result = $this->execSQLNoJsonReturn($sql,[$factureId]);
|
|
if(!empty($result)){
|
|
return $result[0]['facture_type'];
|
|
}
|
|
return FactureTypeConstant::TYPE_SINGLE;
|
|
}
|
|
|
|
public function getDevisIdsByClientGroupFacturationIdAndMonthYear($clientGroupFacturationId,$month,$year,$mentionFilters = []){
|
|
$sql = "SELECT devis.id
|
|
FROM ".$this->tableprefix."devis as devis
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
WHERE
|
|
client.fk_client_group_facturation_id = ? AND
|
|
YEAR(devis.date) = ? AND
|
|
MONTH(devis.date) = ?
|
|
";
|
|
|
|
$conditions = [$clientGroupFacturationId,$year,$month];
|
|
if(!empty($mentionFilters)){
|
|
$mentionsFilterPlaceholders = implode(',', array_fill(0, count($mentionFilters), '?'));
|
|
$sql .= " AND ". $this->tableprefix."devis.mentions IN ($mentionsFilterPlaceholders)";
|
|
$conditions = array_merge($conditions, $mentionFilters);
|
|
}
|
|
$sql.= ";";
|
|
$result = $this->execSQLNoJsonReturn($sql,$conditions);
|
|
|
|
$devisIds = [];
|
|
foreach($result as $currentResult){
|
|
$devisIds[] = $currentResult['id'];
|
|
}
|
|
return $devisIds;
|
|
}
|
|
|
|
public function getDevisIdsByClientIdAndMonthYear($clientId,$month,$year,$mentionFilters = []){
|
|
$sql = "SELECT devis.id
|
|
FROM ".$this->tableprefix."devis as devis
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
WHERE
|
|
client.id = ? AND
|
|
YEAR(devis.date) = ? AND
|
|
MONTH(devis.date) = ?";
|
|
|
|
$conditions = [$clientId,$year,$month];
|
|
if(!empty($mentionFilters)){
|
|
$mentionsFilterPlaceholders = implode(',', array_fill(0, count($mentionFilters), '?'));
|
|
$sql .= " AND devis.mentions IN ($mentionsFilterPlaceholders)";
|
|
$conditions = array_merge($conditions, $mentionFilters);
|
|
}
|
|
$sql.= ";";
|
|
$result = $this->execSQLNoJsonReturn($sql,$conditions);
|
|
|
|
$devisIds = [];
|
|
foreach($result as $currentResult){
|
|
$devisIds[] = $currentResult['id'];
|
|
}
|
|
return $devisIds;
|
|
|
|
}
|
|
|
|
public function getFactureIdByClientIdAndMonthYear($clientId,$month,$year){
|
|
$sql = "SELECT
|
|
facture.id as facture_id
|
|
FROM ".$this->tableprefix."facture as facture
|
|
WHERE
|
|
facture.fk_client_id = ? AND
|
|
facture.year = ? AND
|
|
facture.month = ? AND
|
|
facture.facture_type = ?";
|
|
|
|
$result = $this->execSQLNoJsonReturn($sql,[
|
|
$clientId,
|
|
$year,
|
|
$month,
|
|
FactureTypeConstant::TYPE_GROUP
|
|
]);
|
|
|
|
if(!empty($result)){
|
|
return $result[0]['facture_id'];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getFactureIdByClientGroupFacturationIdAndMonthYear($clientId,$month,$year){
|
|
$sql = "SELECT
|
|
facture.id as facture_id
|
|
FROM ".$this->tableprefix."facture as facture
|
|
WHERE
|
|
facture.fk_client_group_facturation_id = ? AND
|
|
facture.year = ? AND
|
|
facture.month = ? AND
|
|
facture.facture_type = ?";
|
|
|
|
$result = $this->execSQLNoJsonReturn($sql,[
|
|
$clientId,
|
|
$year,
|
|
$month,
|
|
FactureTypeConstant::TYPE_GROUP
|
|
]);
|
|
|
|
if(!empty($result)){
|
|
return $result[0]['facture_id'];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function invoiceListOfDevisIds($devisIds){
|
|
$sqlConditionsPlaceholder = implode(',', array_fill(0, count($devisIds), '?'));
|
|
$sql = "UPDATE ".$this->tableprefix."devis as devis
|
|
SET devis.mentions = ?
|
|
WHERE devis.id IN ($sqlConditionsPlaceholder);";
|
|
|
|
$conditions = array_merge(
|
|
[DevisMentionConstant::FACTURED_FORMATTED],
|
|
$devisIds
|
|
);
|
|
|
|
$this->execSQLNoData($sql,$conditions);
|
|
}
|
|
|
|
private function getDevisDataByClientGroupFacturationIdAndMonthYear($clientGroupFacturationId,$month,$year,$mentionFilters = []){
|
|
$sql = "SELECT
|
|
devis.id as devis_id,
|
|
devis.date as devis_date,
|
|
devis.num as calendar_uuid,
|
|
devis.comment as devis_comment,
|
|
devis.order_number as order_number,
|
|
devis.case_number as case_number,
|
|
devis.devis_full_number as devis_full_number,
|
|
client.nom as client_nom,
|
|
client.entreprise as client_entreprise,
|
|
client.adresse as client_adresse,
|
|
client.mail as client_mail,
|
|
client.legal_one as client_legal_one,
|
|
defunt.nom as defunt_nom,
|
|
defunt.sexe as defunt_sexe,
|
|
lieu.nom as lieu_nom,
|
|
lieu.adresse as lieu_adresse,
|
|
thanato.nom as thanato_nom,
|
|
thanato.prenom as thanato_prenom,
|
|
client_group_facturation.id as group_id,
|
|
client_group_facturation.group_facturation_name as group_name,
|
|
client_group_facturation.phone_number as group_phone_number,
|
|
client_group_facturation.address as group_address,
|
|
client_group_facturation.postal_code as group_postal_code,
|
|
client_group_facturation.city as group_city,
|
|
client_group_facturation.email as group_email,
|
|
client_group_facturation.siret_number as group_siret_number,
|
|
client_group_facturation.tva_intracommu as group_tva_intracommu,
|
|
client_group_facturation.fk_template_type_key as fk_template_type_key
|
|
FROM ".$this->tableprefix."devis as devis
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on devis.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on devis.id_thanato = thanato.id
|
|
LEFT JOIN ".$this->tableprefix."client_group_facturation as client_group_facturation on client.fk_client_group_facturation_id = client_group_facturation.id
|
|
WHERE
|
|
client.fk_client_group_facturation_id = ? AND
|
|
YEAR(devis.date) = ? AND
|
|
MONTH(devis.date) = ?";
|
|
|
|
$conditions = [$clientGroupFacturationId,$year,$month];
|
|
if(!empty($mentionFilters)){
|
|
$mentionsFilterPlaceholders = implode(',', array_fill(0, count($mentionFilters), '?'));
|
|
$sql .= " AND devis.mentions IN ($mentionsFilterPlaceholders)";
|
|
$conditions = array_merge($conditions, $mentionFilters);
|
|
}
|
|
$sql.= " ORDER BY devis.date ASC;";
|
|
$devisList = $this->execSQLNoJsonReturn($sql,$conditions);
|
|
|
|
return $devisList;
|
|
}
|
|
|
|
private function getDevisDataByClientIdAndMonthYear($clientId,$month,$year,$mentionFilters = []){
|
|
$sql = "SELECT
|
|
devis.id as devis_id,
|
|
devis.date as devis_date,
|
|
devis.num as calendar_uuid,
|
|
devis.comment as devis_comment,
|
|
devis.order_number as order_number,
|
|
devis.case_number as case_number,
|
|
devis.devis_full_number as devis_full_number,
|
|
client.nom as client_nom,
|
|
client.entreprise as client_entreprise,
|
|
client.adresse as client_adresse,
|
|
client.mail as client_mail,
|
|
client.legal_one as client_legal_one,
|
|
defunt.nom as defunt_nom,
|
|
defunt.sexe as defunt_sexe,
|
|
lieu.nom as lieu_nom,
|
|
lieu.adresse as lieu_adresse,
|
|
thanato.nom as thanato_nom,
|
|
thanato.prenom as thanato_prenom,
|
|
client_group_facturation.id as group_id,
|
|
client_group_facturation.group_facturation_name as group_name,
|
|
client_group_facturation.phone_number as group_phone_number,
|
|
client_group_facturation.address as group_address,
|
|
client_group_facturation.postal_code as group_postal_code,
|
|
client_group_facturation.city as group_city,
|
|
client_group_facturation.email as group_email,
|
|
client_group_facturation.siret_number as group_siret_number,
|
|
client_group_facturation.tva_intracommu as group_tva_intracommu,
|
|
client_group_facturation.fk_template_type_key as fk_template_type_key
|
|
FROM ".$this->tableprefix."devis as devis
|
|
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
|
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
|
LEFT JOIN ".$this->tableprefix."lieu as lieu on devis.id_lieu = lieu.id
|
|
LEFT JOIN ".$this->tableprefix."thanato as thanato on devis.id_thanato = thanato.id
|
|
LEFT JOIN ".$this->tableprefix."client_group_facturation as client_group_facturation on client.fk_client_group_facturation_id = client_group_facturation.id
|
|
WHERE
|
|
client.id = ? AND
|
|
YEAR(devis.date) = ? AND
|
|
MONTH(devis.date) = ?";
|
|
|
|
$conditions = [$clientId,$year,$month];
|
|
if(!empty($mentionFilters)){
|
|
$mentionsFilterPlaceholders = implode(',', array_fill(0, count($mentionFilters), '?'));
|
|
$sql .= " AND devis.mentions IN ($mentionsFilterPlaceholders)";
|
|
$conditions = array_merge($conditions, $mentionFilters);
|
|
}
|
|
$sql.= " ORDER BY devis.date ASC;";
|
|
$devisList = $this->execSQLNoJsonReturn($sql,$conditions);
|
|
|
|
return $devisList;
|
|
}
|
|
|
|
public function getClientTemplateTypes(){
|
|
$sql = "SELECT * FROM ".$this->tableprefix."client_template_type as client_template_type";
|
|
return $this->execSQL($sql,[]);
|
|
}
|
|
|
|
public function getFactureGroupById($factureId){
|
|
$sql = "SELECT
|
|
facture.id,
|
|
facture.date,
|
|
facture.date_paiement,
|
|
facture.num,
|
|
facture.fk_client_id,
|
|
facture.fk_client_group_facturation_id,
|
|
facture.month,
|
|
facture.year,
|
|
facture.facture_case_number,
|
|
facture.facture_order_number
|
|
FROM ".$this->tableprefix."facture as facture
|
|
WHERE facture.id = ? AND
|
|
facture.facture_type = ?
|
|
;";
|
|
|
|
$result = $this->execSQLNoJsonReturn($sql,[$factureId,FactureTypeConstant::TYPE_GROUP]);
|
|
if(!empty($result)){
|
|
return $result[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getFactureGroupByFactureIdWithDetails($factureId){
|
|
$facture = $this->getFactureGroupById($factureId);
|
|
$configuration = $this->getConfiguration(BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD);
|
|
$configuration = json_decode($configuration);
|
|
$currentConfig = $configuration[0];
|
|
$tvaValue = $currentConfig->tva_default;
|
|
$isFactureSingleClient = $facture['fk_client_id'] != null
|
|
&& $facture['fk_client_id'] != 0;
|
|
|
|
$devisMentionFilters = [
|
|
DevisMentionConstant::FACTURED,
|
|
DevisMentionConstant::FACTURED_FORMATTED
|
|
];
|
|
|
|
if($isFactureSingleClient){
|
|
$client = $this->getClientById($facture['fk_client_id']);
|
|
$facture['group_name'] = $client["client_nom"];
|
|
$facture['client_name'] = $client["client_prenom"];
|
|
$facture['client_address'] = $client["client_address"];
|
|
$facture['siret'] = $client["client_legal_one"];
|
|
$facture['mail'] = $client["client_mail"];
|
|
$devisList = $this->getDevisDataByClientIdAndMonthYear(
|
|
$facture['fk_client_id'],
|
|
$facture['month'],
|
|
$facture['year'],
|
|
$devisMentionFilters
|
|
);
|
|
}
|
|
else{
|
|
$clientGroupFacturation = $this->getClientGroupFacturationById($facture['fk_client_group_facturation_id']);
|
|
$facture['group_name'] = $clientGroupFacturation["group_facturation_name"];
|
|
$facture['client_name'] = $clientGroupFacturation["group_facturation_name"];
|
|
$facture['client_address'] = $clientGroupFacturation["address"] . ' - ' .$clientGroupFacturation["postal_code"] . ' ' . $clientGroupFacturation['city'];
|
|
$facture['siret'] = $clientGroupFacturation["siret_number"];
|
|
$facture['mail'] = $clientGroupFacturation["email"];
|
|
$devisList = $this->getDevisDataByClientGroupFacturationIdAndMonthYear(
|
|
$facture['fk_client_group_facturation_id'],
|
|
$facture['month'],
|
|
$facture['year'],
|
|
$devisMentionFilters
|
|
);
|
|
}
|
|
$factureTotalHt= 0;
|
|
$factureTotalTva = 0;
|
|
$factureTotalTtc = 0;
|
|
foreach($devisList as &$currentDevis){
|
|
$totalHt = 0;
|
|
$totalTva = 0;
|
|
$totalTtc = 0;
|
|
$devisProducts = $this->getDevisProduits($currentDevis['devis_id']);
|
|
foreach($devisProducts as $currentProduct){
|
|
$valueHt = $currentProduct['produit_price'] * $currentProduct['quantite'];
|
|
$valueTtc = PriceHelpers::calculPriceWithVatValue($valueHt,$tvaValue);
|
|
$totalHt+=$valueHt;
|
|
$totalTtc+=$valueTtc;
|
|
$tvaAmount = $valueTtc - $valueHt;
|
|
$totalTva += $tvaAmount;
|
|
}
|
|
$currentDevis["totalHt"] = $totalHt;
|
|
$currentDevis["totalTtc"] = $totalTtc;
|
|
$currentDevis["totalTva"] = $totalTva;
|
|
$factureTotalHt += $totalHt;
|
|
$factureTotalTtc += $totalTtc;
|
|
$factureTotalTva += $totalTva;
|
|
$facture["devisList"][] = $currentDevis;
|
|
}
|
|
$facture["totalHt"] = $factureTotalHt;
|
|
$facture["totalTtc"] = $factureTotalTtc;
|
|
$facture["totalTva"] = $factureTotalTva;
|
|
$facture["isFactureClientGroup"] = !$isFactureSingleClient;
|
|
return $facture;
|
|
}
|
|
}
|