AccountingDocument

📦 composants\documents\_Documents_provider\AccountingDocument

Abstract base class for all accounting documents
function __construct(string $id_type, string $id_obje, $contexte = "", $handleGlobalEvent = null) { global $user; $this->id_type = $id_type; $this->id_objet = $id_obje; // Rollbar monitoring. $this->monitoringHandler = new RollbarMonitoringHandler((int)$id_obje); try { // Initialisation du document source : $this->document = fwc7_data_objet_att('', $this->id_type, $this->id_objet); // Récupération des constantes tel que : // - civilités $this->civilites = fwc7_data_liste_valeurs('', '2', 'value', array('label')); // Initialisation des modules codes lié à l'objet type $this->setModuleCodes(); $att_id_user = $this->module_codes['id_user']; // ... (truncated)

🔧 __construct

function __construct(string $id_type, string $id_obje, $contexte = "", $handleGlobalEvent = null) { global $user; $this->id_type = $id_type; $this->id_objet = $id_obje; // Rollbar monitoring. $this->monitoringHandler = new RollbarMonitoringHandler((int)$id_obje); try { // Initialisation du document source : $this->document = fwc7_data_objet_att('', $this->id_type, $this->id_objet); // Récupération des constantes tel que : // - civilités $this->civilites = fwc7_data_liste_valeurs('', '2', 'value', array('label')); // Initialisation des modules codes lié à l'objet type $this->setModuleCodes(); $att_id_user = $this->module_codes['id_user']; // ... (truncated)

🔧 __construct

function __construct(string $id_type, string $id_obje, $contexte = "", $handleGlobalEvent = null) { global $user; $this->id_type = $id_type; $this->id_objet = $id_obje; // Rollbar monitoring. $this->monitoringHandler = new RollbarMonitoringHandler((int)$id_obje); try { // Initialisation du document source : $this->document = fwc7_data_objet_att('', $this->id_type, $this->id_objet); // Récupération des constantes tel que : // - civilités $this->civilites = fwc7_data_liste_valeurs('', '2', 'value', array('label')); // Initialisation des modules codes lié à l'objet type $this->setModuleCodes(); $att_id_user = $this->module_codes['id_user']; // ... (truncated)

🔧 __construct

function __construct(string $id_type, string $id_obje, $contexte = "", $handleGlobalEvent = null) { global $user; $this->id_type = $id_type; $this->id_objet = $id_obje; // Rollbar monitoring. $this->monitoringHandler = new RollbarMonitoringHandler((int)$id_obje); try { // Initialisation du document source : $this->document = fwc7_data_objet_att('', $this->id_type, $this->id_objet); // Récupération des constantes tel que : // - civilités $this->civilites = fwc7_data_liste_valeurs('', '2', 'value', array('label')); // Initialisation des modules codes lié à l'objet type $this->setModuleCodes(); $att_id_user = $this->module_codes['id_user']; // ... (truncated)

🔧 __construct

function __construct(string $id_type, string $id_obje, $contexte = "", $handleGlobalEvent = null) { global $user; $this->id_type = $id_type; $this->id_objet = $id_obje; // Rollbar monitoring. $this->monitoringHandler = new RollbarMonitoringHandler((int)$id_obje); try { // Initialisation du document source : $this->document = fwc7_data_objet_att('', $this->id_type, $this->id_objet); // Récupération des constantes tel que : // - civilités $this->civilites = fwc7_data_liste_valeurs('', '2', 'value', array('label')); // Initialisation des modules codes lié à l'objet type $this->setModuleCodes(); $att_id_user = $this->module_codes['id_user']; // ... (truncated)

🔧 __construct

function __construct(string $id_type, string $id_obje, $contexte = "", $handleGlobalEvent = null) { global $user; $this->id_type = $id_type; $this->id_objet = $id_obje; // Rollbar monitoring. $this->monitoringHandler = new RollbarMonitoringHandler((int)$id_obje); try { // Initialisation du document source : $this->document = fwc7_data_objet_att('', $this->id_type, $this->id_objet); // Récupération des constantes tel que : // - civilités $this->civilites = fwc7_data_liste_valeurs('', '2', 'value', array('label')); // Initialisation des modules codes lié à l'objet type $this->setModuleCodes(); $att_id_user = $this->module_codes['id_user']; // ... (truncated)

🔧 __construct

function __construct(string $id_type, string $id_obje, $contexte = "", $handleGlobalEvent = null) { global $user; $this->id_type = $id_type; $this->id_objet = $id_obje; // Rollbar monitoring. $this->monitoringHandler = new RollbarMonitoringHandler((int)$id_obje); try { // Initialisation du document source : $this->document = fwc7_data_objet_att('', $this->id_type, $this->id_objet); // Récupération des constantes tel que : // - civilités $this->civilites = fwc7_data_liste_valeurs('', '2', 'value', array('label')); // Initialisation des modules codes lié à l'objet type $this->setModuleCodes(); $att_id_user = $this->module_codes['id_user']; // ... (truncated)

🔧 __construct

function __construct(string $id_type, string $id_obje, $contexte = "", $handleGlobalEvent = null) { global $user; $this->id_type = $id_type; $this->id_objet = $id_obje; // Rollbar monitoring. $this->monitoringHandler = new RollbarMonitoringHandler((int)$id_obje); try { // Initialisation du document source : $this->document = fwc7_data_objet_att('', $this->id_type, $this->id_objet); // Récupération des constantes tel que : // - civilités $this->civilites = fwc7_data_liste_valeurs('', '2', 'value', array('label')); // Initialisation des modules codes lié à l'objet type $this->setModuleCodes(); $att_id_user = $this->module_codes['id_user']; // ... (truncated)

🔧 __construct

function __construct(string $id_type, string $id_obje, $contexte = "", $handleGlobalEvent = null) { global $user; $this->id_type = $id_type; $this->id_objet = $id_obje; // Rollbar monitoring. $this->monitoringHandler = new RollbarMonitoringHandler((int)$id_obje); try { // Initialisation du document source : $this->document = fwc7_data_objet_att('', $this->id_type, $this->id_objet); // Récupération des constantes tel que : // - civilités $this->civilites = fwc7_data_liste_valeurs('', '2', 'value', array('label')); // Initialisation des modules codes lié à l'objet type $this->setModuleCodes(); $att_id_user = $this->module_codes['id_user']; // ... (truncated)

🔧 __construct

function __construct(string $id_type, string $id_obje, $contexte = "", $handleGlobalEvent = null) { global $user; $this->id_type = $id_type; $this->id_objet = $id_obje; // Rollbar monitoring. $this->monitoringHandler = new RollbarMonitoringHandler((int)$id_obje); try { // Initialisation du document source : $this->document = fwc7_data_objet_att('', $this->id_type, $this->id_objet); // Récupération des constantes tel que : // - civilités $this->civilites = fwc7_data_liste_valeurs('', '2', 'value', array('label')); // Initialisation des modules codes lié à l'objet type $this->setModuleCodes(); $att_id_user = $this->module_codes['id_user']; // ... (truncated)

🔧 __construct

function __construct(string $id_type, string $id_obje, $contexte = "", $handleGlobalEvent = null) { global $user; $this->id_type = $id_type; $this->id_objet = $id_obje; // Rollbar monitoring. $this->monitoringHandler = new RollbarMonitoringHandler((int)$id_obje); try { // Initialisation du document source : $this->document = fwc7_data_objet_att('', $this->id_type, $this->id_objet); // Récupération des constantes tel que : // - civilités $this->civilites = fwc7_data_liste_valeurs('', '2', 'value', array('label')); // Initialisation des modules codes lié à l'objet type $this->setModuleCodes(); $att_id_user = $this->module_codes['id_user']; // ... (truncated)

🔧 __construct

Constructor
function __construct(string $id_type, string $id_obje, $contexte = "", $handleGlobalEvent = null) { global $user; $this->id_type = $id_type; $this->id_objet = $id_obje; // Rollbar monitoring. $this->monitoringHandler = new RollbarMonitoringHandler((int)$id_obje); try { // Initialisation du document source : $this->document = fwc7_data_objet_att('', $this->id_type, $this->id_objet); // Récupération des constantes tel que : // - civilités $this->civilites = fwc7_data_liste_valeurs('', '2', 'value', array('label')); // Initialisation des modules codes lié à l'objet type $this->setModuleCodes(); $att_id_user = $this->module_codes['id_user']; // ... (truncated)

⚙️ Parameters


🔧 initialize

Initialize the document
function initialize($contexte,$handleGlobalEvent); /** * Get user identification * @param string $user_id User ID * @param string $id_checker Checker ID * @param callable $identificationFunction Function to calculate rights * @param mixed|null $this_id_type Optional ID type parameter * @param bool $all_franchise_documents Optional parameter for documents * @return array User identification information */ public function getUserIdentification( string $user_id, string $id_checker, callable $identificationFunction, $this_id_type = null, bool $all_franchise_documents = false ): array { return $identificationFunction($user_id, $id_checker, $this_id_type, $all_franchise_documents); }

⚙️ Parameters


🔧 getUserIdentification

Get user identification
function getUserIdentification( string $user_id, string $id_checker, callable $identificationFunction, $this_id_type = null, bool $all_franchise_documents = false ): array { return $identificationFunction($user_id, $id_checker, $this_id_type, $all_franchise_documents); }

⚙️ Parameters

↩️ Returns

(array) User identification information

🔧 setModuleCodes

Set module codes
function setModuleCodes(): array { $all_settings = fwp7_param_objet_settings_list('', $this->id_type, 'true'); $tligs_codes = fwp7_param_objet_tlig_list('', $this->id_type, 'true'); $module_codes = fwp7_param_objet_att_list('', $this->id_type, 'true'); $statuts = fwp7_param_objet_work_list("",$this->id_type,'true',''); $result = array(); foreach ($statuts as $item){ if(!empty($item['module_code'])){ $result[$item['module_code']]= $item['id_work']; } // ... (truncated)

↩️ Returns

(array) Module codes

🔧 getModuleCodes

Renvoie les modules codes associés
function getModuleCodes(): array { return $this->module_codes !== null ? $this->module_codes : $this->setModuleCodes(); }

↩️ Returns

(array) Module codes

🔧 setReplicationTVA

application de la tva dans le cas de l'ajout d'une ligne de produit, en fonction du paramètre d'environnement renseigné : replication_taux_tva_ligne_de_produit et de la tva renseigné dans la première ligne. cette réplication tva dois se lance uniquement à la premier création de ligne elle vient override les calculs. peristence en base donnée également. TODO:LG --- faire en sore que utilisable pour facture
function setReplicationTVA(array $eventHandler): ?string { $currentLine_id = $eventHandler['this_lig_id']; $first_line = null; foreach ($this->lignesDeProduit as $arrayKey => $subArray) { if (isset($subArray['ordre']) && $subArray['ordre'] == '1' && $subArray[$this->getModuleCodes()['ligne_section']] != "1") { $first_line= $subArray; break; } else if (isset($subArray['ordre']) && $subArray['ordre'] == '2' && $subArray[$this->getModuleCodes()['ligne_section']] != "1") { $first_line= $subArray; break; // ... (truncated)

↩️ Returns

(void)

🔧 loadProductLines

Récupérer les lignes de documents (ligne de produits, devis, factures, stocks)
function loadProductLines(): ?array { try { $this->lignesDeProduit = fwc7_data_objet_ligs("", $this->id_type, $this->id_objet, $this->getProductLigType, '', "1", [],'','','','true'); return $this->lignesDeProduit; } catch (Exception $e) { $this->logError($e, "Failed to load product lines", "error"); return []; } }

↩️ Returns

(array) Product lines

🔧 getProductLines

Renvoie les lignes récupérées à la création de la classe.
function getProductLines($forceReload = false): array { if($forceReload){ // si force reload == True alors on vient forcer la récupération des lignes de Devis. return $this->loadProductLines(); } else { return $this->lignesDeProduit; } }

↩️ Returns

(array)

🔧 upsertDocumentLine

Create a new document line
function upsertDocumentLine(string $id_lig, array $eventHandler): ?array { // construire le tableau à renvoyer. // need to update totals when creating a document line return Array(); }

⚙️ Parameters

↩️ Returns

(IDocumentLineProvider) Document line object

🔧 calculateDocumentTotals

Calculate document totals depuis ligne de document de type lineItem_callback
function calculateDocumentTotals(array $lineItems, bool $fullSum = false): array { // Initialize totals $document_total_ht = 0; $document_total_tva = 0; $document_total_ttc = 0; $document_amount_total_discounted_ht = 0; $document_amount_total_discounted_tva = 0; $document_amount_total_discounted_ttc = 0; $total_of_items = count($lineItems); // Initialize VAT tracking $vatGroups = []; try{ // ... (truncated)

⚙️ Parameters

↩️ Returns

(array) Document totals

⚠️ Throws


🔧 submitTotals

Save calculated totals to the database
function submitTotals(?array $totals = null, ?array $additionnal_updates = null): bool { try { $datas = []; foreach ($this->getFieldsToSum() as $key => $item) { $datas[$this->module_codes[$key]] = $totals[$item]; } // si on ajout des atts a modifier ici on les ajout à la update sql request. // attention ils ont la forme dun tableau avec des att en dur like array(1) { ["att2"]=> string(3) "519" } if(isset($additionnal_updates) && count($additionnal_updates) > 0){ // Vérification supplémentaire pour gérer si $additional_updates est déjà un tableau simple if (isset($additionnal_updates[0]) && is_array($additionnal_updates[0])) { $additional_data = reset($additionnal_updates); } else { // ... (truncated)

⚙️ Parameters

↩️ Returns

(bool) Success status

🔧 getFieldsToSum

Get fields to sum for totals calculation
function getFieldsToSum(): array; /** * Generate formatted address * @return string Formatted address */ abstract public function generateFormattedAddress(): string; /** * Log an error to the monitoring system * @param Exception $exception The exception to log * @param string $message Additional message * @param string $level Error level (debug|info|warning|error|critical) * @param array $metadata Additional metadata */ protected function logError(Exception $exception, string $message = "", string $level = "error", array $metadata = []) { $errorBody = empty($message) ? $exception->getMessage() : $message . ": " . $exception->getMessage(); $errorBody .= "\nStack trace: " . $exception->getTraceAsString(); $documentMetadata = $this->getDocumentMetadata(); $metadata = array_merge($documentMetadata, $metadata); $this->monitoringHandler->setRollbar_Log( $errorBody, $level, "Error in " . $this->getDocumentType() . " document", $metadata // ... (truncated)

↩️ Returns

(array) Fields to sum

🔧 generateFormattedAddress

Generate formatted address
function generateFormattedAddress(): string; /** * Log an error to the monitoring system * @param Exception $exception The exception to log * @param string $message Additional message * @param string $level Error level (debug|info|warning|error|critical) * @param array $metadata Additional metadata */ protected function logError(Exception $exception, string $message = "", string $level = "error", array $metadata = []) { $errorBody = empty($message) ? $exception->getMessage() : $message . ": " . $exception->getMessage(); $errorBody .= "\nStack trace: " . $exception->getTraceAsString(); $documentMetadata = $this->getDocumentMetadata(); $metadata = array_merge($documentMetadata, $metadata); $this->monitoringHandler->setRollbar_Log( $errorBody, $level, "Error in " . $this->getDocumentType() . " document", $metadata // ... (truncated)

↩️ Returns

(string) Formatted address

🔧 logError

Log an error to the monitoring system
function logError(Exception $exception, string $message = "", string $level = "error", array $metadata = []) { $errorBody = empty($message) ? $exception->getMessage() : $message . ": " . $exception->getMessage(); $errorBody .= "\nStack trace: " . $exception->getTraceAsString(); $documentMetadata = $this->getDocumentMetadata(); $metadata = array_merge($documentMetadata, $metadata); $this->monitoringHandler->setRollbar_Log( $errorBody, $level, "Error in " . $this->getDocumentType() . " document", $metadata // ... (truncated)

⚙️ Parameters


🔧 logEvent

Log an event to the monitoring system
function logEvent(string $message, string $level = "info", string $title = "", array $metadata = []) { $documentMetadata = $this->getDocumentMetadata(); $metadata = array_merge($documentMetadata, $metadata); $this->monitoringHandler->setRollbar_Log( $message, $level, empty($title) ? $this->getDocumentType() . " document event" : $title, $metadata ); }

⚙️ Parameters


🔧 getDocumentType

Get document type name
function getDocumentType(): string { return static::class; }

↩️ Returns

(string) Document type

🔧 getDocumentMetadata

Get document metadata for logging
function getDocumentMetadata(): array { return [ "id_type" => $this->id_type, "id_objet" => $this->id_objet, "user_id" => $this->module_codes['id_user'], "document_type" => $this->getDocumentType() ]; }

↩️ Returns

(array) Document metadata

🔧 resteAPayer

Calcul le reste à payer TTC et HT
function resteAPayer() { $facture = $this->document; $infoCommande = $this->getThisComandebyFacture(); $totalTTCFactureEnCour = $facture[fwp7_param_template_att_get_number('', $this->id_type, 'att_remise_totttc')]; $totalHTFactureEnCour = $facture[fwp7_param_template_att_get_number('', $this->id_type, 'att_remise_totht')]; if (empty($totalTTCFactureEnCour)) { $totalTTCFactureEnCour = $facture[fwp7_param_template_att_get_number('', $this->id_type, 'att_totttc')]; } if (empty($totalHTFactureEnCour)) { $totalHTFactureEnCour = $facture[fwp7_param_template_att_get_number('', $this->id_type, 'att_totht')]; // ... (truncated)

🔧 submit_SECTION_Totals

Soumet et met à jour les totaux de SECTION Cette fonction gère les lignes de SECTION d'un document. Pour chaque SECTION, elle vérifie si une ligne existe déjà dans le document et la crée, met à jour ou supprime selon le cas.
function submit_SECTION_Totals(): bool { // Environnement $environnement = fwp7_param_params_detail("",'franchiseur_nom'); // Recap SECTION tlig $tlig_produit = fwp7_param_template_tlg_get_number('', $this->id_type, 'ligne_de_documents'); if ($environnement == 'Rainea') { $att_is_section = fwp7_param_template_lig_get_number('', $this->id_type, $tlig_produit, 'ligne_section'); } else if ($environnement == 'Exteco') { $att_is_section = fwp7_param_template_lig_get_number('', $this->id_type, $tlig_produit, 'ligne_section'); } $codes = $this->getModuleCodes(); $tlig_recap_section = $codes["lignes_de_section"]; // ... (truncated)

↩️ Returns

(bool) Retourne true en cas de succès, false en cas d'erreur