gestionBdd = $gestionBdd; } public function prepareDevisData($devisData, $currentConfig, $filter, $idNextCloud) { $data_devis = []; foreach ($devisData as $devis) { // Exclure les devis annulés des récapitulatifs if (isset($devis['mentions']) && $devis['mentions'] === 'CANCELED') { continue; } $devis_temp = $this->createDevisStructure($devis, $currentConfig); $devis_temp = $this->calculateDevisAmounts($devis_temp, $devis, $filter, $idNextCloud); $data_devis[] = $devis_temp; } return $data_devis; } public function createDevisStructure($devis, $currentConfig) { return array( 'devis_id' => $devis['devis_id'], 'devis_full_number' => $devis['devis_full_number'], 'case_number' => $devis['case_number'], // NOUVEAU : remplace calendar_uuid 'order_number' => $devis['order_number'], // NOUVEAU : remplace num_commande vide 'devis_date' => $devis['devis_date'], 'lieu_nom' => $devis['lieu_nom'], 'lieu_adresse' => $devis['lieu_adresse'], 'defunt_nom' => $devis['defunt_nom'], 'defunt_sexe' => $devis['defunt_sexe'], 'client_nom' => $devis['client_nom'], 'client_entreprise' => $devis['client_entreprise'], 'client_adresse' => $devis['client_adresse'], 'group_name' => $devis['group_name'], 'group_address' => $devis['group_address'], 'group_postal_code' => $devis['group_postal_code'], 'group_city' => $devis['group_city'], 'group_email' => $devis['group_email'], 'group_siret_number' => $devis['group_siret_number'], 'article' => 'SOINS', 'montant_htc' => 0, 'tva' => $currentConfig->tva_default, 'montant_tva' => 0, 'montant_ttc' => 0 ); } public function calculateDevisAmounts($devis_temp, $devis, $filter, $idNextCloud) { $produits = json_decode($this->gestionBdd->getListProduit($devis['devis_id'], $idNextCloud)); // Variables pour gérer les articles comme dans les factures $produitsReferenceArray = []; foreach ($produits as $produit) { $htPrice = $this->getProductPrice($produit, $devis, $filter); $devis_temp['montant_htc'] += $htPrice * $produit->quantite; // Collecter les références comme dans les factures if (isset($produit->reference) && !empty($produit->reference)) { $produitsReferenceArray[] = $produit->reference; } } // Traitement identique aux factures $produitsReferenceArray = array_unique($produitsReferenceArray); $produitsReferenceAsString = implode("-", $produitsReferenceArray); $devis_temp['article'] = !empty($produitsReferenceAsString) ? $produitsReferenceAsString : 'SOINS'; $devis_temp['montant_tva'] = ($devis_temp['montant_htc'] * $devis_temp['tva']) / 100; $devis_temp['montant_ttc'] = $devis_temp['montant_tva'] + $devis_temp['montant_htc']; return $devis_temp; } public function getProductPrice($produit, $devis, $filter) { $htPrice = $produit->prix_unitaire; if ($devis['group_name'] != null && isset($produit->id)) { $price = $this->gestionBdd->getProductPriceByClientGroupId($filter, $produit->id); if ($price != null) { $htPrice = $price; } } return $htPrice; } public function getClientInfoForDevis($devis, $filterType) { if ($filterType === 'group' && !empty($devis['group_name'])) { return [ 'name' => 'Groupe ' . $devis['group_name'], 'address' => $devis['group_address'], 'city' => $devis['group_postal_code'] . ' ' . $devis['group_city'], 'siret' => $devis['group_siret_number'], 'email' => $devis['group_email'] ]; } else { $clientAddresses = \OCA\Gestion\Helpers\FileExportHelpers::GetAddressAndCityFromAddress($devis['client_adresse']); return [ 'name' => $devis['client_nom'], 'address' => $clientAddresses['address'], 'city' => $clientAddresses['city'], 'siret' => '', 'email' => '' ]; } } public function generateCsvContent($devisData) { $headers = [ 'Numéro Devis', 'Date', 'Client Nom', 'Client Entreprise', 'Défunt', 'Lieu', 'Article', 'Thanatopracteur', 'Commentaire', 'N° Dossier', // case_number 'N° Commande' // order_number ]; $csvContent = $this->arrayToCsv($headers); foreach ($devisData as $devis) { $row = [ $devis['devis_full_number'] ?? '', $devis['devis_date'] ?? '', $devis['client_nom'] ?? '', $devis['client_entreprise'] ?? '', $devis['defunt_nom'] ?? '', $devis['lieu_nom'] ?? '', $devis['article'] ?? 'SOINS', trim(($devis['thanato_nom'] ?? '') . ' ' . ($devis['thanato_prenom'] ?? '')), $devis['devis_comment'] ?? '', $devis['case_number'] ?? '', // NOUVEAU $devis['order_number'] ?? '' // NOUVEAU ]; $csvContent .= $this->arrayToCsv($row); } return $csvContent; } public function getClientNameForFolder($firstDevis, $filterType) { if ($filterType === MultipleFactureTypeConstant::GROUP_FILTER_TYPE && !empty($firstDevis["group_name"])) { return $firstDevis["group_name"]; } return $firstDevis["client_nom"] ?? 'CLIENT_INCONNU'; } public function getRecapFilename($month, $year) { $monthStr = str_pad($month, 2, '0', STR_PAD_LEFT); return $year . $monthStr; } private function arrayToCsv($array) { $output = fopen('php://temp', 'r+'); fputcsv($output, $array, ';'); rewind($output); $csvLine = fgets($output); fclose($output); return $csvLine; } }