2004-10-20 00:24:10 +02:00
< ? php
2005-04-12 22:01:42 +02:00
/* Copyright ( C ) 2003 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2010-03-20 21:24:32 +01:00
* Copyright ( C ) 2004 - 2010 Laurent Destailleur < eldy @ users . sourceforge . net >
2005-04-12 22:01:42 +02:00
* Copyright ( C ) 2004 Sebastien Di Cintio < sdicintio @ ressource - toi . org >
* Copyright ( C ) 2004 Benoit Mortier < benoit . mortier @ opensides . be >
2009-04-28 11:41:30 +02:00
* Copyright ( C ) 2005 - 2009 Regis Houssin < regis @ dolibarr . fr >
2003-11-17 17:35:49 +01:00
*
* 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 2 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
2011-08-01 01:24:38 +02:00
* along with this program . If not , see < http :// www . gnu . org / licenses />.
2003-11-17 17:35:49 +01:00
*
*/
2005-04-12 22:01:42 +02:00
/**
2009-07-30 00:52:08 +02:00
* \defgroup service Module services
2009-06-08 20:14:37 +02:00
* \brief Module pour gerer le suivi de services predefinis
2011-10-24 14:11:49 +02:00
* \file htdocs / core / modules / modService . class . php
2009-06-08 20:14:37 +02:00
* \ingroup service
* \brief Fichier de description et activation du module Service
2008-10-01 21:10:17 +02:00
*/
2004-08-14 14:21:24 +02:00
2011-10-24 14:11:49 +02:00
include_once ( DOL_DOCUMENT_ROOT . " /core/modules/DolibarrModules.class.php " );
2007-10-10 01:15:25 +02:00
2003-11-17 17:35:49 +01:00
2012-03-30 00:54:41 +02:00
/**
* Classe de description et activation du module Service
2008-10-01 21:10:17 +02:00
*/
2003-11-17 17:35:49 +01:00
class modService extends DolibarrModules
{
2008-10-01 21:10:17 +02:00
/**
2011-09-26 16:22:35 +02:00
* Constructor . Define names , constants , directories , boxes , permissions
*
2012-01-04 21:23:50 +01:00
* @ param DoliDB $db Database handler
2008-10-01 21:10:17 +02:00
*/
2012-01-04 21:23:50 +01:00
function modService ( $db )
2008-10-01 21:10:17 +02:00
{
2009-06-08 20:44:53 +02:00
global $conf ;
2012-01-04 21:23:50 +01:00
$this -> db = $db ;
$this -> numero = 53 ;
2008-10-01 21:10:17 +02:00
$this -> family = " products " ;
// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
2009-10-21 15:09:42 +02:00
$this -> name = preg_replace ( '/^mod/i' , '' , get_class ( $this ));
2008-10-01 21:10:17 +02:00
$this -> description = " Gestion des services " ;
2008-12-15 23:25:59 +01:00
// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
$this -> version = 'dolibarr' ;
2009-05-04 13:40:00 +02:00
2008-10-06 09:39:52 +02:00
$this -> const_name = 'MAIN_MODULE_' . strtoupper ( $this -> name );
2008-10-01 21:10:17 +02:00
$this -> special = 0 ;
$this -> picto = 'service' ;
2009-05-04 13:40:00 +02:00
2009-04-28 15:04:35 +02:00
// Data directories to create when module is enabled
2009-05-04 13:40:00 +02:00
$this -> dirs = array ( " /produit/temp " );
2008-10-01 21:10:17 +02:00
2009-05-04 13:40:00 +02:00
// Dependancies
2009-06-08 20:14:37 +02:00
$this -> depends = array ();
2008-10-01 21:10:17 +02:00
$this -> requiredby = array ( " modContrat " );
2009-06-08 20:44:53 +02:00
// Config pages
2012-03-03 16:33:38 +01:00
$this -> config_page_url = array ( " product.php@product " );
2009-06-08 20:44:53 +02:00
$this -> langfiles = array ( " products " , " companies " , " bills " );
2009-05-04 13:40:00 +02:00
// Constants
2008-10-01 21:10:17 +02:00
$this -> const = array ();
2009-05-04 13:40:00 +02:00
// Boxes
2008-10-01 21:10:17 +02:00
$this -> boxes = array ();
2012-02-19 13:12:11 +01:00
$this -> boxes [ 0 ][ 1 ] = " box_services_contracts.php " ;
2008-10-01 21:10:17 +02:00
// Permissions
$this -> rights = array ();
$this -> rights_class = 'service' ;
2009-06-08 20:14:37 +02:00
$r = 0 ;
$this -> rights [ $r ][ 0 ] = 531 ; // id de la permission
$this -> rights [ $r ][ 1 ] = 'Lire les services' ; // libelle de la permission
$this -> rights [ $r ][ 2 ] = 'r' ; // type de la permission (deprecie a ce jour)
$this -> rights [ $r ][ 3 ] = 1 ; // La permission est-elle une permission par defaut
$this -> rights [ $r ][ 4 ] = 'lire' ;
2010-08-17 10:18:46 +02:00
$r ++ ;
2009-06-08 20:14:37 +02:00
$this -> rights [ $r ][ 0 ] = 532 ; // id de la permission
$this -> rights [ $r ][ 1 ] = 'Creer/modifier les services' ; // libelle de la permission
$this -> rights [ $r ][ 2 ] = 'w' ; // type de la permission (deprecie a ce jour)
$this -> rights [ $r ][ 3 ] = 0 ; // La permission est-elle une permission par defaut
$this -> rights [ $r ][ 4 ] = 'creer' ;
2010-08-17 10:18:46 +02:00
$r ++ ;
2009-06-08 20:14:37 +02:00
$this -> rights [ $r ][ 0 ] = 534 ; // id de la permission
$this -> rights [ $r ][ 1 ] = 'Supprimer les services' ; // libelle de la permission
$this -> rights [ $r ][ 2 ] = 'd' ; // type de la permission (deprecie a ce jour)
$this -> rights [ $r ][ 3 ] = 0 ; // La permission est-elle une permission par defaut
$this -> rights [ $r ][ 4 ] = 'supprimer' ;
2010-08-17 10:18:46 +02:00
$r ++ ;
2009-06-08 20:14:37 +02:00
$this -> rights [ $r ][ 0 ] = 538 ; // Must be same permission than in product module
$this -> rights [ $r ][ 1 ] = 'Exporter les services' ;
$this -> rights [ $r ][ 2 ] = 'r' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'export' ;
2010-08-17 10:18:46 +02:00
$r ++ ;
2009-06-08 20:44:53 +02:00
// Exports
//--------
$r = 0 ;
$r ++ ;
$this -> export_code [ $r ] = $this -> rights_class . '_' . $r ;
$this -> export_label [ $r ] = " Services " ; // Translation key (used only if key ExportDataset_xxx_z not found)
$this -> export_permission [ $r ] = array ( array ( " service " , " export " ));
2010-08-11 20:35:31 +02:00
$this -> export_fields_array [ $r ] = array ( 'p.rowid' => " Id " , 'p.ref' => " Ref " , 'p.label' => " Label " , 'p.description' => " Description " , 'p.accountancy_code_sell' => " ProductAccountancySellCode " , 'p.accountancy_code_buy' => " ProductAccountancyBuyCode " , 'p.note' => " Note " , 'p.price_base_type' => " PriceBase " , 'p.price' => " UnitPriceHT " , 'p.price_ttc' => " UnitPriceTTC " , 'p.tva_tx' => 'VATRate' , 'p.tosell' => " OnSell " , 'p.duration' => " Duration " , 'p.datec' => 'DateCreation' , 'p.tms' => 'DateModification' );
2012-03-13 09:38:00 +01:00
if ( ! empty ( $conf -> stock -> enabled )) $this -> export_fields_array [ $r ] = array_merge ( $this -> export_fields_array [ $r ], array ( 'p.stock' => 'Stock' ));
2010-08-11 20:35:31 +02:00
$this -> export_entities_array [ $r ] = array ( 'p.rowid' => " service " , 'p.ref' => " service " , 'p.label' => " service " , 'p.description' => " service " , 'p.accountancy_code_sell' => 'service' , 'p.accountancy_code_sell' => 'service' , 'p.note' => " service " , 'p.price_base_type' => " service " , 'p.price' => " service " , 'p.price_ttc' => " service " , 'p.tva_tx' => " service " , 'p.tosell' => " service " , 'p.duration' => " service " , 'p.datec' => " service " , 'p.tms' => " service " );
2012-03-13 09:38:00 +01:00
if ( ! empty ( $conf -> stock -> enabled )) $this -> export_entities_array [ $r ] = array_merge ( $this -> export_entities_array [ $r ], array ( 'p.stock' => 'product' ));
2012-03-03 16:33:38 +01:00
// Add extra fields
$sql = " SELECT name, label FROM " . MAIN_DB_PREFIX . " extrafields WHERE elementtype = 'product' " ;
$resql = $this -> db -> query ( $sql );
if ( $resql ) // This can fail when class is used on old database (during migration for example)
{
while ( $obj = $this -> db -> fetch_object ( $resql ))
{
$fieldname = 'extra.' . $obj -> name ;
$fieldlabel = ucfirst ( $obj -> label );
$this -> export_fields_array [ $r ][ $fieldname ] = $fieldlabel ;
$this -> export_entities_array [ $r ][ $fieldname ] = 'product' ;
}
}
// End add axtra fields
2009-06-08 20:44:53 +02:00
$this -> export_sql_start [ $r ] = 'SELECT DISTINCT ' ;
$this -> export_sql_end [ $r ] = ' FROM ' . MAIN_DB_PREFIX . 'product as p' ;
2012-03-03 16:33:38 +01:00
$this -> export_sql_end [ $r ] .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'product_extrafields as extra ON p.rowid = extra.fk_object' ;
2012-02-11 10:18:09 +01:00
$this -> export_sql_end [ $r ] .= ' WHERE p.fk_product_type = 1 AND p.entity IN (' . getEntity ( " product " , 1 ) . ')' ;
2009-06-08 20:44:53 +02:00
2012-03-03 16:33:38 +01:00
// Imports
//--------
$r = 0 ;
$r ++ ;
$this -> import_code [ $r ] = $this -> rights_class . '_' . $r ;
$this -> import_label [ $r ] = " Products " ; // Translation key
$this -> import_icon [ $r ] = $this -> picto ;
$this -> import_entities_array [ $r ] = array (); // We define here only fields that use another icon that the one defined into import_icon
$this -> import_tables_array [ $r ] = array ( 'p' => MAIN_DB_PREFIX . 'product' , 'extra' => MAIN_DB_PREFIX . 'product_extrafields' );
$this -> import_tables_creator_array [ $r ] = array ( 'p' => 'fk_user_author' ); // Fields to store import user id
2012-03-30 00:54:41 +02:00
$this -> import_fields_array [ $r ] = array ( 'p.ref' => " Ref* " , 'p.label' => " Label* " , 'p.description' => " Description " , 'p.accountancy_code_sell' => " ProductAccountancySellCode " , 'p.accountancy_code_buy' => " ProductAccountancyBuyCode " , 'p.note' => " Note " , 'p.length' => " Length " , 'p.surface' => " Surface " , 'p.volume' => " Volume " , 'p.weight' => " Weight " , 'p.duration' => " Duration " , 'p.customcode' => 'CustomCode' , 'p.price' => " SellingPriceHT " , 'p.price_ttc' => " SellingPriceTTC " , 'p.tva_tx' => 'VAT' , 'p.tosell' => " OnSell* " , 'p.tobuy' => " OnBuy* " , 'p.fk_product_type' => " Type* " , 'p.finished' => 'Nature' , 'p.datec' => 'DateCreation*' );
2012-03-03 16:33:38 +01:00
// Add extra fields
$sql = " SELECT name, label FROM " . MAIN_DB_PREFIX . " extrafields WHERE elementtype = 'product' " ;
$resql = $this -> db -> query ( $sql );
if ( $resql ) // This can fail when class is used on old database (during migration for example)
{
while ( $obj = $this -> db -> fetch_object ( $resql ))
{
$fieldname = 'extra.' . $obj -> name ;
$fieldlabel = ucfirst ( $obj -> label );
$this -> import_fields_array [ $r ][ $fieldname ] = $fieldlabel ;
}
}
// End add extra fields
$this -> import_fieldshidden_array [ $r ] = array ( 'extra.fk_object' => 'lastrowid-' . MAIN_DB_PREFIX . 'product' ); // aliastable.field => ('user->id' or 'lastrowid-'.tableparent)
$this -> import_regex_array [ $r ] = array ( 'p.ref' => '[^ ]' , 'p.tosell' => '^[0|1]$' , 'p.tobuy' => '^[0|1]$' , 'p.fk_product_type' => '^[0|1]$' , 'p.datec' => '^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$' );
$this -> import_examplevalues_array [ $r ] = array ( 'p.ref' => " PR123456 " , 'p.label' => " My product " , 'p.description' => " This is a description example for record " , 'p.note' => " Some note " , 'p.price' => " 100 " , 'p.price_ttc' => " 110 " , 'p.tva_tx' => '10' , 'p.tosell' => " 0 or 1 " , 'p.tobuy' => " 0 or 1 " , 'p.fk_product_type' => " 0 for product/1 for service " , 'p.finished' => '' , 'p.duration' => " 1y " , 'p.datec' => '2008-12-31' );
2008-10-01 21:10:17 +02:00
}
/**
2012-01-04 21:23:50 +01:00
* Function called when module is enabled .
* The init function add constants , boxes , permissions and menus ( defined in constructor ) into Dolibarr database .
* It also creates data directories
*
* @ param string $options Options when enabling module ( '' , 'noboxes' )
* @ return int 1 if OK , 0 if KO
2008-10-01 21:10:17 +02:00
*/
2012-01-04 21:23:50 +01:00
function init ( $options = '' )
2008-10-01 21:10:17 +02:00
{
2009-04-28 11:41:30 +02:00
// Permissions et valeurs par defaut
2012-03-03 17:37:45 +01:00
$this -> remove ( $options );
2008-10-01 21:10:17 +02:00
$sql = array ();
2012-01-04 21:23:50 +01:00
return $this -> _init ( $sql , $options );
2008-10-01 21:10:17 +02:00
}
2012-03-03 17:37:45 +01:00
/**
* Function called when module is disabled .
* Remove from database constants , boxes and permissions from Dolibarr database .
* Data directories are not deleted
*
* @ param string $options Options when enabling module ( '' , 'noboxes' )
* @ return int 1 if OK , 0 if KO
*/
function remove ( $options = '' )
{
2008-10-01 21:10:17 +02:00
$sql = array ();
2012-03-03 17:37:45 +01:00
return $this -> _remove ( $sql , $options );
}
2003-11-17 17:35:49 +01:00
}
?>