Heray-Was-Here
Server : Apache
System : Linux mail.lomejor.cr 6.8.0-1059-azure #65~22.04.1-Ubuntu SMP Thu May 28 16:59:19 UTC 2026 x86_64
User : www-data ( 33)
PHP Version : 8.2.31
Disable Function : NONE
Directory :  /var/www/erp/htdocs/custom/stockalert/core/triggers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/erp/htdocs/custom/stockalert/core/triggers/interface_90_all_Alert.class.php
<?php
/* StockAlert - Dolibarr module
 * Copyleft 2015 cyberesprit
 *
 * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 * TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 *
 * 0. You just DO WHAT THE FUCK YOU WANT TO.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 */

/**
 * \file    htdocs/core/triggers/interface_90_all_Alert.class.php
 * \ingroup core
 * \brief   Fichier de personalisation des actions du workflow pour StockAlert - Dolibarr module
 *
 */

require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';

/**
 *  Class of triggers for stockalert module
 */
class InterfaceAlert extends DolibarrTriggers
{
    public $family      = 'other';
    public $picto       = 'warning';
    public $description = "Permet d'alerter les produits en dessous de leur seuil d'alerte à la validation d'une facture.";
    public $version     = self::VERSION_DOLIBARR;

    /**
     * Function called when a Dolibarrr business event is done.
     * All functions "runTrigger" are triggered if file is inside directory htdocs/core/triggers or htdocs/module/code/triggers (and declared)
     *
     * @param string    $action     Event action code
     * @param Object    $object     Object concerned. Some context information may also be provided into array property object->context.
     * @param User      $user       Object user
     * @param Translate $langs      Object langs
     * @param conf      $conf       Object conf
     * @return int      <0 if KO, 0 if no triggered ran, >0 if OK
     */
    public function runTrigger($action, $object, User $user, Translate $langs, Conf $conf)
    {
        $langs->load("stockalert@stockalert");

        switch ($action)
        {
            // Users
            case 'USER_CREATE':
            case 'USER_MODIFY':
            case 'USER_NEW_PASSWORD':
            case 'USER_ENABLEDISABLE':
            case 'USER_DELETE':
            case 'USER_SETINGROUP':
            case 'USER_REMOVEFROMGROUP':

            case 'USER_LOGIN':
            case 'USER_LOGIN_FAILED':
            case 'USER_LOGOUT':
                break;

            // Actions
            case 'ACTION_MODIFY':
            case 'ACTION_CREATE':
            case 'ACTION_DELETE':
                break;

            // Groups
            case 'GROUP_CREATE':
            case 'GROUP_MODIFY':
            case 'GROUP_DELETE':
                break;

            // Companies
            case 'COMPANY_CREATE':
            case 'COMPANY_MODIFY':
            case 'COMPANY_DELETE':
                break;

            // Contacts
            case 'CONTACT_CREATE':
            case 'CONTACT_MODIFY':
            case 'CONTACT_DELETE':
            case 'CONTACT_ENABLEDISABLE':
                break;

            // Products
            case 'PRODUCT_CREATE':
            case 'PRODUCT_MODIFY':
            case 'PRODUCT_DELETE':
            case 'PRODUCT_PRICE_MODIFY':
                break;

            //Stock mouvement
            case 'STOCK_MOVEMENT':

                if ($conf->global->STOCKALERT_MOVEMENTS_ENABLE or $conf->global->STOCKALERT_EMAIL_ENABLE)
                {
                    if (isset($object->origin->lines) 
                        and ($object->origin->lines !== null 
                        or !empty($object->origin->lines)))
                    {
                        foreach ($object->origin->lines as $key => $val)
                        {
                            if ($object->product_id == $val->fk_product)
                            {
                                $product = $val;
                                $stockdb = $product->db->query("SELECT seuil_stock_alerte, stock FROM llx_product WHERE rowid = ".$object->product_id);

                                break;
                            }
                        }

                        if ($stockdb 
                            and $stockdb->num_rows == 1)
                        {
                            $stock = $stockdb->fetch_object();

                            if ($stock->seuil_stock_alerte != null and $stock->stock <= $stock->seuil_stock_alerte)
                            {
                                $icon = img_picto($langs->trans("StockAlertLowerThanLimit"), 'warning');
                                $msg  = "<u>".$langs->trans("StockAlertLimitAlert")."</u> :<br />";
                                $msg .= $product->product_ref;
                                $msg .= ", ";
                                $msg .= $product->product_label;
                                $msg .= " (";
                                $msg .= $langs->trans("StockAlertLimit")." : ".$stock->seuil_stock_alerte;
                                $msg .= ", ";
                                $msg .= $langs->trans("StockAlertReste")." : ".$stock->stock;
                                $msg .= ")";
                                $msg .= "<br />";

                                // Sent notification popup
                                if ($conf->global->STOCKALERT_MOVEMENTS_ENABLE)
                                {
                                    setEventMessages($icon." ".$msg, null, 'warnings');
                                }
                                
                                // Sent notification email
                                if ($conf->global->STOCKALERT_EMAIL_ENABLE)
                                {
                                    require_once (DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php");
                                    
                                    $sendto     = $conf->global->STOCKALERT_RECIVER;
                                    $from       = $conf->global->MAIN_MAIL_EMAIL_FROM;
                                    $errorsto   = $conf->global->MAIN_MAIL_EMAIL_FROM;

                                    $subject    = $langs->trans("StockAlertEmailMsgTitle")." : ".$product->product_ref;
                                    $allmessage = $msg;
                                    
                                    $mail = new CMailFile
                                    (
                                        $subject,
                                        $sendto,
                                        $from,
                                        $allmessage,
                                        array(),
                                        array(),
                                        array(),
                                        '',
                                        '',
                                        0,
                                        -1 // Msg is html ?
                                    );

                                    $mail->errors_to = $errorsto;

                                    $result = $mail->sendfile();

                                    if (!$result)
                                    {
                                        $error = "Error sending email ".$mail->error;

                                        setEventMessages($error, null, 'errors');
                                        dol_syslog($error."\n");
                                    }
                                }
                            }
                            
                            $stockdb->close();
                        }
                    }
                }

                break;

            //MYECMDIR
            case 'MYECMDIR_DELETE':
            case 'MYECMDIR_CREATE':
            case 'MYECMDIR_MODIFY':
                break;

            // Customer orders
            case 'ORDER_CREATE':
            case 'ORDER_CLONE':
            case 'ORDER_VALIDATE':
            case 'ORDER_DELETE':
            case 'ORDER_CANCEL':
            case 'ORDER_SENTBYMAIL':
            case 'ORDER_CLASSIFY_BILLED':
            case 'LINEORDER_INSERT':
            case 'LINEORDER_UPDATE':
            case 'LINEORDER_DELETE':
                break;

            // Supplier orders
            case 'ORDER_SUPPLIER_CREATE':
            case 'ORDER_SUPPLIER_CLONE':
            case 'ORDER_SUPPLIER_VALIDATE':
            case 'ORDER_SUPPLIER_DELETE':
            case 'ORDER_SUPPLIER_APPROVE':
            case 'ORDER_SUPPLIER_REFUSE':
            case 'ORDER_SUPPLIER_CANCEL':
            case 'ORDER_SUPPLIER_SENTBYMAIL':
            case 'ORDER_SUPPLIER_DISPATCH':
            case 'LINEORDER_SUPPLIER_DISPATCH':
            case 'LINEORDER_SUPPLIER_CREATE':
            case 'LINEORDER_SUPPLIER_UPDATE':
                break;

            // Proposals
            case 'PROPAL_CREATE':
            case 'PROPAL_CLONE':
            case 'PROPAL_MODIFY':
            case 'PROPAL_VALIDATE':
            case 'PROPAL_SENTBYMAIL':
            case 'PROPAL_CLOSE_SIGNED':
            case 'PROPAL_CLOSE_REFUSED':
            case 'PROPAL_DELETE':
            case 'LINEPROPAL_INSERT':
            case 'LINEPROPAL_UPDATE':
            case 'LINEPROPAL_DELETE':
                break;

            // Askpricesupplier
            case 'ASKPRICESUPPLIER_CREATE':
            case 'ASKPRICESUPPLIER_CLONE':
            case 'ASKPRICESUPPLIER_MODIFY':
            case 'ASKPRICESUPPLIER_VALIDATE':
            case 'ASKPRICESUPPLIER_SENTBYMAIL':
            case 'ASKPRICESUPPLIER_CLOSE_SIGNED':
            case 'ASKPRICESUPPLIER_CLOSE_REFUSED':
            case 'ASKPRICESUPPLIER_DELETE':
            case 'LINEASKPRICESUPPLIER_INSERT':
            case 'LINEASKPRICESUPPLIER_UPDATE':
            case 'LINEASKPRICESUPPLIER_DELETE':
                break;
            
            // Contracts
            case 'CONTRACT_CREATE':
            case 'CONTRACT_ACTIVATE':
            case 'CONTRACT_CANCEL':
            case 'CONTRACT_CLOSE':
            case 'CONTRACT_DELETE':
            case 'LINECONTRACT_CREATE':
            case 'LINECONTRACT_UPDATE':
            case 'LINECONTRACT_DELETE':
                break;

            // Bills
            case 'BILL_CREATE':
            case 'BILL_CLONE':
            case 'BILL_MODIFY':
            case 'BILL_VALIDATE':
            case 'BILL_UNVALIDATE':
            case 'BILL_SENTBYMAIL':
            case 'BILL_CANCEL':
            case 'BILL_DELETE':
            case 'BILL_PAYED':
            case 'LINEBILL_INSERT':
            case 'LINEBILL_UPDATE':
            case 'LINEBILL_DELETE':
                break;

            //Supplier Bill
            case 'BILL_SUPPLIER_CREATE':
            case 'BILL_SUPPLIER_UPDATE':
            case 'BILL_SUPPLIER_DELETE':
            case 'BILL_SUPPLIER_PAYED':
            case 'BILL_SUPPLIER_UNPAYED':
            case 'BILL_SUPPLIER_VALIDATE':
            case 'BILL_SUPPLIER_UNVALIDATE':
            case 'LINEBILL_SUPPLIER_CREATE':
            case 'LINEBILL_SUPPLIER_UPDATE':
            case 'LINEBILL_SUPPLIER_DELETE':
                break;

            // Payments
            case 'PAYMENT_CUSTOMER_CREATE':
            case 'PAYMENT_SUPPLIER_CREATE':
            case 'PAYMENT_ADD_TO_BANK':
            case 'PAYMENT_DELETE':
                break;
            
            // Online  
            case 'PAYMENT_PAYBOX_OK':
            case 'PAYMENT_PAYPAL_OK':
                break;
            
            // Donation
            case 'DON_CREATE':
            case 'DON_UPDATE':
            case 'DON_DELETE':
                break;

            // Interventions
            case 'FICHINTER_CREATE':
            case 'FICHINTER_MODIFY':
            case 'FICHINTER_VALIDATE':
            case 'FICHINTER_DELETE':
            case 'LINEFICHINTER_CREATE':
            case 'LINEFICHINTER_UPDATE':
            case 'LINEFICHINTER_DELETE':
                break;

            // Members
            case 'MEMBER_CREATE':
            case 'MEMBER_VALIDATE':
            case 'MEMBER_SUBSCRIPTION':
            case 'MEMBER_MODIFY':
            case 'MEMBER_NEW_PASSWORD':
            case 'MEMBER_RESILIATE':
            case 'MEMBER_DELETE':
                break;

            // Categories
            case 'CATEGORY_CREATE':
            case 'CATEGORY_MODIFY':
            case 'CATEGORY_DELETE':
                break;

            // Projects
            case 'PROJECT_CREATE':
            case 'PROJECT_MODIFY':
            case 'PROJECT_DELETE':
                break;

            // Project tasks
            case 'TASK_CREATE':
            case 'TASK_MODIFY':
            case 'TASK_DELETE':
                break;

            // Task time spent
            case 'TASK_TIMESPENT_CREATE':
            case 'TASK_TIMESPENT_MODIFY':
            case 'TASK_TIMESPENT_DELETE':
                break;

            // Shipping
            case 'SHIPPING_CREATE':
            case 'SHIPPING_MODIFY':
            case 'SHIPPING_VALIDATE':
            case 'SHIPPING_SENTBYMAIL':
            case 'SHIPPING_DELETE':
                break;
        }

        return 0;
    }
}

Hry