Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions admin/import.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,19 @@
<?php
/* Copyright (C) 2025 ATM Consulting
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* 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. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

require '../config.php';

Expand Down
21 changes: 18 additions & 3 deletions class/nomenclature.class.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,19 @@
<?php
/* Copyright (C) 2025 ATM Consulting
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* 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. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

if (!class_exists('TObjetStd'))
{
Expand Down Expand Up @@ -1179,10 +1194,10 @@ function addMvtStock($qty, $fk_warehouse_to_make, $fk_warehouse_needed, $use_sub
}

/**
* Renvoi la quantité potentiellement fabricable du produit final par rapport au stock théorique ou reel des composants
* Compute the quantity that can be manufactured based on component stock.
*
* @param string $attr_stock attribut d'un objet Product (stock_theorique | stock_reel)
* @return float
* @param string $attr_stock Attribute name on Product (stock_theorique | stock_reel)
* @return float|null Quantity that can be made or null when no components found
*/
public function getQtyManufacturable($attr_stock='stock_theorique')
{
Expand Down
4 changes: 2 additions & 2 deletions class/techatm.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ public static function getLastModuleVersionUrl($moduleDescriptor){


/**
* @param $url
* @param type $url Description
* @return false|object
*/
public function getJsonData($url){
Expand All @@ -170,7 +170,7 @@ public function getJsonData($url){
}

/**
* @param $url
* @param type $url Description
* @return false|string
*/
public function getContents($url){
Expand Down
19 changes: 17 additions & 2 deletions config.default.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
<?php

/* Copyright (C) 2025 ATM Consulting
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* 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. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

if(is_file('../main.inc.php'))$dir = '../';
else if(is_file('../../../main.inc.php'))$dir = '../../../';
else $dir = '../../';
Expand Down Expand Up @@ -27,5 +42,5 @@
exit;
}



15 changes: 15 additions & 0 deletions config.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,19 @@
<?php
/* Copyright (C) 2025 ATM Consulting
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* 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. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

require(__DIR__.'/config.default.php');

101 changes: 2 additions & 99 deletions core/modules/modnomenclature.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ function __construct($db)
$this->description = "Description of module nomenclature";
// Possible values for version are: 'development', 'experimental', 'dolibarr' or version

$this->version = '4.13.0';
$this->version = '4.13.1';

// Url to the file with your last numberversion of this module
require_once __DIR__ . '/../../class/techatm.class.php';
Expand All @@ -77,25 +77,6 @@ function __construct($db)
// If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module'
$this->picto='nomenclature.svg@nomenclature';

// Defined all module parts (triggers, login, substitutions, menus, css, etc...)
// for default path (eg: /nomenclature/core/xxxxx) (0=disable, 1=enable)
// for specific path of parts (eg: /nomenclature/core/modules/barcode)
// for specific css file (eg: /nomenclature/css/nomenclature.css.php)
//$this->module_parts = array(
// 'triggers' => 0, // Set this to 1 if module has its own trigger directory (core/triggers)
// 'login' => 0, // Set this to 1 if module has its own login method directory (core/login)
// 'substitutions' => 0, // Set this to 1 if module has its own substitution function file (core/substitutions)
// 'menus' => 0, // Set this to 1 if module has its own menus handler directory (core/menus)
// 'theme' => 0, // Set this to 1 if module has its own theme directory (theme)
// 'tpl' => 0, // Set this to 1 if module overwrite template dir (core/tpl)
// 'barcode' => 0, // Set this to 1 if module has its own barcode directory (core/modules/barcode)
// 'models' => 0, // Set this to 1 if module has its own models directory (core/modules/xxx)
// 'css' => array('/nomenclature/css/nomenclature.css.php'), // Set this to relative path of css file if module has its own css file
// 'js' => array('/nomenclature/js/nomenclature.js'), // Set this to relative path of js file if module must load a js on all pages
// 'hooks' => array('hookcontext1','hookcontext2') // Set here all hooks context managed by module
// 'dir' => array('output' => 'othermodulename'), // To force the default directories names
// 'workflow' => array('WORKFLOW_MODULE1_YOURACTIONTYPE_MODULE2'=>array('enabled'=>'isModEnabled("module1") && isModEnabled("module2")', 'picto'=>'yourpicto@nomenclature')) // Set here all workflow context managed by module
// );
$this->module_parts = array(
'hooks'=>array(
'propalcard'
Expand Down Expand Up @@ -123,48 +104,15 @@ function __construct($db)
$this->depends = array(); // List of modules id that must be enabled if this module is enabled
$this->requiredby = array(); // List of modules id to disable if this one is disabled
$this->conflictwith = array(); // List of modules id this module is in conflict with
$this->phpmin = array(7,0); // Minimum version of PHP required by module
$this->phpmin = array(7,4); // Minimum version of PHP required by module
$this->need_dolibarr_version = array(17,0); // Minimum version of Dolibarr required by module
$this->langfiles = array("nomenclature@nomenclature");

// Constants
// List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 'current' or 'allentities', deleteonunactive)
// Example: $this->const=array(0=>array('MYMODULE_MYNEWCONST1','chaine','myvalue','This is a constant to add',1),
// 1=>array('MYMODULE_MYNEWCONST2','chaine','myvalue','This is another constant to add',0, 'current', 1)
// );
$this->const[] = array('NOMENCLATURE_USE_TIME_BEFORE_LAUNCH','chaine','1','',0,'current');
$this->const[] = array('NOMENCLATURE_USE_TIME_PREPARE','chaine','1','',0,'current');
$this->const[] = array('NOMENCLATURE_USE_TIME_DOING','chaine','1','',0,'current');
$this->const[] = array('NOMENCLATURE_CLOSE_ON_APPLY_NOMENCLATURE_PRICE','chaine','1','',0,'current');

//array('NOMENCLATURE_COEF_FOURNITURE','chaine','1.1','Coef. de frais généraux (stockage, appro, ...) sur Fourniture',1),
//array('NOMENCLATURE_COEF_CONSOMMABLE','chaine','1.05','Coef. de frais généraux (stockage, appro, ...) sur consmmable',1),
//array('NOMENCLATURE_COEF_MARGE','chaine','20','Coef. de marge sur prix de vente (en %)',1),

// Array to add new pages in new tabs
// Example: $this->tabs = array('objecttype:+tabname1:Title1:mylangfile@nomenclature:$user->rights->nomenclature->read:/nomenclature/mynewtab1.php?id=__ID__', // To add a new tab identified by code tabname1
// 'objecttype:+tabname2:Title2:mylangfile@nomenclature:$user->rights->othermodule->read:/nomenclature/mynewtab2.php?id=__ID__', // To add another new tab identified by code tabname2
// 'objecttype:-tabname:NU:conditiontoremove'); // To remove an existing tab identified by code tabname
// where objecttype can be
// 'categories_x' to add a tab in category view (replace 'x' by type of category (0=product, 1=supplier, 2=customer, 3=member)
// 'contact' to add a tab in contact view
// 'contract' to add a tab in contract view
// 'group' to add a tab in group view
// 'intervention' to add a tab in intervention view
// 'invoice' to add a tab in customer invoice view
// 'invoice_supplier' to add a tab in supplier invoice view
// 'member' to add a tab in fundation member view
// 'opensurveypoll' to add a tab in opensurvey poll view
// 'order' to add a tab in customer order view
// 'order_supplier' to add a tab in supplier order view
// 'payment' to add a tab in payment view
// 'payment_supplier' to add a tab in supplier payment view
// 'product' to add a tab in product view
// 'propal' to add a tab in propal view
// 'project' to add a tab in project view
// 'stock' to add a tab in stock view
// 'thirdparty' to add a tab in third party view
// 'user' to add a tab in user view
$this->tabs = array(
'product:+nomenclature:Nomenclature:nomenclature@nomenclature:$user->hasRight("nomenclature","read"):/nomenclature/nomenclature.php?fk_product=__ID__'
,'thirdparty:+nomenclaturecoef:Coefficient:nomenclature@nomenclature:$user->hasRight("nomenclature","tiers","updatecoef"):/nomenclature/nomenclature_coef.php?socid=__ID__&fiche=tiers'
Expand All @@ -185,21 +133,6 @@ function __construct($db)
$conf->nomenclature->enabled=0;
}
$this->dictionaries=array();
/* Example:
if (! isModEnabled("nomenclature")) $conf->nomenclature->enabled=0; // This is to avoid warnings
$this->dictionaries=array(
'langs'=>'mylangfile@nomenclature',
'tabname'=>array(MAIN_DB_PREFIX."table1",MAIN_DB_PREFIX."table2",MAIN_DB_PREFIX."table3"), // List of tables we want to see into dictonnary editor
'tablib'=>array("Table1","Table2","Table3"), // Label of tables
'tabsql'=>array('SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table1 as f','SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table2 as f','SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table3 as f'), // Request to select fields
'tabsqlsort'=>array("label ASC","label ASC","label ASC"), // Sort order
'tabfield'=>array("code,label","code,label","code,label"), // List of fields (result of select to show dictionary)
'tabfieldvalue'=>array("code,label","code,label","code,label"), // List of fields (list of fields to edit a record)
'tabfieldinsert'=>array("code,label","code,label","code,label"), // List of fields (list of fields for insert)
'tabrowid'=>array("rowid","rowid","rowid"), // Name of columns with primary key (try to always name it 'rowid')
'tabcond'=>array(isModEnabled("nomenclature"),isModEnabled("nomenclature"),isModEnabled("nomenclature")) // Condition to show each dictionary
);
*/

// Boxes
// Add here list of php file(s) stored in core/boxes that contains class to show a box.
Expand Down Expand Up @@ -260,23 +193,6 @@ function __construct($db)
$this->menu = array(); // List of menus to add
$r=0;

// Add here entries to declare new menus
//
// Example to declare a new Top Menu entry and its Left menu entry:
// $this->menu[$r]=array( 'fk_menu'=>0, // Put 0 if this is a top menu
// 'type'=>'top', // This is a Top menu entry
// 'titre'=>'nomenclature top menu',
// 'mainmenu'=>'nomenclature',
// 'leftmenu'=>'nomenclature',
// 'url'=>'/nomenclature/pagetop.php',
// 'langs'=>'mylangfile@nomenclature', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
// 'position'=>100,
// 'enabled'=>'isModEnabled("nomenclature")', // Define condition to show or hide menu entry. Use 'isModEnabled("nomenclature")' if entry must be visible if module is enabled.
// 'perms'=>'1', // Use 'perms'=>'$user->hasRight("nomenclature", "level1", "level2")' if you want your menu with a permission rules
// 'target'=>'',
// 'user'=>2); // 0=Menu for internal users, 1=external users, 2=both
// $r++;
//
// Example to declare a Left Menu entry into an existing Top menu entry:
$this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=products', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
'type'=>'left', // This is a Left menu entry
Expand Down Expand Up @@ -309,19 +225,6 @@ function __construct($db)
// Exports
$r=1;

// Example:
// $this->export_code[$r]=$this->rights_class.'_'.$r;
// $this->export_label[$r]='CustomersInvoicesAndInvoiceLines'; // Translation key (used only if key ExportDataset_xxx_z not found)
// $this->export_enabled[$r]='1'; // Condition to show export in list (ie: '$user->id==3'). Set to 1 to always show when module is enabled.
// $this->export_permission[$r]=array(array("facture","facture","export"));
// $this->export_fields_array[$r]=array('s.rowid'=>"IdCompany",'s.nom'=>'CompanyName','s.address'=>'Address','s.zip'=>'Zip','s.town'=>'Town','s.fk_pays'=>'Country','s.phone'=>'Phone','s.siren'=>'ProfId1','s.siret'=>'ProfId2','s.ape'=>'ProfId3','s.idprof4'=>'ProfId4','s.code_compta'=>'CustomerAccountancyCode','s.code_compta_fournisseur'=>'SupplierAccountancyCode','f.rowid'=>"InvoiceId",'f.facnumber'=>"InvoiceRef",'f.datec'=>"InvoiceDateCreation",'f.datef'=>"DateInvoice",'f.total'=>"TotalHT",'f.total_ttc'=>"TotalTTC",'f.tva'=>"TotalVAT",'f.paye'=>"InvoicePaid",'f.fk_statut'=>'InvoiceStatus','f.note'=>"InvoiceNote",'fd.rowid'=>'LineId','fd.description'=>"LineDescription",'fd.price'=>"LineUnitPrice",'fd.tva_tx'=>"LineVATRate",'fd.qty'=>"LineQty",'fd.total_ht'=>"LineTotalHT",'fd.total_tva'=>"LineTotalTVA",'fd.total_ttc'=>"LineTotalTTC",'fd.date_start'=>"DateStart",'fd.date_end'=>"DateEnd",'fd.fk_product'=>'ProductId','p.ref'=>'ProductRef');
// $this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.zip'=>'company','s.town'=>'company','s.fk_pays'=>'company','s.phone'=>'company','s.siren'=>'company','s.siret'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.code_compta'=>'company','s.code_compta_fournisseur'=>'company','f.rowid'=>"invoice",'f.facnumber'=>"invoice",'f.datec'=>"invoice",'f.datef'=>"invoice",'f.total'=>"invoice",'f.total_ttc'=>"invoice",'f.tva'=>"invoice",'f.paye'=>"invoice",'f.fk_statut'=>'invoice','f.note'=>"invoice",'fd.rowid'=>'invoice_line','fd.description'=>"invoice_line",'fd.price'=>"invoice_line",'fd.total_ht'=>"invoice_line",'fd.total_tva'=>"invoice_line",'fd.total_ttc'=>"invoice_line",'fd.tva_tx'=>"invoice_line",'fd.qty'=>"invoice_line",'fd.date_start'=>"invoice_line",'fd.date_end'=>"invoice_line",'fd.fk_product'=>'product','p.ref'=>'product');
// $this->export_sql_start[$r]='SELECT DISTINCT ';
// $this->export_sql_end[$r] =' FROM ('.MAIN_DB_PREFIX.'facture as f, '.MAIN_DB_PREFIX.'facturedet as fd, '.MAIN_DB_PREFIX.'societe as s)';
// $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product as p on (fd.fk_product = p.rowid)';
// $this->export_sql_end[$r] .=' WHERE f.fk_soc = s.rowid AND f.rowid = fd.fk_facture';
// $this->export_sql_order[$r] .=' ORDER BY s.nom';
// $r++;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,13 @@ public function __construct($db)
$this->db = $db;

$this->name = preg_replace('/^Interface/i', '', get_class($this));
$this->family = "demo";
$this->family = "ATM Consulting - GPAO";
$this->description = "Triggers of this module are empty functions."
. "They have no effect."
. "They are provided for tutorial purpose only.";
// 'development', 'experimental', 'dolibarr' or version
$this->version = 'development';
$this->picto = 'nomenclature@nomenclature';
$this->picto = 'nomenclature@nomenclature.png';
}

/**
Expand Down Expand Up @@ -101,17 +101,16 @@ public function getVersion()

/**
* Function called when a Dolibarrr business event is done.
* All functions "run_trigger" are triggered if file
* is inside directory core/triggers
* All functions "run_trigger" are triggered if file is inside directory core/triggers.
*
* @param string $action Event action code
* @param Object $object Object
* @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
* @param string $action Event action code
* @param Object $object Target object of the event
* @param User $user Current user
* @param Translate $langs Translation handler
* @param Conf $conf Global conf object
* @return int <0 if KO, 0 if no trigger ran, >0 if OK
*/
public function run_trigger($action, $object, $user, $langs, $conf) {
public function runTrigger($action, $object, $user, $langs, $conf) {
// Put here code you want to execute when a Dolibarr business events occurs.
// Data and type of action are stored into $object and $action
// Users
Expand Down Expand Up @@ -551,7 +550,7 @@ private function _setPrice(&$PDOdb, &$object,$fk_parent,$object_type) {
$propal = new Propal($db);
$propal->fetch($fk_parent);
$propalBuyPrice = !empty($n->totalPRCMO / $object->qty) ? $n->totalPRCMO / $object->qty : $object->pa_ht;

$propal->updateline($object->id,$sell_price_to_use,$object->qty,$object->remise_percent,$object->tva_tx,$object->localtax1_tx,$object->localtax2_tx,$object->desc,'HT',0,0,0,0,$object->fk_fournprice, $propalBuyPrice, $object->label, $object->product_type, $object->date_start, $object->date_end, 0, $object->fk_unit);


Expand Down
Loading