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/dev/htdocs/custom/salariescontracts/class/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/dev/htdocs/custom/salariescontracts/class/salariescontracts.class.php
<?php
/* Copyright (C) 2007-2012  Laurent Destailleur <eldy@users.sourceforge.net>
 * Copyright (C) 2014       Juanjo Menent       <jmenent@2byte.es>
 * Copyright (C) 2015       Florian Henry       <florian.henry@open-concept.pro>
 * Copyright (C) 2015       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
 * Copyright (C) ---Put here your own copyright and developer email---
 *
 * 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 <http://www.gnu.org/licenses/>.
 */

/**
 * \file    salariescontracts/salariescontracts.class.php
 * \ingroup salariescontracts
 * \brief   This file is an example for a CRUD class file (Create/Read/Update/Delete)
 *          Put some comments here
 */

// Put here all includes required by your class file
require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php';
//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';

/**
 * Class Salariescontracts
 *
 * Put here description of your class
 */
class Salariescontracts extends CommonObject
{
	/**
	 * @var string Error code (or message)
	 * @deprecated
	 * @see Salariescontracts::errors
	 */
	public $error;
	/**
	 * @var string[] Error codes (or messages)
	 */
	public $errors = array();
	/**
	 * @var string Id to identify managed objects
	 */
	public $element = 'salariescontracts';
	/**
	 * @var string Name of table without prefix where object is stored
	 */
	public $table_element = 'salariescontracts';

	/**
	 * @var SalariescontractsLine[] Lines
	 */
	public $lines = array();
	
	/** @var array */
	public $lines_sc = array();

	/**
	 * @var int ID
	 */
	public $id;
	public $ref;
	/**
	 */
	
	public $fk_user;
	public $fk_user_create;
	public $type;
	public $date_create = '';
	public $start_date = '';
	public $end_date = '';
	public $salarie_sig_date = '';
	public $direction_sig_date = '';
	public $dpae_date = '';
	public $medical_visit_date = '';
	public $description;
	public $salary;

	/**
	 */
	

	/**
	 * Constructor
	 *
	 * @param DoliDb $db Database handler
	 */
	public function __construct(DoliDB $db)
	{
		$this->db = $db;
		return 1;
	}

	/**
	 * Create object into database
	 *
	 * @param  User $user      User that creates
	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
	 *
	 * @return int <0 if KO, Id of created object if OK
	 */
	public function create(User $user, $notrigger = false)
	{
		dol_syslog(__METHOD__, LOG_DEBUG);

		$error = 0;

		// Clean parameters
		if (isset($this->fk_user)) {
			 $this->fk_user = trim($this->fk_user);
		}
		if (isset($this->fk_user_create)) {
			 $this->fk_user_create = trim($this->fk_user_create);
		}
		if (isset($this->type)) {
			 $this->type = trim($this->type);
		}
		if (isset($this->description)) {
			 $this->description = trim($this->description);
		}

		// Check parameters
		// Put here code to add control on parameters values

		// Insert request
		$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '(';
		
		$sql.= 'fk_user,';
		$sql.= 'fk_user_create,';
		$sql.= 'type,';
		$sql.= 'date_create,';
		$sql.= 'start_date,';
		$sql.= 'end_date,';
		$sql.= 'salarie_sig_date,';
		$sql.= 'direction_sig_date,';
		$sql.= 'dpae_date,';
		$sql.= 'medical_visit_date,';
		$sql.= 'refcontrat,';
		$sql.= 'description,';
		$sql.= 'entity,';
		$sql.= 'salary';

		
		$sql .= ') VALUES (';
		
		$sql .= ' '.(! isset($this->fk_user)?'NULL':$this->fk_user).',';
		$sql .= ' '.(! isset($this->fk_user_create)?'NULL':$this->fk_user_create).',';
		$sql .= ' '.(! isset($this->type)?'NULL':$this->type).',';
		$sql .= ' '.(! isset($this->date_create) || dol_strlen($this->date_create)==0?'NULL':"'".$this->db->idate($this->date_create)."'").',';
		$sql .= ' '.(! isset($this->start_date) || dol_strlen($this->start_date)==0?'NULL':"'".$this->db->idate($this->start_date)."'").',';
		$sql .= ' '.(! isset($this->end_date) || dol_strlen($this->end_date)==0?'NULL':"'".$this->db->idate($this->end_date)."'").',';
		$sql .= ' '.(! isset($this->salarie_sig_date) || dol_strlen($this->salarie_sig_date)==0?'NULL':"'".$this->db->idate($this->salarie_sig_date)."'").',';
		$sql .= ' '.(! isset($this->direction_sig_date) || dol_strlen($this->direction_sig_date)==0?'NULL':"'".$this->db->idate($this->direction_sig_date)."'").',';
		$sql .= ' '.(! isset($this->dpae_date) || dol_strlen($this->dpae_date)==0?'NULL':"'".$this->db->idate($this->dpae_date)."'").',';
		$sql .= ' '.(! isset($this->medical_visit_date) || dol_strlen($this->medical_visit_date)==0?'NULL':"'".$this->db->idate($this->medical_visit_date)."'").',';
		$sql .= ' '.(! isset($this->refcontrat)?'NULL':"'".$this->db->escape($this->refcontrat)."'").', ';
		$sql .= ' '.(! isset($this->description)?'NULL':"'".$this->db->escape($this->description)."'").', ';
		$sql .= ' '.$this->db->escape($this->entity).', ';
		$sql .= ' '.(! isset($this->salary)?'NULL':$this->salary);

		$sql .= ')';

		$this->db->begin();

		$resql = $this->db->query($sql);
		if (!$resql) {
			$error ++;
			$this->errors[] = 'Error ' . $this->db->lasterror();
			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
		}

		if (!$error) {
			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);

			if (!$notrigger) {
				// Uncomment this and change MYOBJECT to your own tag if you
				// want this action to call a trigger.

				//// Call triggers
				//$result=$this->call_trigger('MYOBJECT_CREATE',$user);
				//if ($result < 0) $error++;
				//// End call triggers
			}
		}

		// Commit or rollback
		if ($error) {
			$this->db->rollback();

			return - 1 * $error;
		} else {
			$this->db->commit();

			


			return $this->id;
		}
	}

	/**
	 * Load object in memory from the database
	 *
	 * @param int    $id  Id object
	 * @param string $ref Ref
	 *
	 * @return int <0 if KO, 0 if not found, >0 if OK
	 */
	public function fetch($id, $ref = null)
	{
		global $conf;
		dol_syslog(__METHOD__, LOG_DEBUG);

		$sql = 'SELECT';
		$sql .= ' t.rowid,';
		
		$sql .= " t.fk_user,";
		$sql .= " t.fk_user_create,";
		$sql .= " t.type,";
		$sql .= " t.date_create,";
		$sql .= " t.start_date,";
		$sql .= " t.end_date,";
		$sql .= " t.salarie_sig_date,";
		$sql .= " t.direction_sig_date,";
		$sql .= " t.dpae_date,";
		$sql .= " t.medical_visit_date,";
		$sql .= " t.refcontrat,";
		$sql .= " t.description,";
		$sql .= " t.entity";

		
		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t';
		if (null !== $ref) {
			$sql .= ' WHERE t.ref = ' . '\'' . $ref . '\'';
		} else {
			$sql .= ' WHERE t.rowid = ' . $id;
		}
		$sql .= ' AND t.entity='.$conf->entity;

		$resql = $this->db->query($sql);
		if ($resql) {
			$numrows = $this->db->num_rows($resql);
			if ($numrows) {
				$obj = $this->db->fetch_object($resql);

				$this->id = $obj->rowid;
				
				$this->fk_user = $obj->fk_user;
				$this->fk_user_create = $obj->fk_user_create;
				$this->type = $obj->type;
				$this->date_create = $this->db->jdate($obj->date_create);
				$this->start_date = $this->db->jdate($obj->start_date);
				$this->end_date = $this->db->jdate($obj->end_date);
				$this->salarie_sig_date = $this->db->jdate($obj->salarie_sig_date);
				$this->direction_sig_date = $this->db->jdate($obj->direction_sig_date);
				$this->dpae_date = $this->db->jdate($obj->dpae_date);
				$this->medical_visit_date = $this->db->jdate($obj->medical_visit_date);
				$this->description = $obj->description;
				$this->refcontrat = $obj->refcontrat;
				$this->entity = $obj->entity;

				
			}
			$this->db->free($resql);

			if ($numrows) {
				return 1;
			} else {
				return 0;
			}
		} else {
			$this->errors[] = 'Error ' . $this->db->lasterror();
			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);

			return - 1;
		}
	}

	/**
	 * Load object in memory from the database
	 *
	 * @param string $sortorder Sort Order
	 * @param string $sortfield Sort field
	 * @param int    $limit     offset limit
	 * @param int    $offset    offset limit
	 * @param array  $filter    filter array
	 * @param string $filtermode filter mode (AND or OR)
	 *
	 * @return int <0 if KO, >0 if OK
	 */
	public function fetchAll($sortorder='', $sortfield='', $limit=0, $offset=0, $filter, $filtermode='AND')
	{
		global $conf;
		dol_syslog(__METHOD__, LOG_DEBUG);

		$sql = 'SELECT';
		$sql .= ' t.rowid,';
		
		$sql .= " t.fk_user,";
		$sql .= " t.fk_user_create,";
		$sql .= " t.type,";
		$sql .= " t.date_create,";
		$sql .= " t.start_date,";
		$sql .= " t.end_date,";
		$sql .= " t.salarie_sig_date,";
		$sql .= " t.direction_sig_date,";
		$sql .= " t.dpae_date,";
		$sql .= " t.medical_visit_date,";
		$sql .= " t.refcontrat,";
		$sql .= " t.description,";
		$sql .= " t.entity";

		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element. ' as t';
		$sql .= ' WHERE t.entity='.$conf->entity;
		// Manage filter
		/*$sqlwhere = array();
		if (count($filter) > 0) {
			foreach ($filter as $key => $value) {
				$sqlwhere[] = $key . ' LIKE \'%' . $this->db->escape($value) . '%\'';
			}
		}
		if (count($sqlwhere) > 0) {
			$sql .= ' WHERE ' . implode(' '.$filtermode.' ', $sqlwhere);
		}*/


		if (!empty($filter)) {
			$sql .= ' '.$filter;
		}
		// echo $sql;
		
		if (!empty($sortfield)) {
			$sql .= $this->db->order($sortfield,$sortorder);
		}

		/*
		if (!empty($limit)) {
		 $sql .=  ' ' . $this->db->plimit($limit + 1, $offset);
		}*/
		$this->lines = array();

		$resql = $this->db->query($sql);
		if ($resql) {
			$num = $this->db->num_rows($resql);
			$i = 0;

			while ($obj = $this->db->fetch_object($resql)) {
				$line = new SalariescontractsLine();

				$line->id = $obj->rowid;
				$line->fk_user = $obj->fk_user;
				$line->fk_user_create = $obj->fk_user_create;
				$line->type = $obj->type;
				$line->date_create = $this->db->jdate($obj->date_create);
				$line->start_date = $this->db->jdate($obj->start_date);
				$line->end_date = $this->db->jdate($obj->end_date);
				$line->salarie_sig_date = $this->db->jdate($obj->salarie_sig_date);
				$line->direction_sig_date = $this->db->jdate($obj->direction_sig_date);
				$line->dpae_date = $this->db->jdate($obj->dpae_date);
				$line->medical_visit_date = $this->db->jdate($obj->medical_visit_date);
				$line->entity = $obj->entity;
				$line->description = $obj->description;
				$line->refcontrat = $obj->refcontrat;

				$this->lines[] = $line;

				$this->ref 	= $obj->rowid;
				$this->id 	= $obj->rowid;
				$this->lines_sc[$i]['rowid'] = $obj->rowid;
				$this->lines_sc[$i]['fk_user'] = $obj->fk_user;
				$this->lines_sc[$i]['fk_user_create'] = $obj->fk_user_create;
				$this->lines_sc[$i]['type'] = $obj->type;
				$this->lines_sc[$i]['date_create'] = $obj->date_create;
				$this->lines_sc[$i]['start_date'] = $obj->start_date;
				$this->lines_sc[$i]['end_date'] = $obj->end_date;
				$this->lines_sc[$i]['salarie_sig_date'] = $obj->salarie_sig_date;
				$this->lines_sc[$i]['direction_sig_date'] = $obj->direction_sig_date;
				$this->lines_sc[$i]['dpae_date'] = $obj->dpae_date;
				$this->lines_sc[$i]['medical_visit_date'] = $obj->medical_visit_date;
				$this->lines_sc[$i]['description'] = $obj->description;
				$this->lines_sc[$i]['refcontrat'] = $obj->refcontrat;
				$this->lines_sc[$i]['entity'] = $obj->entity;

				$i++;
			}
			$this->db->free($resql);

			return $num;
		} else {
			$this->errors[] = 'Error ' . $this->db->lasterror();
			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);

			return - 1;
		}
	}

	/**
	 * Update object into database
	 *
	 * @param  User $user      User that modifies
	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
	 *
	 * @return int <0 if KO, >0 if OK
	 */
	public function update(User $user, $notrigger = false)
	{
		global $conf;
		$error = 0;

		dol_syslog(__METHOD__, LOG_DEBUG);

		// Clean parameters
		
		if (isset($this->fk_user)) {
			 $this->fk_user = trim($this->fk_user);
		}
		if (isset($this->fk_user_create)) {
			 $this->fk_user_create = trim($this->fk_user_create);
		}
		if (isset($this->type)) {
			 $this->type = trim($this->type);
		}
		if (isset($this->description)) {
			 $this->description = trim($this->description);
		}

		// Check parameters
		// Put here code to add a control on parameters values

		// Update request
		$sql = 'UPDATE ' . MAIN_DB_PREFIX . $this->table_element . ' SET';
		
		// $sql .= ' fk_user = '.(isset($this->fk_user)?$this->fk_user:"null").',';
		// $sql .= ' fk_user_create = '.(isset($this->fk_user_create)?$this->fk_user_create:"null").',';
		$sql .= ' type = '.(isset($this->type)?$this->type:"null").',';
		$sql .= ' date_create = '.(! isset($this->date_create) || dol_strlen($this->date_create) != 0 ? "'".$this->db->idate($this->date_create)."'" : 'null').',';
		$sql .= ' start_date = '.(! isset($this->start_date) || dol_strlen($this->start_date) != 0 ? "'".$this->db->idate($this->start_date)."'" : 'null').',';
		$sql .= ' end_date = '.(! isset($this->end_date) || dol_strlen($this->end_date) != 0 ? "'".$this->db->idate($this->end_date)."'" : 'null').',';
		$sql .= ' salarie_sig_date = '.(! isset($this->salarie_sig_date) || dol_strlen($this->salarie_sig_date) != 0 ? "'".$this->db->idate($this->salarie_sig_date)."'" : 'null').',';
		$sql .= ' direction_sig_date = '.(! isset($this->direction_sig_date) || dol_strlen($this->direction_sig_date) != 0 ? "'".$this->db->idate($this->direction_sig_date)."'" : 'null').',';
		$sql .= ' dpae_date = '.(! isset($this->dpae_date) || dol_strlen($this->dpae_date) != 0 ? "'".$this->db->idate($this->dpae_date)."'" : 'null').',';
		$sql .= ' medical_visit_date = '.(! isset($this->medical_visit_date) || dol_strlen($this->medical_visit_date) != 0 ? "'".$this->db->idate($this->medical_visit_date)."'" : 'null').',';
		$sql .= ' refcontrat = '.(isset($this->refcontrat)?"'".$this->db->escape($this->refcontrat)."'":"null").',';
		$sql .= ' description = '.(isset($this->description)?"'".$this->db->escape($this->description)."'":"null").',';
		$sql .= ' entity='.((isset($this->entity) && is_numeric($this->entity)) ? $this->entity : $conf->entity);

        
		$sql .= ' WHERE rowid=' . $this->id;
		$this->db->begin();

		$resql = $this->db->query($sql);
		if (!$resql) {
			$error ++;
			$this->errors[] = 'Error ' . $this->db->lasterror();
			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
		}

		if (!$error && !$notrigger) {
			// Uncomment this and change MYOBJECT to your own tag if you
			// want this action calls a trigger.

			//// Call triggers
			//$result=$this->call_trigger('MYOBJECT_MODIFY',$user);
			//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
			//// End call triggers
		}

		// Commit or rollback
		if ($error) {
			$this->db->rollback();

			return - 1 * $error;
		} else {
			$this->db->commit();

			return 1;
		}
	}

	/**
	 * Delete object in database
	 *
	 * @param User $user      User that deletes
	 * @param bool $notrigger false=launch triggers after, true=disable triggers
	 *
	 * @return int <0 if KO, >0 if OK
	 */
	public function delete(User $user, $notrigger = false)
	{
		dol_syslog(__METHOD__, LOG_DEBUG);

		$error = 0;

		$this->db->begin();

		if (!$error) {
			if (!$notrigger) {
				// Uncomment this and change MYOBJECT to your own tag if you
				// want this action calls a trigger.

				//// Call triggers
				//$result=$this->call_trigger('MYOBJECT_DELETE',$user);
				//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
				//// End call triggers
			}
		}

		if (!$error) {
			$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element;
			$sql .= ' WHERE rowid=' . $this->id;

			$resql = $this->db->query($sql);
			if (!$resql) {
				$error ++;
				$this->errors[] = 'Error ' . $this->db->lasterror();
				dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
			}
		}

		// Commit or rollback
		if ($error) {
			$this->db->rollback();

			return - 1 * $error;
		} else {
			$this->db->commit();

			return 1;
		}
	}

	/**
	 * Load an object from its id and create a new one in database
	 *
	 * @param int $fromid Id of object to clone
	 *
	 * @return int New id of clone
	 */
	public function createFromClone($fromid)
	{
		dol_syslog(__METHOD__, LOG_DEBUG);

		global $user;
		$error = 0;
		$object = new Salariescontracts($this->db);

		$this->db->begin();

		// Load source object
		$object->fetch($fromid);
		// Reset object
		$object->id = 0;

		// Clear fields
		// ...

		// Create clone
		$result = $object->create($user);

		// Other options
		if ($result < 0) {
			$error ++;
			$this->errors = $object->errors;
			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
		}

		// End
		if (!$error) {
			$this->db->commit();

			return $object->id;
		} else {
			$this->db->rollback();

			return - 1;
		}
	}

	/**
	 * Initialise object with example values
	 * Id must be 0 if object instance is a specimen
	 *
	 * @return void
	 */
	public function initAsSpecimen()
	{
		$this->id = 0;
		
		$this->fk_user = '';
		$this->fk_user_create = '';
		$this->type = '';
		$this->date_create = '';
		$this->start_date = '';
		$this->end_date = '';
		$this->salarie_sig_date = '';
		$this->direction_sig_date = '';
		$this->dpae_date = '';
		$this->medical_visit_date = '';
		$this->description = '';
		$this->refcontrat = '';
	}

	/**
     * return contract by salary id with filters if available
     *
     * @author Yassine Belkaid <y.belkaid@nextconcept.ma>
     * @return integer
     */
	public function fetchByUser($user_id, $order = '', $filter = '')
	{
		dol_syslog(__METHOD__, LOG_DEBUG);
		global $conf;

		$sql = 'SELECT';
		$sql .= ' t.rowid,';
		
		$sql .= " t.fk_user,";
		$sql .= " t.fk_user_create,";
		$sql .= " t.type,";
		$sql .= " t.date_create,";
		$sql .= " t.start_date,";
		$sql .= " t.end_date,";
		$sql .= " t.salarie_sig_date,";
		$sql .= " t.direction_sig_date,";
		$sql .= " t.dpae_date,";
		$sql .= " t.medical_visit_date,";
		$sql .= " t.refcontrat,";
		$sql .= " t.description,";
		$sql .= " t.entity";

		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element. ' as t';

		$sql .= " WHERE t.fk_user = '".$user_id."' ". $order;
		$sql .= " AND t.entity=".$conf->entity;
		// Manage filter
		if (!empty($filter)) {
			$sql .= $filter;
		}

		$this->lines = array();

		$resql = $this->db->query($sql);
		if ($resql) {
			$num = $this->db->num_rows($resql);
			$i = 0;

			while ($obj = $this->db->fetch_object($resql)) {
				$line = new SalariescontractsLine();

				$line->id = $obj->rowid;
				$line->fk_user = $obj->fk_user;
				$line->fk_user_create = $obj->fk_user_create;
				$line->type = $obj->type;
				$line->date_create = $this->db->jdate($obj->date_create);
				$line->start_date = $this->db->jdate($obj->start_date);
				$line->end_date = $this->db->jdate($obj->end_date);
				$line->salarie_sig_date = $this->db->jdate($obj->salarie_sig_date);
				$line->direction_sig_date = $this->db->jdate($obj->direction_sig_date);
				$line->dpae_date = $this->db->jdate($obj->dpae_date);
				$line->medical_visit_date = $this->db->jdate($obj->medical_visit_date);
				$line->refcontrat = $obj->refcontrat;
				$line->description = $obj->description;
				$line->entity = $obj->entity;

				$this->lines[] = $line;
				
				$this->ref 	= $obj->rowid;
				$this->id 	= $obj->rowid;
				$this->lines_sc[$i]['rowid'] = $obj->rowid;
				$this->lines_sc[$i]['fk_user'] = $obj->fk_user;
				$this->lines_sc[$i]['fk_user_create'] = $obj->fk_user_create;
				$this->lines_sc[$i]['type'] = $obj->type;
				$this->lines_sc[$i]['date_create'] = $obj->date_create;
				$this->lines_sc[$i]['start_date'] = $obj->start_date;
				$this->lines_sc[$i]['end_date'] = $obj->end_date;
				$this->lines_sc[$i]['salarie_sig_date'] = $obj->salarie_sig_date;
				$this->lines_sc[$i]['direction_sig_date'] = $obj->direction_sig_date;
				$this->lines_sc[$i]['dpae_date'] = $obj->dpae_date;
				$this->lines_sc[$i]['medical_visit_date'] = $obj->medical_visit_date;
				$this->lines_sc[$i]['refcontrat'] = $obj->refcontrat;
				$this->lines_sc[$i]['description'] = $obj->description;
				$this->lines_sc[$i]['entity'] = $obj->entity;

				$i++;
			}
			$this->db->free($resql);

			return $num;
		} else {
			$this->errors[] = 'Error ' . $this->db->lasterror();
			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);

			return - 1;
		}
	}


    public function getRefContrat()
    {
	    global $conf;
		$sql = "SELECT MAX(CAST(SUBSTRING(refcontrat FROM 4) AS SIGNED)) as max";
		$sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element;
		$sql.= " WHERE refcontrat LIKE 'CS-____%'";
		$resql=$this->db->query($sql);
		if ($resql)
		{
			$obj = $this->db->fetch_object($resql);
			if ($obj) $max = intval($obj->max);
			else $max=0;
		}
	    $dateY = date('Y');
		$NextRef = 'CS-'.sprintf("%04d", $id).'/'.$dateY;

		if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
		else $num = sprintf("%04s", $max+1);

		return "CS-".$num.'/'.$dateY;
    }

	/**
     *	Return clicable name (with picto eventually)
     *
     *  @author Yassine Belkaid <y.belkaid@nextconcept.ma>
     *	@param		int			$withpicto		0=_No picto, 1=Includes the picto in the linkn, 2=Picto only
     *	@return		string						String with URL
     */
    public function getNomUrl($withpicto=0,  $id = null, $ref = null)
    {
        global $langs;

        $result = '';
        $ref = ($ref ?: '');
        $id  = ($id  ?: '');
        $label  = $langs->trans("Show").': '. $ref;

        $link = '<a href="'.dol_buildpath('/salariescontracts/card.php?id='. $id,1) .'" title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip">';
        $linkend='</a>';

        $picto='salariescontracts@salariescontracts';

        if ($withpicto) $result.=($link.img_object($label, $picto, 'class="classfortooltip"').$linkend);
        if ($withpicto && $withpicto != 2) $result.=' ';
        if ($withpicto != 2) $result.=$link.$ref.$linkend;
        return $result;
    }

    /**
     * Type of contracts
     *
     * @author Yassine Belkaid <y.belkaid@nextconcept.ma>
     * @return array
     */
    public function getContractsTypes()
    {
    	global $langs;
    	return array(
    		1 => $langs->trans('IndefiniteDurationContract'),
    		2 => $langs->trans('FixedTermContract'),
    		3 => $langs->trans('LearningContractfffff'),
    		5 => $langs->trans('Interim'),
    		4 => $langs->trans('TrainingContract'),
    		6 => $langs->trans('ProfessionalContract')
    	);
    }

    public function getContractsTypes2()
    {
    	$data = [];
    	$resql = $this->db->query('SELECT * FROM `'.MAIN_DB_PREFIX.'type_salairecontrat` ');
    	if($resql){
			while ($obj = $this->db->fetch_object($resql)) {
				$data[$obj->rowid]=$obj->name;
    		}
    	}
    	return $data;
    }
    /**
     * Type of contract assigned to selected salary
     *
     * @author Yassine Belkaid <y.belkaid@nextconcept.ma>
     * @return string
     */
    public function getContractTypeById($id)
    {
    	global $langs;

    	$typeName = '';

    	$resql = $this->db->query('SELECT * FROM `'.MAIN_DB_PREFIX.'type_salairecontrat` WHERE rowid='.$id);
    	if($resql){
			while ($obj = $this->db->fetch_object($resql)) {
				$typeName=$obj->name;
    		}
    	}

    	if (!$id) return $typeName;

    

    	return $typeName;
    }
 	

 	public function getContractTypeByIdOld($id)
    {
    	global $langs;

    	$typeName = '';

    	if (!$id) return $typeName;

    	$resql = $this->db->query('SELECT * FROM `'.MAIN_DB_PREFIX.'type_salairecontrat` WHERE rowid = '.$id);
    	if($resql){
			while ($obj = $this->db->fetch_object($resql)) {
				$typeName=$obj->name;
    		}
    	}

    	// switch ((int) $id) {
    	// 	case 1:
    	// 		$typeName = $langs->trans('IndefiniteDurationContract');
    	// 		break;
    	// 	case 2:
    	// 		$typeName = $langs->trans('FixedTermContract');
    	// 		break;
    	// 	case 3:
    	// 		$typeName = $langs->trans('LearningContract');
    	// 		break;
    	// 	case 4:
    	// 		$typeName = $langs->trans('TrainingContract');
    	// 		break;
    	// 	case 5:
    	// 		$typeName = $langs->trans('ANAPEC');
    	// 		break;
    	// 	case 6:
    	// 		$typeName = $langs->trans('ProfessionalContract');
    	// 		break;
    	// 	default:
    	// 		$typeName;
    	// 		break;
    	// }

    	return $typeName;
    }



	public function showNavigations($object, $linkback, $paramid = 'id', $fieldid = 'rowid', $moreparam = '')
	{

		global $langs, $conf;

		$ret = $result = '';
		$previous_ref = $next_ref = '';

		$fieldref = $fieldid;

		$object->ref = $object->id;

		$object->load_previous_next_ref('', $fieldid, 0);
		// print_r($object);die();
		$navurl = $_SERVER["PHP_SELF"];

		$page = GETPOST('page');

		// accesskey is for Windows or Linux:  ALT + key for chrome, ALT + SHIFT + KEY for firefox
		// accesskey is for Mac:               CTRL + key for all browsers
		$stringforfirstkey = $langs->trans("KeyboardShortcut");
		if ($conf->browser->name == 'chrome')
		{
		    $stringforfirstkey .= ' ALT +';
		}
		elseif ($conf->browser->name == 'firefox')
		{
		    $stringforfirstkey .= ' ALT + SHIFT +';
		}
		else
		{
		    $stringforfirstkey .= ' CTL +';
		}

		$previous_ref = $object->ref_previous ? '<a accesskey="p" title="'.$stringforfirstkey.' p" class="classfortooltip" href="'.$navurl.'?'.$paramid.'='.urlencode($object->ref_previous).$moreparam.'"><i class="fa fa-chevron-left"></i></a>' : '<span class="inactive"><i class="fa fa-chevron-left opacitymedium"></i></span>';
		$next_ref     = $object->ref_next ? '<a accesskey="n" title="'.$stringforfirstkey.' n" class="classfortooltip" href="'.$navurl.'?'.$paramid.'='.urlencode($object->ref_next).$moreparam.'"><i class="fa fa-chevron-right"></i></a>' : '<span class="inactive"><i class="fa fa-chevron-right opacitymedium"></i></span>';

		$ret = '';
		$ret .= '<!-- Start banner content --><div style="vertical-align: middle">';


		if ($previous_ref || $next_ref || $linkback)
		{
		    $ret .= '<div class="pagination paginationref"><ul class="right">';
		}
		if ($linkback)
		{
		    $ret .= '<li class="noborder litext">'.$linkback.'</li>';
		}
		if (($previous_ref || $next_ref))
		{
		    $ret .= '<li class="pagination">'.$previous_ref.'</li>';
		    $ret .= '<li class="pagination">'.$next_ref.'</li>';
		}
		if ($previous_ref || $next_ref || $linkback)
		{
		    $ret .= '</ul></div>';
		}

		$result .= '<div style="height: 41px;">';
		$result .= $ret;
		$result .= '</div>';
		$result .= '</div>';
		// $result .= '</div style="clear:both;"></div>';

		return $result;
	}


	public function numberToWordsFunction($number, $currency1='', $currency2='' )
	{
	    $hyphen = '-';
	    $conjunction = ' ';
	    $separator = ' ';
	    $negative = 'negative ';
	    $decimal = ' et ';
	    $dictionary = array(
	        0 => 'zero',
	        1 => 'un',
	        2 => 'deux',
	        3 => 'trois',
	        4 => 'quatre',
	        5 => 'cinq',
	        6 => 'six',
	        7 => 'sept',
	        8 => 'huit ',
	        9 => 'neuf',
	        10 => 'dix',
	        11 => 'onze',
	        12 => 'douze',
	        13 => 'treize',
	        14 => 'quatorze',
	        15 => 'quinze',
	        16 => 'seize',
	        17 => 'dix-sept',
	        18 => 'dix-huit',
	        19 => 'dix-neuf',
	        20 => 'vingt',
			21 => 'vingt et un',
			22 => 'vingt-deux',
			23 => 'vingt-trois',
			24 => 'vingt-quatre',
			25 => 'vingt-cinq',
			26 => 'vingt-six',
			27 => 'vingt-sept',
			28 => 'vingt-huit',
			29 => 'vingt-neuf',
			30 => 'trente',
			31 => 'trente et un',
			32 => 'trente-deux',
			33 => 'trente-trois',
			34 => 'trente-quatre',
			35 => 'trente-cinq',
			36 => 'trente-six',
			37 => 'trente-sept',
			38 => 'trente-huit',
			39 => 'trente-neuf',
			40 => 'quarante',
			41 => 'quarante et un',
			42 => 'quarante-deux',
			43 => 'quarante-trois',
			44 => 'quarante-quatre',
			45 => 'quarante-cinq',
			46 => 'quarante-six',
			47 => 'quarante-sept',
			48 => 'quarante-huit',
			49 => 'quarante-neuf',
			50 => 'cinquante',
			51 => 'cinquante et un',
			52 => 'cinquante-deux',
			53 => 'cinquante-trois',
			54 => 'cinquante-quatre',
			55 => 'cinquante-cinq',
			56 => 'cinquante-six',
			57 => 'cinquante-sept',
			58 => 'cinquante-huit',
			59 => 'cinquante-neuf',
			60 => 'soixante',
			61 => 'soixante et un',
			62 => 'soixante-deux',
			63 => 'soixante-trois',
			64 => 'soixante-quatre',
			65 => 'soixante-cinq',
			66 => 'soixante-six',
			67 => 'soixante-sept',
			68 => 'soixante-huit',
			69 => 'soixante-neuf',
			70 => 'soixante-dix',
			71 => 'soixante et onze',
			72 => 'soixante-douze',
			73 => 'soixante-treize',
			74 => 'soixante-quatorze',
			75 => 'soixante-quinze',
			76 => 'soixante-seize',
			77 => 'soixante-dix-sept',
			78 => 'soixante-dix-huit',
			79 => 'soixante-dix-neuf',
			80 => 'quatre-vingts',
			81 => 'quatre-vingt-un',
			82 => 'quatre-vingt-deux',
			83 => 'quatre-vingt-trois',
			84 => 'quatre-vingt-quatre',
			85 => 'quatre-vingt-cinq',
			86 => 'quatre-vingt-six',
			87 => 'quatre-vingt-sept',
			88 => 'quatre-vingt-huit',
			89 => 'quatre-vingt-neuf',
			90 => 'quatre-vingt-dix',
			91 => 'quatre-vingt-onze',
			92 => 'quatre-vingt-douze',
			93 => 'quatre-vingt-treize',
			94 => 'quatre-vingt-quatorze',
			95 => 'quatre-vingt-quinze',
			96 => 'quatre-vingt-seize',
			97 => 'quatre-vingt-dix-sept',
			98 => 'quatre-vingt-dix-huit',
			99 => 'quatre-vingt-dix-neuf',
	        100 => 'cent',
	        1000 => 'mille',
	        1000000 => 'million',
	        1000000000 => 'milliard',
	        1000000000000 => 'trillion',
	        1000000000000000 => 'quadrillion',
	        1000000000000000000 => 'quintillion'
	    );

	    if (!is_numeric($number)) {
	        return false;
	    }

	    if (($number >= 0 && (int)$number < 0) || (int)$number < 0 - PHP_INT_MAX) {
	        // overflow
	        trigger_error(
	            'numberToWords only accepts numbers between -' . PHP_INT_MAX . ' and ' . PHP_INT_MAX,
	            E_USER_WARNING
	        );
	        return false;
	    }

	    if ($number < 0) {
	        return $negative . $this->numberToWordsFunction(abs($number));
	    }

	    $string = $fraction = null;

	    if (strpos($number, '.') !== false) {
	        list($number, $fraction) = explode('.', $number);
	    }
	    // echo "number : ".$number.'<br>';
	    switch (true) {
	        case $number < 21:
	            $string = $dictionary[$number];
	            break;
	        case $number < 100:
	            $tens = ((int)($number / 10)) * 10;
	            $units = $number % 10;
	            $string = $dictionary[$number];
	            if ($units) {
	                // $string .= $hyphen . $dictionary[$units];
	            }
	            break;
	        case $number < 1000:
	            $hundreds = $number / 100;
	            $remainder = $number % 100;
	            if ((int)$hundreds == 1) {
	                $string = $dictionary[100];
	            }else{
	                $string = $dictionary[$hundreds] . ' ' . $dictionary[100];
	            }
	            if ($remainder) {
	                $string .= $conjunction . $this->numberToWordsFunction($remainder);
	            }
	            break;
	        default:
	            $baseUnit = pow(1000, floor(log($number, 1000)));
	            $numBaseUnits = (int)($number / $baseUnit);
	            $remainder = $number % $baseUnit;
	            $string = $this->numberToWordsFunction($numBaseUnits) . ' ' . $dictionary[$baseUnit];
	            if ($remainder) {
	                $string .= $remainder < 100 ? $conjunction : $separator;
	                $string .= $this->numberToWordsFunction($remainder);
	            }
	            break;
	        }
	       
	    if (null !== $fraction && is_numeric($fraction)) {
	        /* -----------  for number to words behind commat -----------*/
	            // $string .= $decimal;
	            // $words = array();
	            // foreach (str_split((string)$fraction) as $number) {
	            //     $words[] = $dictionary[$number];
	            // }
	            // $string .= implode(' ', $words);
	        /* -----------  for number to words behind commat -----------*/
	        $string .= ' '.$currency1.' ';
	        if($fraction > 0){
		        $string .= $decimal;
		        $string .= mb_substr($fraction, 0, 2);
		        $string .= ' '.$currency2.'';
	        }
	    }else{
	    	$string .= ' </b>'.$currency1.' ';
	    }

	    return ucfirst($string);
	}


    public function upgradeModuleSalairContr()
    {
        global $conf, $langs;
        
        dol_include_once('/salariescontracts/core/modules/modSalariesContracts.class.php');
        $modcore = new modSalariesContracts($this->db);
        
        $lastversion    = $modcore->version;
        $currentversion = dolibarr_get_const($this->db, 'SALAIRCONTR_LAST_VERSION_OF_MODULE', $conf->entity);
        

        if (!$currentversion || ($currentversion && $lastversion != $currentversion)){
            $res = $this->InitSalairContr();
            if($res)
                dolibarr_set_const($this->db, 'SALAIRCONTR_LAST_VERSION_OF_MODULE', $lastversion, 'chaine', 0, '', $conf->entity);
            return 1;
        }

        return 0;
    }

    public function InitSalairContr()
    {
        global $conf, $langs, $user;
    	
		$langs->load('salariescontracts@salariescontracts');

        $resql = $this->db->query("ALTER TABLE `".MAIN_DB_PREFIX."salariescontracts` ADD `entity` int(11) NOT NULL DEFAULT ".$conf->entity);
		$resql = $this->db->query('ALTER TABLE `'.MAIN_DB_PREFIX.'salariescontracts` ADD `refcontrat` varchar(355) NULL');

		require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
		$extrafields=new ExtraFields($this->db);

		$extrafields->addExtraField("salariescontractsusersoci", $langs->trans("numero_securite_sociale"), "varchar", "90", 300, "user", 0, 0, "", 0,0,"",1);

		$now=dol_now();
		$datec=$this->db->idate($now);

		$resql = $this->db->query('ALTER TABLE `'.MAIN_DB_PREFIX.'type_salairecontrat` ADD `content` LONGTEXT NULL');


		$sql ="INSERT INTO `".MAIN_DB_PREFIX."type_salairecontrat` (`rowid`, `namefile`, `name`, `content`, `fk_user`, `date_create`, `entity`) VALUES";

		$sql .= "(1, 'contrat_cdi', 'CDI', '<div style=\"background-color:#dddddd; border:1px solid #000000\">\r\n<h2 style=\"margin-left:0px; margin-right:0px; text-align:center\">CONTRAT DE TRAVAIL A DUREE INDERTERMINEE - CDI</h2>\r\n</div>\r\n\r\n<div style=\"clear:both\">&nbsp;</div>\r\n<br />\r\n<br />\r\n<br />\r\nFaisant suite &agrave; nos diff&eacute;rents entretiens, nous avons le plaisir de vous informer de votre engagement selon les modalit&eacute;s d&eacute;finies au pr&eacute;sent contrat.<br />\r\n<br />\r\nLa pr&eacute;sente offre est valable dans un d&eacute;lai de 15 jours &agrave; compter de la date d&rsquo;envoi figurant en ent&ecirc;te du pr&eacute;sent contrat.<br />\r\n<br />\r\n<strong>Entre les soussign&eacute;s</strong><br />\r\n<br />\r\nSoci&eacute;t&eacute; __MYCOMPANY_NAME__ , repr&eacute;sent&eacute;e par __SOC_MANAGER__, Directeur G&eacute;n&eacute;ral, ayant son si&egrave;ge social au __MYCOMPANY_ADDRESS__.<br />\r\n<br />\r\nCi-apr&egrave;s d&eacute;nomm&eacute;e &laquo; La Soci&eacute;t&eacute; &raquo;<br />\r\n<br />\r\n<strong>D&rsquo;une part,</strong><br />\r\n<br />\r\nEt __SALARIE_TO_USER__, n&eacute; le __SALARIE_DATE_NAISSANCE__, enregistr&eacute; sous le num&eacute;ro de s&eacute;curit&eacute; sociale __EXTRAFIELD_SALAIRESCONTRACTSUSERSOCI__, demeurant __SALARIE_ADDRESS__.<br />\r\n<br />\r\nCi-apr&egrave;s d&eacute;nomm&eacute; &laquo; Le Salari&eacute; &raquo;<br />\r\n<br />\r\n<strong>D&rsquo;autre part,</strong><br />\r\n<br />\r\nIl a &eacute;t&eacute; convenu ce qui suit :<br />\r\n<br />\r\n<strong><u>ARTICLE 1 - EMPLOI ET QUALIFICATION</u></strong><br />\r\n<br />\r\nLe Salari&eacute; est engag&eacute; &agrave; compter du __SALARIE_DATE_DEBUT_CONTRAT__ en qualit&eacute; de __SALARIE_JOB__ sous la Direction de __SOC_MANAGER__ &ndash; Directeur G&eacute;n&eacute;ral.<br />\r\n<br />\r\nEn fonction des n&eacute;cessit&eacute;s d&#39;organisation du travail, la Soci&eacute;t&eacute; pourra affecter le Salari&eacute; aux divers postes de travail correspondant &agrave; la nature de son emploi.<br />\r\n<br />\r\n__SALARIE_TO_USER__ d&eacute;clare formellement &ecirc;tre libre de tout engagement vis-&agrave;-vis de son pr&eacute;c&eacute;dent employeur &agrave; la date d&eacute;finie au 1er paragraphe ci-dessus et n&rsquo;&ecirc;tre li&eacute; &agrave; aucune autre entreprise. En particulier, __SALARIE_TO_USER__ d&eacute;clare formellement n&rsquo;&ecirc;tre tenu par aucune clause de non concurrence pouvant faire obstacle &agrave; la mise en &oelig;uvre du pr&eacute;sent contrat.<br />\r\n<br />\r\nLa dur&eacute;e hebdomadaire du travail est fix&eacute;e &agrave; 39 heures par semaine et se repartit entre les jours de la semaine, conform&eacute;ment &agrave; l&rsquo;horaire affich&eacute; dans l&rsquo;entreprise.<br />\r\n<br />\r\n<strong><u>ARTICLE 2 - OBJET ET DUREE DU CONTRAT</u></strong><br />\r\n<br />\r\nCe contrat est conclu pour une dur&eacute;e ind&eacute;termin&eacute;e &agrave; compter du __SALARIE_DATE_DEBUT_CONTRAT__.<br />\r\n<br />\r\nIl pourra toujours cesser &agrave; l&#39;initiative de l&#39;une ou l&#39;autre des parties conform&eacute;ment aux dispositions l&eacute;gales et conventionnelles en vigueur.<br />\r\n<br />\r\n<strong><u>ARTICLE 3 - PERIODE D&#39;ESSAI</u></strong><br />\r\n<br />\r\nLe pr&eacute;sent contrat deviendra d&eacute;finitif &agrave; l&rsquo;expiration d&rsquo;une p&eacute;riode d&rsquo;essai de 2 mois &agrave; compter de la date de prise des fonctions, fix&eacute;e le __SALARIE_DATE_DEBUT_CONTRAT__. Pendant la p&eacute;riode d&rsquo;essai, chacune des parties pourra mettre fin au pr&eacute;sent Contrat conform&eacute;ment &agrave; la loi applicable.<br />\r\n<br />\r\n<strong><u>ARTICLE 4 &ndash; DUREE DU TRAVAIL</u></strong><br />\r\n<br />\r\nLe Salari&eacute; est assujetti &agrave; une dur&eacute;e du travail de 39 heures correspondant &agrave; la dur&eacute;e l&eacute;gale de 35 heures &agrave; laquelle s&rsquo;ajoutent 4 suppl&eacute;mentaires.<br />\r\n<br />\r\nIl est pr&eacute;cis&eacute; que la r&eacute;mun&eacute;ration du Salari&eacute; vis&eacute;e &agrave; l&rsquo;article 5, du pr&eacute;sent contrat comprend la r&eacute;mun&eacute;ration des heures effectu&eacute;es dans la limite de la dur&eacute;e l&eacute;gale du travail, plus 4 heures suppl&eacute;mentaires par semaine. En cons&eacute;quence, seules les heures suppl&eacute;mentaires effectu&eacute;es au-del&agrave; de 4 heures suppl&eacute;mentaires donneront lieu &agrave; paiement major&eacute; et/ou repos compensateur de remplacement.<br />\r\n<br />\r\nLes heures suppl&eacute;mentaires &eacute;ventuellement effectu&eacute;es au-del&agrave; de cette dur&eacute;e, apr&egrave;s autorisation pr&eacute;alable ou demande expresse du sup&eacute;rieur hi&eacute;rarchique, seront soumises aux dispositions l&eacute;gales (majoration, repos compensateur de remplacement) et ce dans la limite du contingent annuel d&rsquo;heures suppl&eacute;mentaire.<br />\r\n<br />\r\n<strong><u>ARTICLE 5 - REMUNERATION</u></strong><br />\r\n<br />\r\nEn r&eacute;mun&eacute;ration de ses services, le Salari&eacute; percevra une r&eacute;mun&eacute;ration brute mensuelle de __SALARIE_SALAIRE__, payable en 12 mensualit&eacute;s &eacute;gales comprenant d&rsquo;ores et d&eacute;j&agrave; 4 heures suppl&eacute;mentaires.<br />\r\n<br />\r\nLe Salari&eacute; b&eacute;n&eacute;ficiera en outre des avantages sociaux consentis au personnel de sa cat&eacute;gorie, notamment, en ce qui concerne les remboursements de frais de missions et d&eacute;placements et le r&eacute;gime de retraite et de pr&eacute;voyance.<br />\r\n<br />\r\n<strong><u>ARTICLE 6 - LIEU DE TRAVAIL</u></strong><br />\r\n<br />\r\nLe lieu de travail, &agrave; la date de conclusion du pr&eacute;sent contrat, est situ&eacute; au __MYCOMPANY_ADDRESS__.<br />\r\n<br />\r\nCependant, compte tenu de la nature de ses fonctions et de la particularit&eacute; de l&rsquo;activit&eacute; de la Soci&eacute;t&eacute;, le Salari&eacute; pourra &ecirc;tre amen&eacute; &agrave; effectuer des missions de plus ou moins longue dur&eacute;e chez des clients de la Soci&eacute;t&eacute;, situ&eacute;s en France M&eacute;tropolitaine.<br />\r\n<br />\r\n<strong><u>ARTICLE 7 - CONGES PAYES</u></strong><br />\r\n<br />\r\nLe Salari&eacute; b&eacute;n&eacute;ficie d&#39;un cong&eacute; annuel pay&eacute;, conform&eacute;ment aux dispositions en vigueur dans l&#39;&eacute;tablissement.<br />\r\n<br />\r\nLes modalit&eacute;s de ce cong&eacute; seront d&eacute;termin&eacute;es, par accord avec la direction, compte tenu des n&eacute;cessit&eacute;s de service.<br />\r\n<br />\r\nLa p&eacute;riode des cong&eacute;s sera d&eacute;termin&eacute;e par d&eacute;cision de l&#39;employeur qui sera port&eacute;e en temps utile &agrave; la connaissance du personnel. Par mesure d&rsquo;organisation et selon les services, nous demandons &agrave; recevoir votre demande de cong&eacute;s au moins et au minimum un mois avant celui-ci de fa&ccedil;on &agrave; ce qu&rsquo;il soit valid&eacute; par vos sup&eacute;rieurs.<br />\r\n<br />\r\n<strong><u>ARTICLE 8 - ABSENCES/REMPLACEMENT</u></strong><br />\r\n<br />\r\nEn cas d&rsquo;emp&ecirc;chement d&rsquo;exercer son activit&eacute; et d&rsquo;accomplir ses obligations, le Salari&eacute; devra en aviser la Soci&eacute;t&eacute; dans les 48 heures en indiquant les motifs et la dur&eacute;e probable de cet emp&ecirc;chement et en lui adressant un certificat m&eacute;dical.<br />\r\n<br />\r\nLe non-respect par le Salari&eacute; de cette obligation pourra entra&icirc;ner la rupture du contrat de travail &agrave; ses torts.<br />\r\n<br />\r\nEn tout &eacute;tat de cause, le Salari&eacute; mettra tout en &oelig;uvre pour avertir ne serait-ce que par t&eacute;l&eacute;phone, SMS ou courriel dans un premier temps, l&rsquo;entreprise de son absence.<br />\r\n<br />\r\nAfin de pallier l&rsquo;&eacute;ventuelle absence du Salari&eacute; et afin d&rsquo;&eacute;viter tout dysfonctionnement de l&rsquo;activit&eacute;, la Soci&eacute;t&eacute; se r&eacute;serve la facult&eacute; de proc&eacute;der au remplacement provisoire du Salari&eacute; dans ses fonctions par toute personne de son choix.<br />\r\n<br />\r\n<strong><u>ARTICLE 9 - EXCLUSIVITE DES SERVICES</u></strong><br />\r\n<br />\r\nPendant toute la dur&eacute;e du pr&eacute;sent contrat, le Salari&eacute; devra r&eacute;server &agrave; la Soci&eacute;t&eacute; l&rsquo;exclusivit&eacute; de ses services et ne pourra avoir aucune autre activit&eacute; professionnelle, pour son compte, pour le compte d&rsquo;une autre entreprise m&ecirc;me non-concurrente, ou pour le compte d&rsquo;un tiers, sauf accord &eacute;crit pr&eacute;alable de la Direction.<br />\r\n<br />\r\nDans une telle hypoth&egrave;se, le Salari&eacute; s&rsquo;engage &agrave; respecter les limites l&eacute;gales en mati&egrave;re de dur&eacute;e du travail.<br />\r\n<br />\r\n<strong><u>ARTICLE 10 - RESPECT DES BIENS, DROITS ET INTERETS DE L&rsquo;ENTREPRISE</u></strong><br />\r\n<br />\r\nLe Salari&eacute; s&rsquo;engage &agrave; exercer ses activit&eacute;s, et notamment &agrave; utiliser les supports, informations et mat&eacute;riels qui lui seront remis par l&rsquo;entreprise &agrave; cet effet, dans le respect des droits de l&rsquo;entreprise et en conformit&eacute; avec ses int&eacute;r&ecirc;ts.<br />\r\n<br />\r\nLes biens de toute nature qui sont remis au Salari&eacute; pour l&rsquo;ex&eacute;cution de ses fonctions ne sont d&eacute;tenus par lui qu&rsquo;&agrave; titre pr&eacute;caire.<br />\r\nLe Salari&eacute; est responsable de leur maintien en parfait &eacute;tat.<br />\r\n<br />\r\nLe Salari&eacute; ne peut ni les c&eacute;der, ni les pr&ecirc;ter, ni les louer &agrave; des tiers.<br />\r\nLa Soci&eacute;t&eacute; se r&eacute;serve le droit de contr&ocirc;ler cette obligation &agrave; tout moment.<br />\r\n<br />\r\nLe Salari&eacute; devra &ecirc;tre en mesure de remettre &agrave; l&rsquo;entreprise, &agrave; la premi&egrave;re demande de l&rsquo;un de ses repr&eacute;sentants, tous biens, mat&eacute;riels, documents, tarifs, programmes, instructions, fichiers lui appartenant qu&rsquo;elle aurait mis &agrave; sa disposition.<br />\r\n<br />\r\nLe Salari&eacute; s&rsquo;interdit de fa&ccedil;on expresse d&rsquo;utiliser ou de reproduire &agrave; des fins personnelles, ni pendant, ni &agrave; l&rsquo;issue de son contrat de travail, la documentation, les logiciels ou toutes informations, sous quelque forme que ce soit, appartenant &agrave; l&rsquo;entreprise dont il aura connaissance du fait de sa pr&eacute;sence dans l&rsquo;entreprise ou chez les clients de cette derni&egrave;re.<br />\r\n<br />\r\n<strong><u>ARTICLE 11 - SECRET PROFESSIONNEL ET OBLIGATION DE DISCRETION </u></strong><br />\r\n<br />\r\nPendant la dur&eacute;e et apr&egrave;s la rupture de son contrat de travail, le Salari&eacute; est tenu, ind&eacute;pendamment d&rsquo;une obligation de r&eacute;serve g&eacute;n&eacute;rale, &agrave; une discr&eacute;tion absolue sur tous les faits dont il pourrait avoir connaissance du fait de sa pr&eacute;sence dans l&rsquo;entreprise ou chez les clients de cette derni&egrave;re.<br />\r\n<br />\r\nCette obligation de r&eacute;serve concerne plus particuli&egrave;rement la gestion et le fonctionnement de la Soci&eacute;t&eacute; ainsi que la situation financi&egrave;re et les projets relatifs &agrave; ses clients et fournisseurs.<br />\r\n<br />\r\nLes documents ou rapports que le Salari&eacute; pourra &eacute;tablir dans le cadre de ses fonctions ou dont la communication lui sera donn&eacute;e, demeureront la propri&eacute;t&eacute; de la Soci&eacute;t&eacute;. En cons&eacute;quence, le Salari&eacute; ne pourra ni en conserver de copies ou de photocopies, ni en donner communication &agrave; des tiers, sans l&rsquo;accord &eacute;crit de la Soci&eacute;t&eacute;.<br />\r\n<br />\r\nToute violation par le Salari&eacute; des dispositions susvis&eacute;es entrainera sont licenciement pour faute grave, sans pr&eacute;avis ni indemnit&eacute; nonobstant les dommages et int&eacute;r&ecirc;ts qui pourront lui &ecirc;tre demand&eacute;es en justice.<br />\r\n<br />\r\n<strong><u>ARTICLE 12 &ndash; CESSATION DU CONTRAT DE TRAVAIL</u></strong><br />\r\n<br />\r\n<strong>12.1 Pr&eacute;avis</strong><br />\r\nHormis le cas de force majeure, de faute grave ou lourde le pr&eacute;sent contrat ne pourra &ecirc;tre rompu qu&rsquo;apr&egrave;s avoir respect&eacute; un pr&eacute;avis r&eacute;ciproque de deux mois.<br />\r\n<br />\r\n<strong>12.2 Restitution des supports d&rsquo;activit&eacute;</strong><br />\r\nLe Salari&eacute; s&rsquo;engage &agrave; restituer &agrave; la Soci&eacute;t&eacute;, &agrave; l&rsquo;issue de son contrat de travail, tous biens ou objets qui lui sont confi&eacute;s par la Soci&eacute;t&eacute; (tels que documents, pi&egrave;ces, outillages, &eacute;quipements&hellip;) spontan&eacute;ment et en tout cas &agrave; la premi&egrave;re demande formul&eacute;e par un repr&eacute;sentant de l&rsquo;entreprise.<br />\r\n<br />\r\nDans l&rsquo;hypoth&egrave;se o&ugrave; le Salari&eacute; ne d&eacute;f&eacute;rait pas &agrave; cette demande, la Soci&eacute;t&eacute; se r&eacute;servera le droit d&rsquo;appliquer une compensation financi&egrave;re entre la valeur des biens qui lui appartiennent et les sommes qui lui seront vers&eacute;es au titre du solde de tout compte, sans pr&eacute;judice d&rsquo;&eacute;ventuelles poursuites civiles et/ou p&eacute;nales.<br />\r\n<br />\r\n<strong><u>ARTICLE 13 &ndash; INTERDICTION DE DEBAUCHAGE </u></strong><br />\r\n<br />\r\nPendant une p&eacute;riode de deux ann&eacute;es apr&egrave;s la rupture de son contrat de travail, qu&rsquo;elle qu&rsquo;en soit la cause, il est fait interdiction &agrave; __SALARIE_TO_USER__ d&rsquo;embaucher, directement ou indirectement, pour son compte ou pour le compte d&rsquo;un tiers, des salari&eacute;s de la Soci&eacute;t&eacute; __MYCOMPANY_NAME__.<br />\r\n<br />\r\nEn cas d&rsquo;infraction aux dispositions du pr&eacute;sent article, le Salari&eacute; sera redevable &agrave; l&rsquo;&eacute;gard de la Soci&eacute;t&eacute;, &agrave; titre de clause p&eacute;nale, d&rsquo;une indemnit&eacute; &eacute;gale &agrave; douze fois le dernier salaire mensuel brut de la personne ainsi d&eacute;bauch&eacute;e.<br />\r\n<br />\r\n<strong><u>ARTICLE 14 - MUTUELLE </u></strong><br />\r\n<br />\r\nLa soci&eacute;t&eacute; __MYCOMPANY_NAME__ adh&egrave;re &agrave; une mutuelle obligatoire pour l&rsquo;ensemble du personnel dont l&rsquo;entreprise participe &agrave; hauteur de 50 %, le contrat et les conditions sont remis au Salari&eacute; d&eacute;s l&rsquo;embauche.<br />\r\n<br />\r\nPour tous refus &agrave; l&rsquo;adh&eacute;sion, le Salari&eacute; doit remettre au plus vite une attestation de Mutuelle Valide.<br />\r\n<br />\r\n<strong><u>ARTICLE 15 &ndash; INDEPENDANCE DES CLAUSES</u></strong><br />\r\n<br />\r\nSi l&rsquo;une ou plusieurs dispositions du pr&eacute;sent contrat devaient &ecirc;tre annul&eacute;es ou d&eacute;clar&eacute;es sans effet, il n&rsquo;en r&eacute;sulterait pas, pour autant, la nullit&eacute; de l&rsquo;ensemble de la convention ou d&rsquo;une ou plusieurs de ses autres dispositions.<br />\r\n<br />\r\n&nbsp;\r\n<table border=\"0\" cellpadding=\"9px\">\r\n	\r\n		<tr>\r\n			<td>&nbsp;</td>\r\n			<td>Fait &agrave; __MYCOMPANY_TOWN__;<br />\r\n			Le __DATE_NOW__;</td>\r\n		</tr>\r\n		<tr>\r\n			<td>&nbsp;</td>\r\n			<td>Pour la soci&eacute;t&eacute; __MYCOMPANY_NAME__</td>\r\n		</tr>\r\n		<tr>\r\n			<td><strong>__USER_FULLNAME__ </strong></td>\r\n			<td><strong>__SOC_MANAGER__</strong></td>\r\n		</tr>\r\n	\r\n</table>\r\n<br />\r\n<br />\r\n<br />\r\n<br />\r\n<br />\r\n<br />\r\n<br />\r\n<br />\r\n<span style=\"font-size:11px\">Signature pr&eacute;c&eacute;d&eacute;e de la mention<br />\r\n&laquo; Lu et approuv&eacute; &raquo; </span>', 1, '".$datec."', ".$conf->entity."),";
		$sql .= "(2, 'contrat_cdd', 'CDD', '<div style=\"background-color:#dddddd; border:1px solid #000000\">\r\n<h2 style=\"margin-left:0px; margin-right:0px; text-align:center\">CONTRAT DE TRAVAIL A DUREE DERTERMINEE - CDD</h2>\r\n</div>\r\n\r\n<div style=\"clear:both\">&nbsp;</div>\r\n<br />\r\n<br />\r\n<br />\r\nEntre les soussign&eacute;s :<br />\r\nLa soci&eacute;t&eacute; <strong>__MYCOMPANY_NAME__</strong> dont le si&egrave;ge social est situ&eacute;e &agrave; __MYCOMPANY_TOWN__, repr&eacute;sent&eacute;e par __USER_AGENRE__ __USER_FULLNAME__ en sa qualit&eacute; de __USER_JOB__ .<br />\r\nD&rsquo;une part<br />\r\nEt __SALARIE_AGENRE__ __SALARIE_FULLNAME__ N&eacute; le __SALARIE_DATE_NAISSANCE__, enregistr&eacute; sous le num&eacute;ro de s&eacute;curit&eacute; sociale __EXTRAFIELD_SALAIRESCONTRACTSUSERSOCI__, demeurant __SALARIE_ADDRESS__.<br />\r\nD&rsquo;autre part<br />\r\nIl a &eacute;t&eacute; convenu ce qui suit.<br />\r\n<br />\r\n<strong>Article 1 : Engagement </strong><br />\r\n<br />\r\n__SALARIE_AGENRE__ __SALARIE_FULLNAME__ est engag&eacute; au sein de la soci&eacute;t&eacute; __MYCOMPANY_NAME__, &agrave; compter du <strong>__SALARIE_DATE_DEBUT__</strong> en qualit&eacute; de <strong>__SALARIE_JOB__</strong>.<br />\r\n<br />\r\n<strong>Article 2 : Dur&eacute;e du contrat</strong><br />\r\n<br />\r\nLe pr&eacute;sent contrat est conclu pour une dur&eacute;e d&eacute;termin&eacute;e, du <strong>__SALARIE_DATE_DEBUT_CONTRAT__</strong> au <strong>__SALARIE_DATE_FIN_CONTRAT__</strong>.<br />\r\n<br />\r\nLes <strong>3 mois</strong> premiers de son ex&eacute;cution soit du <strong>__SALARIE_DATE_DEBUT_CONTRAT__</strong> au <strong>__DATE_ADD_3MONTH__</strong>, constituent une p&eacute;riode d&#39;essai renouvelable une seule fois, au cours de laquelle chacune des parties pourra mettre fin sans indemnit&eacute; d&#39;aucune sorte, &agrave; charge pour la partie qui rompt la p&eacute;riode d&rsquo;essai de respecter les dispositions l&eacute;gales et conventionnelles.<br />\r\n<br />\r\n<strong>Article 3 : Fonctions</strong><br />\r\n<br />\r\nLe salari&eacute;es engag&eacute; en qualit&eacute; de : __SALARIE_JOB__. L&#39;employeur se r&eacute;serve le droit d&#39;affecter le salari&eacute; &agrave; une autre fonction et ce, selon les besoins de l&#39;employeur et en consid&eacute;ration de la formation et des qualifications dusalari&eacute;.<br />\r\n<br />\r\n<strong>Article 4 : Dur&eacute;e de travail</strong><br />\r\n<br />\r\nLa dur&eacute;e de travail est de __SALARIE_NB_HOUR__heures par semaine, r&eacute;parties sur 6 jours ouvrables.<br />\r\nLes horaires de travail pourront varier en fonction des besoins de service.<br />\r\n<br />\r\n<strong>Article 5 : Lieu de travail </strong><br />\r\n<br />\r\nLe lieu de travail est la ville de __MYCOMPANY_TOWN__.<br />\r\nL&#39;employeur se r&eacute;serve toutefois le droit de changer le lieu du travail du salari&eacute; sur le territoire du Maroc pour les besoins du service<br />\r\n<br />\r\n<strong>Article 6 : R&eacute;mun&eacute;ration</strong><br />\r\n<br />\r\nEn contrepartie de ses fonctions, le salari&eacute; percevra une r&eacute;mun&eacute;ration mensuelle nette de <strong>__SALARIE_SALAIRE__</strong> __GLOBAL_CURRENCY__.<br />\r\n<br />\r\n<strong>Article 7 : Remboursement de frais</strong><br />\r\n<br />\r\nLa soci&eacute;t&eacute; remboursera au salari&eacute; les frais engag&eacute;s par le salari&eacute; dans le cadre de l&#39;exercice de ses fonctions, sur pr&eacute;sentation des justificatifs et conform&eacute;ment &agrave; la proc&eacute;dure de remboursement de frais applicable dans l&#39;entreprise.<br />\r\n<br />\r\n<strong>Article 8 : Cong&eacute;s pay&eacute;s </strong><br />\r\n<br />\r\nVous b&eacute;n&eacute;ficierez des cong&eacute;s pay&eacute;s et la dur&eacute;e de vos cong&eacute;s pay&eacute;s sera de <strong>18 jours ouvrables par an</strong>.<br />\r\n<br />\r\n<strong>Article 9 : Retraite compl&eacute;mentaire </strong><br />\r\n<br />\r\n__SALARIE_AGENRE__ __SALARIE_FULLNAME__ b&eacute;n&eacute;ficiera des lois sociales institu&eacute;es en faveur des salari&eacute;s notamment en mati&egrave;re de s&eacute;curit&eacute; sociale et en ce qui concerne le r&eacute;gime de l&rsquo;assurance maladie obligatoire (AMO). La caisse de retraite est :<br />\r\nNom : <strong>Caisse Nationale de S&eacute;curit&eacute; Sociale (CNSS)</strong><br />\r\n<br />\r\n<strong>Article 10 : R&egrave;glement int&eacute;rieur </strong><br />\r\n<br />\r\nLes parties s&rsquo;engagent &agrave; respecter les dispositions l&eacute;gales, r&eacute;glementaires et conventionnelles en vigueur dans l&rsquo;entreprise et le salari&eacute; d&eacute;clare avoir pris connaissance du R&egrave;glement Int&eacute;rieur.<br />\r\n<br />\r\n<strong>Article 11 : Clause de confidentialit&eacute;</strong><br />\r\n<br />\r\nVous vous engagez &agrave; observer la discr&eacute;tion la plus stricte sur les informations se rapportant aux activit&eacute;s de la soci&eacute;t&eacute; auxquelles vous aurez acc&egrave;s &agrave; l&rsquo;occasion et dans le cadre de vos fonctions.<br />\r\nNotamment, vous ne divulguerez &agrave; quiconque les m&eacute;thodes, recommandations, cr&eacute;ations, devis, &eacute;tudes, projets, savoir-faire de l&rsquo;entreprise r&eacute;sultant de travaux r&eacute;alis&eacute;s dans l&rsquo;entreprise qui sont couverts par le secret professionnel le plus strict. Vous serez li&eacute; par la m&ecirc;me obligation vis-&agrave;-vis de tout renseignement ou document dont vous aurez pris connaissance chez des clients de la soci&eacute;t&eacute;.<br />\r\nTous les documents, lettres, notes de service, instructions, m&eacute;thodes, organisation et/ou fonctionnement de l&rsquo;entreprise dont vous pourrez avoir connaissance dans l&rsquo;exercice de vos fonctions, seront confidentiels et resteront la propri&eacute;t&eacute; exclusive de la Soci&eacute;t&eacute;.<br />\r\nVous ne pourrez, sans accord &eacute;crit de la direction, publier aucune &eacute;tude sous quelque forme que ce soit portant sur des travaux ou des informations couverts par l&rsquo;obligation de confidentialit&eacute;. Cette obligation de confidentialit&eacute; se prolongera apr&egrave;s la cessation du contrat de travail, quelle qu&rsquo;en soit la cause.<br />\r\n<br />\r\n<strong>Article 12 : Obligation de fid&eacute;lit&eacute;</strong><br />\r\n<br />\r\nPendant la dur&eacute;e du pr&eacute;sent contrat, vous prenez l&rsquo;engagement de ne participer, sous quelque forme que ce soit, &agrave; aucune activit&eacute; susceptible de concurrencer en tout ou partie celle de la soci&eacute;t&eacute; qui vous emploie.<br />\r\n<br />\r\n<strong>Article 13 : Avertissementset r&eacute;siliation</strong><br />\r\n<br />\r\nL&rsquo;employeur peut rompre le contrat &agrave; dur&eacute;e d&eacute;termin&eacute;e avant le terme pr&eacute;vu dans le contrat ou avant que la dur&eacute;e minimale de celui-ci n&rsquo;ait &eacute;t&eacute; atteinte en cas de quatre avertissements de faute grave du salari&eacute; en se r&eacute;f&eacute;rant &agrave; l&rsquo;article 37 du code du travail.<br />\r\nSauf licenciement pour faute grave ou lourde, le contrat pourra &ecirc;tre r&eacute;sili&eacute;, par l&rsquo;une ou l&rsquo;autre des parties, moyennant un d&eacute;lai-pr&eacute;avis d&rsquo;un mois.<br />\r\n<br />\r\n<br />\r\n<br />\r\n<strong>Article 14 : Modifications des informations personnelles</strong><br />\r\n<br />\r\nVous vous engagez &agrave; informer la soci&eacute;t&eacute; dans les meilleurs d&eacute;lais de tout changement de votre situation personnelle (adresse, situation familiale&hellip;). Cette base d&rsquo;informations est transmise au Comit&eacute; d&rsquo;Entreprise et lui permet d&rsquo;attribuer d&rsquo;&eacute;ventuels avantages conditionn&eacute;s &agrave; ses crit&egrave;res. Votre accord implique formellement que vous n&#39;&ecirc;tes li&eacute; &agrave; aucune autre entreprise et que vous avez quitt&eacute; votre pr&eacute;c&eacute;dent employeur libre de tout engagement. Vous vous engagez &agrave; consacrer toute votre activit&eacute; professionnelle au service de la soci&eacute;t&eacute;. Vous voudrez bien nous confirmer votre accord en apposant votre signature pr&eacute;c&eacute;d&eacute;e de la mention manuscrite &quot;lu et approuv&eacute;&quot; sur la derni&egrave;re page. Nous vous prions de croire, __SALARIE_AGENRE__ __SALARIE_FULLNAME__, &agrave; l&#39;expression de nos salutations distingu&eacute;es.<br />\r\n<br />\r\n<br />\r\n<br />\r\nFait en trois exemplaires,<br />\r\nA __MYCOMPANY_TOWN__, le : <strong>__DATE_NOW__</strong><br />\r\n<br />\r\n<br />\r\nLe salari&eacute; __SALARIE_FULLNAME__&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; La soci&eacute;t&eacute; __MYCOMPANY_NAME__\r\n<p>&nbsp;</p>', 1, '".$datec."', ".$conf->entity."),";
		$sql .= "(3, 'contrat_interim', 'Interim', NULL, 1, '".$datec."', ".$conf->entity."),";
		$sql .= "(4, 'contrat_training', 'Contrat d\'apprentissage', NULL, 1, '".$datec."', ".$conf->entity."),";
		$sql .= "(5, 'contrat_cdi', 'Contrat de stage ', NULL, 1, '".$datec."', ".$conf->entity."),";
		$sql .= "(6, 'contrat_professionel', 'Contrat de professionnalisation', NULL, 1, '".$datec."', ".$conf->entity.");";

		$resql = $this->db->query($sql);

		return 1;
    }

}

/**
 * Class SalariescontractsLine
 */
class SalariescontractsLine
{
	/**
	 * @var int ID
	 */
	public $id;
	/**
	 * @var mixed Sample line property 1
	 */
	
	public $fk_user;
	public $fk_user_create;
	public $type;
	public $date_create = '';
	public $start_date = '';
	public $end_date = '';
	public $salarie_sig_date = '';
	public $direction_sig_date = '';
	public $dpae_date = '';
	public $medical_visit_date = '';
	public $description;


}

/**
 * Class SalariescontractsType
 */
class SalariescontractsType
{
	/**
	 * @var int ID
	 */
	public $id;
	/**
	 * @var mixed Sample line property 1
	 */
	
	public $name = '';
	public $start_date = '';
	public $end_date = '';
	public $salarie_sig_date = '';
	public $direction_sig_date = '';
	public $dpae_date = '';
	public $medical_visit_date = '';
	public $description;

	/**
	 * @var mixed Sample line property 2
	 */


	/**
	 * @var mixed Sample line property 2
	 */
	/**
	 * @var string Error code (or message)
	 * @deprecated
	 * @see Salariescontracts::errors
	 */
	public $error;
	/**
	 * @var string[] Error codes (or messages)
	 */
	public $errors = array();
	/**
	 * @var string Id to identify managed objects
	 */
	public $element = 'salariescontractstype';
	/**
	 * @var string Name of table without prefix where object is stored
	 */
	public $table_element = 'type_salairecontrat';

	public $rows = array();

	/**
	 * Constructor
	 *
	 * @param DoliDb $db Database handler
	 */
	public function __construct(DoliDB $db)
	{
		$this->db = $db;
		return 1;
	}

	/**
	 * Create object into database
	 *
	 * @param  User $user      User that creates
	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
	 *
	 * @return int <0 if KO, Id of created object if OK
	 */
	public function create(User $user, $notrigger = false)
	{
		dol_syslog(__METHOD__, LOG_DEBUG);

		$error = 0;

		// Check parameters
		// Put here code to add control on parameters values

		// Insert request
		$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '(';
		
		$sql.= 'fk_user,';
		$sql.= 'name,';
		$sql.= 'namefile,';
		$sql.= 'content,';
		$sql.= 'entity';

		
		$sql .= ') VALUES (';
		
		$sql .= ' '.(! isset($this->fk_user)?'NULL':$this->fk_user).',';
		$sql .= ' '.(! isset($this->name)?'NULL':"'".$this->db->escape($this->name)."'").', ';
		$sql .= ' '.(! isset($this->namefile)?'NULL':"'".$this->db->escape($this->namefile)."'").', ';
		$sql .= ' '.(! isset($this->content)?'NULL':"'".$this->db->escape($this->content)."'").', ';
		$sql .= ' '.$this->db->escape($this->entity);

		$sql .= ')';

		$this->db->begin();

		$resql = $this->db->query($sql);
		if (!$resql) {
			$error ++;
			$this->errors[] = 'Error ' . $this->db->lasterror();
			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
		}

		if (!$error) {
			//update table de user para actualizar campo salario si ok sigue, si ko error ...
			
			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);

			if (!$notrigger) {
				// Uncomment this and change MYOBJECT to your own tag if you
				// want this action to call a trigger.

				//// Call triggers
				//$result=$this->call_trigger('MYOBJECT_CREATE',$user);
				//if ($result < 0) $error++;
				//// End call triggers
			}
		}

		// Commit or rollback
		if ($error) {
			$this->db->rollback();

			return - 1 * $error;
		} else {
			$this->db->commit();

			return $this->id;
		}
	}

	/**
	 * Load object in memory from the database
	 *
	 * @param int    $id  Id object
	 * @param string $ref Ref
	 *
	 * @return int <0 if KO, 0 if not found, >0 if OK
	 */
	public function fetch($id, $ref = null)
	{
		global $conf;
		dol_syslog(__METHOD__, LOG_DEBUG);

		$sql = 'SELECT';
		$sql .= ' rowid,';
		$sql .= " fk_user,";
		$sql .= " name,";
		$sql .= " namefile,";
		$sql .= " content,";
		$sql .= " entity";

		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' ';
		$sql .= ' WHERE rowid = ' . $id;
		// $sql .= ' AND entity='.$conf->entity;

		$resql = $this->db->query($sql);
		if ($resql) {
			$numrows = $this->db->num_rows($resql);
			if ($numrows) {
				$obj = $this->db->fetch_object($resql);

				$this->id = $obj->rowid;
				
				$this->fk_user = $obj->fk_user;
				$this->name = $obj->name;
				$this->namefile = $obj->namefile;
				$this->content = $obj->content;
				$this->entity = $obj->entity;

			}
			$this->db->free($resql);

			if ($numrows) {
				return 1;
			} else {
				return 0;
			}
		} else {
			$this->errors[] = 'Error ' . $this->db->lasterror();
			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);

			return - 1;
		}
	}

	/**
	 * Load object in memory from the database
	 *
	 * @param string $sortorder Sort Order
	 * @param string $sortfield Sort field
	 * @param int    $limit     offset limit
	 * @param int    $offset    offset limit
	 * @param array  $filter    filter array
	 * @param string $filtermode filter mode (AND or OR)
	 *
	 * @return int <0 if KO, >0 if OK
	 */
	public function fetchAll($sortorder='', $sortfield='', $limit=0, $offset=0, $filter, $filtermode='AND')
	{
		global $conf;
		dol_syslog(__METHOD__, LOG_DEBUG);

		$sql = 'SELECT';
		$sql .= ' rowid,';
		
		$sql .= " fk_user,";
		$sql .= " name,";
		$sql .= " namefile,";
		$sql .= " content,";
		$sql .= " entity";

		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element;
		$sql .= ' WHERE entity='.$conf->entity;
		// Manage filter
		/*$sqlwhere = array();
		if (count($filter) > 0) {
			foreach ($filter as $key => $value) {
				$sqlwhere[] = $key . ' LIKE \'%' . $this->db->escape($value) . '%\'';
			}
		}
		if (count($sqlwhere) > 0) {
			$sql .= ' WHERE ' . implode(' '.$filtermode.' ', $sqlwhere);
		}*/

		if (!empty($filter)) {
			$sql .= ' '. $filter;
		}
		
		if (!empty($sortfield)) {
			$sql .= $this->db->order($sortfield,$sortorder);
		}

		/*
		if (!empty($limit)) {
		 $sql .=  ' ' . $this->db->plimit($limit + 1, $offset);
		}*/
		$this->lines = array();

		$resql = $this->db->query($sql);
		if ($resql) {
			$num = $this->db->num_rows($resql);
			$i = 0;

			while ($obj = $this->db->fetch_object($resql)) {
				$line = new SalariescontractsLine();

				$line->id = $obj->rowid;
				$line->fk_user = $obj->fk_user;
				$line->entity = $obj->entity;
				$line->name = $obj->name;
				$line->namefile = $obj->namefile;
				$line->content = $obj->content;

				$this->lines[] = $line;

				$this->ref 	= $obj->rowid;
				$this->id 	= $obj->rowid;
				$this->rows[$i]['rowid'] = $obj->rowid;
				$this->rows[$i]['fk_user'] = $obj->fk_user;
				$this->rows[$i]['name'] = $obj->name;
				$this->rows[$i]['namefile'] = $obj->namefile;
				$this->rows[$i]['content'] = $obj->content;
				$this->rows[$i]['entity'] = $obj->entity;

				$i++;
			}
			$this->db->free($resql);

			return $num;
		} else {
			$this->errors[] = 'Error ' . $this->db->lasterror();
			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);

			return - 1;
		}
	}

	/**
	 * Update object into database
	 *
	 * @param  User $user      User that modifies
	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
	 *
	 * @return int <0 if KO, >0 if OK
	 */
	public function update(User $user, $notrigger = false)
	{
		$error = 0;
		global $conf;

		dol_syslog(__METHOD__, LOG_DEBUG);

		
		// Check parameters
		// Put here code to add a control on parameters values

		// Update request
		$sql = 'UPDATE ' . MAIN_DB_PREFIX . $this->table_element . ' SET';
		
		$sql .= ' name = '.(isset($this->name)?"'".$this->db->escape($this->name)."'":"null").',';
		$sql .= ' namefile = '.(isset($this->namefile)?"'".$this->db->escape($this->namefile)."'":"null").',';
		$sql .= ' content = '.(isset($this->content)?"'".$this->db->escape($this->content)."'":"null").',';
		$sql .= ' entity='.((isset($this->entity) && is_numeric($this->entity)) ? $this->entity : $conf->entity);

		$sql .= ' WHERE rowid=' . $this->id;

		$this->db->begin();

		$resql = $this->db->query($sql);
		if (!$resql) {
			$error ++;
			$this->errors[] = 'Error ' . $this->db->lasterror();
			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
		}

		if (!$error && !$notrigger) {
			// Uncomment this and change MYOBJECT to your own tag if you
			// want this action calls a trigger.

			//// Call triggers
			//$result=$this->call_trigger('MYOBJECT_MODIFY',$user);
			//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
			//// End call triggers
		}

		// Commit or rollback
		if ($error) {
			$this->db->rollback();

			return - 1 * $error;
		} else {
			$this->db->commit();

			return 1;
		}
	}

	/**
	 * Delete object in database
	 *
	 * @param User $user      User that deletes
	 * @param bool $notrigger false=launch triggers after, true=disable triggers
	 *
	 * @return int <0 if KO, >0 if OK
	 */
	public function delete(User $user, $notrigger = false)
	{
		dol_syslog(__METHOD__, LOG_DEBUG);

		$error = 0;

		$this->db->begin();

		if (!$error) {
			if (!$notrigger) {
				// Uncomment this and change MYOBJECT to your own tag if you
				// want this action calls a trigger.

				//// Call triggers
				//$result=$this->call_trigger('MYOBJECT_DELETE',$user);
				//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
				//// End call triggers
			}
		}

		if (!$error) {
			$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element;
			$sql .= ' WHERE rowid=' . $this->id;

			$resql = $this->db->query($sql);
			if (!$resql) {
				$error ++;
				$this->errors[] = 'Error ' . $this->db->lasterror();
				dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
			}
		}

		// Commit or rollback
		if ($error) {
			$this->db->rollback();

			return - 1 * $error;
		} else {
			$this->db->commit();

			return 1;
		}
	}
	
}

Hry