operations.inc.php 10.8 KB
Newer Older
Ayolo's avatar
Ayolo committed
1
<?php
Feu's avatar
Feu committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/* Copyright 2005,2006, 2007
 * - Julien Etelain <julien CHEZ pmad POINT net>
 *
 * Ce fichier fait partie du site de l'Association des 0tudiants de
 * l'UTBM, http://ae.utbm.fr.
 *
 * 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
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 */
23

Ayolo's avatar
Ayolo committed
24 25 26
/**
 * @file
 */
27

Feu's avatar
Feu committed
28 29 30
/**
 * Modes de paiements possibles pour une opération de compta.
 */
Ayolo's avatar
Ayolo committed
31 32 33
$modes_operation = array(2=>"Espèces",1=>"Chèque",3=>"Virement",4=>"Carte Bancaire");

/**
Feu's avatar
Feu committed
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
 * Une opération de compta [dans un classeur de compta].
 *
 * Une opération doit être liée au moins à un tiers. Cela représente la personne
 * qui a été crédité (si l'opération est un débit), ou qui a été  débité (si il
 * s'agit d'un débit). Un tiers peut être :
 * - un utlisateur
 * - une association
 * - une entreprise
 * - un compte association (pour les mouvements interne)
 * Un général un seul doit être définit, hormis si un utilisateur a servi
 * d'intermédiaire, alors il doit être définit en plus du tiers "réel".
 *
 * Une opération peut être liée à un ou plusieurs fichiers de la partie fichier.
 * (pour stocker des justificatifs).
 *
 * @ingroup compta
 * @see classeur
 * @see operation_comptable
 * @see operation_club
 * @see compta_libelle
Ayolo's avatar
Ayolo committed
54 55 56
 */
class operation extends stdentity
{
Feu's avatar
Feu committed
57
	/** Id du classeur dans le quel se trouve cette opération */
Ayolo's avatar
Ayolo committed
58
	var $id_classeur;
Feu's avatar
Feu committed
59 60 61
	/** Numéro d'ordre de l'opération.
	  * Attention: il ne doit pas y avoir d'interruption dans la numérotation.
	  */
Ayolo's avatar
Ayolo committed
62
	var $num;
Feu's avatar
Feu committed
63 64
	/** Id de l'étiquette associée (libelle). Facultatif : peut être null.
	 * Permet de creer des catégories d'opérations au sein d'un classeur pour
65
	 * suivre par exemples des catégories budgetaires
Feu's avatar
Feu committed
66
	 */
Ayolo's avatar
Ayolo committed
67 68
	var $id_libelle;

Feu's avatar
Feu committed
69
	/** Id du type d'opération simplifié (obgligatoire */
Ayolo's avatar
Ayolo committed
70
	var $id_opclb;
71

Feu's avatar
Feu committed
72 73
	/** Id du type comptable (facultatif), peut être null. */
	var $id_opstd;
74

Feu's avatar
Feu committed
75
	/** Opération liée, pour les opération jumelles (de compte à compte en interne)*/
Ayolo's avatar
Ayolo committed
76
	var $id_op_liee;
77

Ayolo's avatar
Ayolo committed
78
	/* bénéficiaire : asso, entreprise ou compte bancaire*/
79

Feu's avatar
Feu committed
80
	/** Id de l'utilisateur tiers (crédité/débité) ou qui a servi d'intermédiaire. Facultatif. */
81
	var $id_utilisateur;
Feu's avatar
Feu committed
82
	/** Id de l'association tiers (crédité/débité). Facultatif. */
Ayolo's avatar
Ayolo committed
83
	var $id_asso;
Feu's avatar
Feu committed
84
	/** Id de l'entreprise tiers (crédité/débité). Facultatif. */
Ayolo's avatar
Ayolo committed
85
	var $id_ent;
Feu's avatar
Feu committed
86
	/** Id du compte association tiers (crédité/débité). Facultatif. */
Ayolo's avatar
Ayolo committed
87
	var $id_cptasso;
88

Ayolo's avatar
Ayolo committed
89
	/* informations sur l'opération */
Feu's avatar
Feu committed
90
	/** Montant de l'opération en centimes */
Ayolo's avatar
Ayolo committed
91
	var $montant;
Feu's avatar
Feu committed
92
	/** Date de l'opération (timestamp) */
Ayolo's avatar
Ayolo committed
93
	var $date;
Feu's avatar
Feu committed
94
	/** Commentaire sue l'opération */
Ayolo's avatar
Ayolo committed
95
	var $commentaire;
Feu's avatar
Feu committed
96
	/** Marquage effectué (1: effctue, 0: non effectué) */
Ayolo's avatar
Ayolo committed
97
	var $effectue;
98
	/** Mode de paiement de l'opération
Feu's avatar
Feu committed
99 100
	 * @see $modes_operation
	 */
Ayolo's avatar
Ayolo committed
101
	var $mode;
Feu's avatar
Feu committed
102
	/** Si le mode est par chèque, le numéro du chèque */
Ayolo's avatar
Ayolo committed
103 104
	var $num_cheque;

105 106


Ayolo's avatar
Ayolo committed
107 108 109 110
	function load_by_id ( $id_op )
	{
		$req = new requete ($this->db, "SELECT *
							FROM `cpta_operation`
111 112
							WHERE id_op='".intval($id_op)."'");

Ayolo's avatar
Ayolo committed
113 114 115 116 117
		if ( $req->lines == 1 )
		{
			$this->_load($req->get_row());
			return true;
		}
118 119

		$this->id = null;
Ayolo's avatar
Ayolo committed
120 121
		return false;
	}
122

Ayolo's avatar
Ayolo committed
123 124 125 126 127
	function _load ( $row )
	{
    $this->id = $row['id_op'];
    $this->id_classeur = $row['id_classeur'];
    $this->num = $row['num_op'];
128 129
    $this->id_opclb = $row['id_opclb'];
    $this->id_opstd = $row['id_opstd'];
Ayolo's avatar
Ayolo committed
130 131 132
    $this->id_utilisateur = $row['id_utilisateur'];
    $this->id_op_liee = $row['id_op_liee'];
    $this->id_asso = $row['id_asso'];
133 134
    $this->id_ent = $row['id_ent'];
    $this->id_cptasso = $row['id_cptasso'];
Ayolo's avatar
Ayolo committed
135 136 137
    $this->montant = $row['montant_op'];
    $this->date = strtotime($row['date_op']);
    $this->commentaire = $row['commentaire_op'];
138 139
    $this->effectue = $row['op_effctue'];

Ayolo's avatar
Ayolo committed
140
    $this->mode = $row['mode_op'];
141 142
    $this->num_cheque = $row['num_cheque_op'];
    $this->id_libelle = $row['id_libelle'];
Ayolo's avatar
Ayolo committed
143
	}
144 145


Ayolo's avatar
Ayolo committed
146 147 148 149
	function add_op ( $id_classeur,
					$id_opclb, $id_opstd,
					$id_utilisateur,
					$id_asso, $id_ent, $id_cptasso,
150
					$montant, $date, $commentaire, $effectue,
Ayolo's avatar
Ayolo committed
151 152 153 154
					$mode, $num_cheque,
					$id_libelle = null
					)
	{
155

Ayolo's avatar
Ayolo committed
156 157 158 159 160 161 162 163 164 165 166 167
		$this->id_classeur = $id_classeur;
		$this->id_opclb = $id_opclb;
		$this->id_opstd = $id_opstd;
		$this->id_utilisateur = $id_utilisateur;
		$this->id_asso = $id_asso;
		$this->id_ent = $id_ent?$id_ent:null;
		$this->id_cptasso = $id_cptasso;
		$this->montant = $montant;
		$this->date = $date;
		$this->commentaire = $commentaire;
		$this->effectue = $effectue;
		$this->mode = $mode;
168
		$this->num_cheque = $num_cheque;
Ayolo's avatar
Ayolo committed
169
		$this->id_libelle = $id_libelle;
170

Ayolo's avatar
Ayolo committed
171 172
		$sql = new requete ( $this->db, "SELECT MAX(`num_op`) FROM `cpta_operation` " .
				"WHERE `id_classeur`='".intval($this->id_classeur)."'" );
173

Ayolo's avatar
Ayolo committed
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
		if ( $sql->lines == 1 )
			list($pnum) = $sql->get_row();
		else
			$pnum = 0;

		$this->num = $pnum + 1;

		$sql = new insert ($this->dbrw,
			"cpta_operation",
			array(
				"id_classeur" => $this->id_classeur,
				"id_opclb" => $this->id_opclb,
				"id_opstd" => $this->id_opstd,
				"id_utilisateur" => $this->id_utilisateur,
				"id_asso" => $this->id_asso,
				"id_ent" => $this->id_ent,
				"id_cptasso" => $this->id_cptasso,
				"num_op" => $this->num,
				"montant_op" => $this->montant,
				"date_op" => date("Y-m-d",$this->date),
				"commentaire_op"=>$this->commentaire,
				"op_effctue" => $this->effectue,
				"mode_op" => $this->mode,
				"num_cheque_op" => $this->num_cheque,
				"id_libelle"=>$this->id_libelle
199

Ayolo's avatar
Ayolo committed
200 201
				)
			);
202

Ayolo's avatar
Ayolo committed
203 204 205 206 207 208
		if ( $sql )
			$this->id = $sql->get_id();
		else
			$this->id = -1;

	}
209

Ayolo's avatar
Ayolo committed
210 211 212 213 214 215 216 217 218
	/**
	 * @private
	 */
	function _link ( $id_op )
	{
		$this->id_op_liee = $id_op;
		$req = new update($this->dbrw,
					"cpta_operation",
					array("id_op_liee"=>$id_op),
219
					array("id_op"=>$this->id));
Ayolo's avatar
Ayolo committed
220
	}
221

Ayolo's avatar
Ayolo committed
222 223 224 225 226 227 228 229 230 231
	/**
	 * Lie une opération avec une autre (opérations jumelles)
	 * @param $op instance deoperation à liér
	 */
	function link_op ( $op )
	{
		if ( $op->id < 1 || $this->id < 1 ) return;
		$op->_link($this->id)	;
		$this->_link($op->id);
	}
232

Ayolo's avatar
Ayolo committed
233 234 235 236 237 238
	/**
	 * Supprime l'opération (et l'opération jumelle)
	 */
	function delete ( )
	{
		if ( $this->id_op_liee )
239 240 241 242
			new delete($this->dbrw,"cpta_operation",array("id_op"=>$this->id_op_liee));

		new delete($this->dbrw, "cpta_operation", array("id_op"=>$this->id));
		new delete($this->dbrw, "cpta_operation_files",array("id_op"=>$this->id));
Feu's avatar
Feu committed
243
    new update($this->dbrw, "cpta_facture",array("id_op"=>null),array("id_op"=>$this->id));
Ayolo's avatar
Ayolo committed
244
	}
245

Ayolo's avatar
Ayolo committed
246 247 248
	/**
	 * Marque comme faite l'opération (et l'opération jumelle)
	 * @param $done fait(1) ou non fait(0)
249
	 */
Ayolo's avatar
Ayolo committed
250 251 252 253 254 255
	function mark_done ( $done = 1 )
	{
		if ( $this->id_op_liee )
		{
			$req = new update($this->dbrw,
						"cpta_operation",
256
						array("op_effctue"=>$done, "date_op"=>date("Y-m-d")),
257
						array("id_op"=>$this->id_op_liee));
Ayolo's avatar
Ayolo committed
258 259 260
		}
		$req = new update($this->dbrw,
					"cpta_operation",
261
					array("op_effctue"=>$done, "date_op"=>date("Y-m-d")),
262
					array("id_op"=>$this->id));
Ayolo's avatar
Ayolo committed
263 264
		$this->effectue=$done;
	}
265

Ayolo's avatar
Ayolo committed
266 267 268
	function save ( $id_opclb, $id_opstd,
					$id_utilisateur,
					$id_asso, $id_ent, $id_cptasso,
269
					$montant, $date, $commentaire, $effectue,
Ayolo's avatar
Ayolo committed
270 271 272 273
					$mode, $num_cheque,
					$id_libelle = null
					)
	{
274

Ayolo's avatar
Ayolo committed
275 276 277 278 279 280 281 282 283 284 285 286
		$this->id_opclb = $id_opclb;
		$this->id_opstd = $id_opstd;
		$this->id_utilisateur = $id_utilisateur;
		$this->id_asso = $id_asso;
		$this->id_ent = $id_ent;
		$this->id_cptasso = $id_cptasso;
		$this->montant = $montant;
		$this->date = $date;
		$this->commentaire = $commentaire;
		$this->effectue = $effectue;

		$this->mode = $mode;
287 288
		$this->num_cheque = $num_cheque;

Ayolo's avatar
Ayolo committed
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306
		$this->id_libelle = $id_libelle;

		$sql = new update ($this->dbrw,
			"cpta_operation",
			array(
				"id_opclb" => $this->id_opclb,
				"id_opstd" => $this->id_opstd,
				"id_utilisateur" => $this->id_utilisateur,
				"id_asso" => $this->id_asso,
				"id_ent" => $this->id_ent,
				"id_cptasso" => $this->id_cptasso,
				"montant_op" => $this->montant,
				"date_op" => date("Y-m-d",$this->date),
				"commentaire_op"=>$this->commentaire,
				"op_effctue" => $this->effectue,
				"mode_op" => $this->mode,
				"num_cheque_op" => $this->num_cheque,
				"id_libelle"=>$this->id_libelle
307

Ayolo's avatar
Ayolo committed
308 309 310 311 312
				),
			array(
				"id_op" => $this->id
				)
			);
313

Ayolo's avatar
Ayolo committed
314 315 316 317 318 319 320 321 322 323 324
		if ( $this->id_op_liee ) // On met à jour l'opération liée
		{
			$req = new update($this->dbrw,
						"cpta_operation",
						array(
							"montant_op" => $this->montant,
							"date_op" => date("Y-m-d",$this->date),
							"mode_op" => $this->mode,
							"num_cheque_op" => $this->num_cheque,
							"op_effctue" => $this->effectue
						),
325
						array("id_op"=>$this->id_op_liee));
Ayolo's avatar
Ayolo committed
326 327 328
		}

	}
329

Feu's avatar
Feu committed
330 331 332 333 334
	/**
	 * Définit l'étiquette (libelle)  associée à cette opération.
	 * @param $id_libelle Id de l'étiquette. Peut être null.
	 * @see compta_libelle
	 */
Ayolo's avatar
Ayolo committed
335 336 337
	function set_libelle($id_libelle)
	{
		$this->id_libelle = $id_libelle;
338

Ayolo's avatar
Ayolo committed
339 340 341 342 343 344
		$sql = new update ($this->dbrw,
			"cpta_operation",
      array("id_libelle" => $this->id_libelle),
			array("id_op" => $this->id)
			);
	}
345

Feu's avatar
Feu committed
346 347 348 349 350 351
	/**
	 * Récupère la liste des ids des fichiers associés à cette opération.
	 * @return la liste des ids des fichiers
	 * @see dfile
	 * @see operation::get_files
	 */
352 353
	function get_files_ids()
	{
Feu's avatar
wtf?  
Feu committed
354
    $list = array();
Feu's avatar
wtf?  
Feu committed
355
    $req = new requete($this->db,"SELECT id_file FROM cpta_operation_files WHERE id_op='".intval($this->id)."'");
356 357 358 359
	  while ( list($id) = $req->get_row() )
	    $list[$id] = $id;
	  return $list;
	}
360

Feu's avatar
Feu committed
361 362 363 364 365
	/**
	 * Récupère la liste des fichiers associés à cette opération.
	 * @return la liste des fichiers sous forme d'instances de dfile
	 * @see dfile
	 */
366 367
	function get_files()
	{
Feu's avatar
fix  
Feu committed
368 369
	  global $topdir;
    require_once($topdir . "include/entities/files.inc.php");
370 371 372 373 374 375 376 377 378 379
	  $list = $this->get_files_ids();
	  $files = array();
	  foreach ( $list as $id )
	  {
	    $file = new dfile($this->db,$this->dbrw);
	    if ( $file->load_by_id($id) )
	      $files[] = $file;
	  }
	  return $files;
	}
380

Feu's avatar
Feu committed
381 382 383 384 385
	/**
	 * Définit la liste des fichiers associées à cett opération
	 * @param $files liste d'instances de dfile
	 * @see dfile
	 */
386 387 388
	function set_files ( &$files )
	{
	  $actual = $this->get_files_ids();
389

390 391 392 393 394 395 396
	  foreach ( $files as $file )
	  {
	    if ( !isset($actual[$file->id]) )
	      new insert($this->dbrw,"cpta_operation_files",array("id_op"=>$this->id,"id_file"=>$file->id));
	    else
	      unset($actual[$file->id]);
	  }
397

398 399
	  foreach ( $actual as $id )
	    new delete($this->dbrw,"cpta_operation_files",array("id_op"=>$this->id,"id_file"=>$id));
400

401
	}
402 403


Ayolo's avatar
Ayolo committed
404 405 406 407
}


?>