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') { $first_line= $subArray; break; } } // dans le cas de la saise d'une premiere ligne, on fait rien et dans le cas d'un création de lig on fait if ((int)$first_line['id_lig'] !== (int)$currentLine_id && $this->optionTVA == 1 && ($eventHandler['isCreateLig'] || $eventHandler['isProduct_hasChanged'])) { // ... (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és à 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){ $datas = array_merge($datas, $additionnal_updates[0]); } //document_calcul_euro_ttc_discount fwc7_modify_att_edit('', $this->id_type, $this->id_objet, $datas, '', 'mise à jour des totaux','',''); // ... (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