Artifact 3f2a30e90bd97d773d996eca4e3fcc6833c44738:


0000: 3c 3f 70 68 70 0a 0a 6e 61 6d 65 73 70 61 63 65  <?php..namespace
0010: 20 47 61 72 72 61 64 69 6e 5c 43 6f 6d 70 74 61   Garradin\Compta
0020: 3b 0a 0a 75 73 65 20 5c 47 61 72 72 61 64 69 6e  ;..use \Garradin
0030: 5c 44 42 3b 0a 75 73 65 20 5c 47 61 72 72 61 64  \DB;.use \Garrad
0040: 69 6e 5c 55 74 69 6c 73 3b 0a 75 73 65 20 5c 47  in\Utils;.use \G
0050: 61 72 72 61 64 69 6e 5c 55 73 65 72 45 78 63 65  arradin\UserExce
0060: 70 74 69 6f 6e 3b 0a 75 73 65 20 5c 47 61 72 72  ption;.use \Garr
0070: 61 64 69 6e 5c 43 6f 6e 66 69 67 3b 0a 0a 63 6c  adin\Config;..cl
0080: 61 73 73 20 4a 6f 75 72 6e 61 6c 0a 7b 0a 20 20  ass Journal.{.  
0090: 20 20 70 72 6f 74 65 63 74 65 64 20 66 75 6e 63    protected func
00a0: 74 69 6f 6e 20 5f 67 65 74 43 75 72 72 65 6e 74  tion _getCurrent
00b0: 45 78 65 72 63 69 63 65 28 29 0a 20 20 20 20 7b  Exercice().    {
00c0: 0a 20 20 20 20 20 20 20 20 24 64 62 20 3d 20 44  .        $db = D
00d0: 42 3a 3a 67 65 74 49 6e 73 74 61 6e 63 65 28 29  B::getInstance()
00e0: 3b 0a 20 20 20 20 20 20 20 20 24 69 64 20 3d 20  ;.        $id = 
00f0: 24 64 62 2d 3e 66 69 72 73 74 43 6f 6c 75 6d 6e  $db->firstColumn
0100: 28 27 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d  ('SELECT id FROM
0110: 20 63 6f 6d 70 74 61 5f 65 78 65 72 63 69 63 65   compta_exercice
0120: 73 20 57 48 45 52 45 20 63 6c 6f 74 75 72 65 20  s WHERE cloture 
0130: 3d 20 30 20 4c 49 4d 49 54 20 31 3b 27 29 3b 0a  = 0 LIMIT 1;');.
0140: 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 69  .        if (!$i
0150: 64 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  d).        {.   
0160: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
0170: 65 77 20 55 73 65 72 45 78 63 65 70 74 69 6f 6e  ew UserException
0180: 28 27 41 75 63 75 6e 20 65 78 65 72 63 69 63 65  ('Aucun exercice
0190: 20 65 6e 20 63 6f 75 72 73 2e 27 29 3b 0a 20 20   en cours.');.  
01a0: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
01b0: 20 72 65 74 75 72 6e 20 24 69 64 3b 0a 20 20 20   return $id;.   
01c0: 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 66   }..    public f
01d0: 75 6e 63 74 69 6f 6e 20 63 68 65 63 6b 45 78 65  unction checkExe
01e0: 72 63 69 63 65 28 29 0a 20 20 20 20 7b 0a 20 20  rcice().    {.  
01f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68        return $th
0200: 69 73 2d 3e 5f 67 65 74 43 75 72 72 65 6e 74 45  is->_getCurrentE
0210: 78 65 72 63 69 63 65 28 29 3b 0a 20 20 20 20 7d  xercice();.    }
0220: 0a 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
0230: 66 75 6e 63 74 69 6f 6e 20 5f 63 68 65 63 6b 4f  function _checkO
0240: 70 65 6e 45 78 65 72 63 69 63 65 28 24 69 64 29  penExercice($id)
0250: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69  .    {.        i
0260: 66 20 28 69 73 5f 6e 75 6c 6c 28 24 69 64 29 29  f (is_null($id))
0270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
0280: 75 72 6e 20 74 72 75 65 3b 0a 0a 20 20 20 20 20  urn true;..     
0290: 20 20 20 24 64 62 20 3d 20 44 42 3a 3a 67 65 74     $db = DB::get
02a0: 49 6e 73 74 61 6e 63 65 28 29 3b 0a 20 20 20 20  Instance();.    
02b0: 20 20 20 20 24 69 64 20 3d 20 24 64 62 2d 3e 66      $id = $db->f
02c0: 69 72 73 74 43 6f 6c 75 6d 6e 28 27 53 45 4c 45  irstColumn('SELE
02d0: 43 54 20 69 64 20 46 52 4f 4d 20 63 6f 6d 70 74  CT id FROM compt
02e0: 61 5f 65 78 65 72 63 69 63 65 73 0a 20 20 20 20  a_exercices.    
02f0: 20 20 20 20 20 20 20 20 57 48 45 52 45 20 63 6c          WHERE cl
0300: 6f 74 75 72 65 20 3d 20 30 20 41 4e 44 20 69 64  oture = 0 AND id
0310: 20 3d 20 3f 20 4c 49 4d 49 54 20 31 3b 27 2c 20   = ? LIMIT 1;', 
0320: 28 69 6e 74 29 24 69 64 29 3b 0a 0a 20 20 20 20  (int)$id);..    
0330: 20 20 20 20 69 66 20 28 24 69 64 29 0a 20 20 20      if ($id).   
0340: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
0350: 74 72 75 65 3b 0a 0a 20 20 20 20 20 20 20 20 72  true;..        r
0360: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20  eturn false;.   
0370: 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 66   }..    public f
0380: 75 6e 63 74 69 6f 6e 20 67 65 74 53 6f 6c 64 65  unction getSolde
0390: 28 24 69 64 5f 63 6f 6d 70 74 65 2c 20 24 69 6e  ($id_compte, $in
03a0: 63 6c 75 72 65 5f 73 6f 75 73 5f 63 6f 6d 70 74  clure_sous_compt
03b0: 65 73 20 3d 20 66 61 6c 73 65 29 0a 20 20 20 20  es = false).    
03c0: 7b 0a 20 20 20 20 20 20 20 20 24 64 62 20 3d 20  {.        $db = 
03d0: 44 42 3a 3a 67 65 74 49 6e 73 74 61 6e 63 65 28  DB::getInstance(
03e0: 29 3b 0a 20 20 20 20 20 20 20 20 24 65 78 65 72  );.        $exer
03f0: 63 69 63 65 20 3d 20 24 74 68 69 73 2d 3e 5f 67  cice = $this->_g
0400: 65 74 43 75 72 72 65 6e 74 45 78 65 72 63 69 63  etCurrentExercic
0410: 65 28 29 3b 0a 20 20 20 20 20 20 20 20 24 63 6f  e();.        $co
0420: 6d 70 74 65 20 3d 20 24 69 6e 63 6c 75 72 65 5f  mpte = $inclure_
0430: 73 6f 75 73 5f 63 6f 6d 70 74 65 73 0a 20 20 20  sous_comptes.   
0440: 20 20 20 20 20 20 20 20 20 3f 20 27 4c 49 4b 45           ? 'LIKE
0450: 20 5c 27 27 20 2e 20 24 64 62 2d 3e 65 73 63 61   \'' . $db->esca
0460: 70 65 53 74 72 69 6e 67 28 74 72 69 6d 28 24 69  peString(trim($i
0470: 64 5f 63 6f 6d 70 74 65 29 29 20 2e 20 27 25 5c  d_compte)) . '%\
0480: 27 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 3a  ''.            :
0490: 20 27 3d 20 5c 27 27 20 2e 20 24 64 62 2d 3e 65   '= \'' . $db->e
04a0: 73 63 61 70 65 53 74 72 69 6e 67 28 74 72 69 6d  scapeString(trim
04b0: 28 24 69 64 5f 63 6f 6d 70 74 65 29 29 20 2e 20  ($id_compte)) . 
04c0: 27 5c 27 27 3b 0a 0a 20 20 20 20 20 20 20 20 24  '\'';..        $
04d0: 64 65 62 69 74 20 3d 20 27 43 4f 41 4c 45 53 43  debit = 'COALESC
04e0: 45 28 28 53 45 4c 45 43 54 20 53 55 4d 28 6d 6f  E((SELECT SUM(mo
04f0: 6e 74 61 6e 74 29 20 46 52 4f 4d 20 63 6f 6d 70  ntant) FROM comp
0500: 74 61 5f 6a 6f 75 72 6e 61 6c 20 57 48 45 52 45  ta_journal WHERE
0510: 20 63 6f 6d 70 74 65 5f 64 65 62 69 74 20 27 2e   compte_debit '.
0520: 24 63 6f 6d 70 74 65 2e 27 20 41 4e 44 20 69 64  $compte.' AND id
0530: 5f 65 78 65 72 63 69 63 65 20 3d 20 27 2e 28 69  _exercice = '.(i
0540: 6e 74 29 24 65 78 65 72 63 69 63 65 2e 27 29 2c  nt)$exercice.'),
0550: 20 30 29 27 3b 0a 20 20 20 20 20 20 20 20 24 63   0)';.        $c
0560: 72 65 64 69 74 20 3d 20 27 43 4f 41 4c 45 53 43  redit = 'COALESC
0570: 45 28 28 53 45 4c 45 43 54 20 53 55 4d 28 6d 6f  E((SELECT SUM(mo
0580: 6e 74 61 6e 74 29 20 46 52 4f 4d 20 63 6f 6d 70  ntant) FROM comp
0590: 74 61 5f 6a 6f 75 72 6e 61 6c 20 57 48 45 52 45  ta_journal WHERE
05a0: 20 63 6f 6d 70 74 65 5f 63 72 65 64 69 74 20 27   compte_credit '
05b0: 2e 24 63 6f 6d 70 74 65 2e 27 20 41 4e 44 20 69  .$compte.' AND i
05c0: 64 5f 65 78 65 72 63 69 63 65 20 3d 20 27 2e 28  d_exercice = '.(
05d0: 69 6e 74 29 24 65 78 65 72 63 69 63 65 2e 27 29  int)$exercice.')
05e0: 2c 20 30 29 27 3b 0a 0a 20 20 20 20 20 20 20 20  , 0)';..        
05f0: 2f 2f 20 4c 27 61 63 74 69 66 20 61 75 67 6d 65  // L'actif augme
0600: 6e 74 65 20 61 75 20 64 c3 a9 62 69 74 2c 20 6c  nte au d..bit, l
0610: 65 20 70 61 73 73 69 66 20 61 75 20 63 72 c3 a9  e passif au cr..
0620: 64 69 74 0a 20 20 20 20 20 20 20 20 24 70 6f 73  dit.        $pos
0630: 69 74 69 6f 6e 20 3d 20 24 64 62 2d 3e 66 69 72  ition = $db->fir
0640: 73 74 43 6f 6c 75 6d 6e 28 27 53 45 4c 45 43 54  stColumn('SELECT
0650: 20 70 6f 73 69 74 69 6f 6e 20 46 52 4f 4d 20 63   position FROM c
0660: 6f 6d 70 74 61 5f 63 6f 6d 70 74 65 73 20 57 48  ompta_comptes WH
0670: 45 52 45 20 69 64 20 3d 20 3f 3b 27 2c 20 24 69  ERE id = ?;', $i
0680: 64 5f 63 6f 6d 70 74 65 29 3b 0a 0a 20 20 20 20  d_compte);..    
0690: 20 20 20 20 69 66 20 28 28 24 70 6f 73 69 74 69      if (($positi
06a0: 6f 6e 20 26 20 43 6f 6d 70 74 65 73 3a 3a 41 43  on & Comptes::AC
06b0: 54 49 46 29 20 7c 7c 20 28 24 70 6f 73 69 74 69  TIF) || ($positi
06c0: 6f 6e 20 26 20 43 6f 6d 70 74 65 73 3a 3a 43 48  on & Comptes::CH
06d0: 41 52 47 45 29 29 0a 20 20 20 20 20 20 20 20 7b  ARGE)).        {
06e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 71 75  .            $qu
06f0: 65 72 79 20 3d 20 24 64 65 62 69 74 20 2e 20 27  ery = $debit . '
0700: 20 2d 20 27 20 2e 20 24 63 72 65 64 69 74 3b 0a   - ' . $credit;.
0710: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
0720: 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 7b    else.        {
0730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 71 75  .            $qu
0740: 65 72 79 20 3d 20 24 63 72 65 64 69 74 20 2e 20  ery = $credit . 
0750: 27 20 2d 20 27 20 2e 20 24 64 65 62 69 74 3b 0a  ' - ' . $debit;.
0760: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
0770: 20 20 20 72 65 74 75 72 6e 20 24 64 62 2d 3e 66     return $db->f
0780: 69 72 73 74 43 6f 6c 75 6d 6e 28 27 53 45 4c 45  irstColumn('SELE
0790: 43 54 20 27 20 2e 20 24 71 75 65 72 79 20 2e 20  CT ' . $query . 
07a0: 27 3b 27 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ';');.    }..   
07b0: 20 70 75 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e   public function
07c0: 20 67 65 74 4a 6f 75 72 6e 61 6c 43 6f 6d 70 74   getJournalCompt
07d0: 65 28 24 63 6f 6d 70 74 65 2c 20 24 69 6e 63 6c  e($compte, $incl
07e0: 75 72 65 5f 73 6f 75 73 5f 63 6f 6d 70 74 65 73  ure_sous_comptes
07f0: 20 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 7b 0a   = false).    {.
0800: 20 20 20 20 20 20 20 20 24 64 62 20 3d 20 44 42          $db = DB
0810: 3a 3a 67 65 74 49 6e 73 74 61 6e 63 65 28 29 3b  ::getInstance();
0820: 0a 0a 20 20 20 20 20 20 20 20 24 70 6f 73 69 74  ..        $posit
0830: 69 6f 6e 20 3d 20 24 64 62 2d 3e 66 69 72 73 74  ion = $db->first
0840: 43 6f 6c 75 6d 6e 28 27 53 45 4c 45 43 54 20 70  Column('SELECT p
0850: 6f 73 69 74 69 6f 6e 20 46 52 4f 4d 20 63 6f 6d  osition FROM com
0860: 70 74 61 5f 63 6f 6d 70 74 65 73 20 57 48 45 52  pta_comptes WHER
0870: 45 20 69 64 20 3d 20 3f 3b 27 2c 20 24 63 6f 6d  E id = ?;', $com
0880: 70 74 65 29 3b 0a 0a 20 20 20 20 20 20 20 20 24  pte);..        $
0890: 65 78 65 72 63 69 63 65 20 3d 20 24 74 68 69 73  exercice = $this
08a0: 2d 3e 5f 67 65 74 43 75 72 72 65 6e 74 45 78 65  ->_getCurrentExe
08b0: 72 63 69 63 65 28 29 3b 0a 20 20 20 20 20 20 20  rcice();.       
08c0: 20 24 63 6f 6d 70 74 65 20 3d 20 24 69 6e 63 6c   $compte = $incl
08d0: 75 72 65 5f 73 6f 75 73 5f 63 6f 6d 70 74 65 73  ure_sous_comptes
08e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 3f 20 27  .            ? '
08f0: 4c 49 4b 45 20 5c 27 27 20 2e 20 24 64 62 2d 3e  LIKE \'' . $db->
0900: 65 73 63 61 70 65 53 74 72 69 6e 67 28 74 72 69  escapeString(tri
0910: 6d 28 24 63 6f 6d 70 74 65 29 29 20 2e 20 27 25  m($compte)) . '%
0920: 5c 27 27 0a 20 20 20 20 20 20 20 20 20 20 20 20  \''.            
0930: 3a 20 27 3d 20 5c 27 27 20 2e 20 24 64 62 2d 3e  : '= \'' . $db->
0940: 65 73 63 61 70 65 53 74 72 69 6e 67 28 74 72 69  escapeString(tri
0950: 6d 28 24 63 6f 6d 70 74 65 29 29 20 2e 20 27 5c  m($compte)) . '\
0960: 27 27 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20  '';..        // 
0970: 4c 27 61 63 74 69 66 20 65 74 20 6c 65 73 20 63  L'actif et les c
0980: 68 61 72 67 65 73 20 61 75 67 6d 65 6e 74 65 6e  harges augmenten
0990: 74 20 61 75 20 64 c3 a9 62 69 74 2c 20 6c 65 20  t au d..bit, le 
09a0: 70 61 73 73 69 66 20 65 74 20 6c 65 73 20 70 72  passif et les pr
09b0: 6f 64 75 69 74 73 20 61 75 20 63 72 c3 a9 64 69  oduits au cr..di
09c0: 74 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 24  t.        if (($
09d0: 70 6f 73 69 74 69 6f 6e 20 26 20 43 6f 6d 70 74  position & Compt
09e0: 65 73 3a 3a 41 43 54 49 46 29 20 7c 7c 20 28 24  es::ACTIF) || ($
09f0: 70 6f 73 69 74 69 6f 6e 20 26 20 43 6f 6d 70 74  position & Compt
0a00: 65 73 3a 3a 43 48 41 52 47 45 29 29 0a 20 20 20  es::CHARGE)).   
0a10: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
0a20: 20 20 20 24 64 20 3d 20 27 27 3b 0a 20 20 20 20     $d = '';.    
0a30: 20 20 20 20 20 20 20 20 24 63 20 3d 20 27 2d 27          $c = '-'
0a40: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
0a50: 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20      else.       
0a60: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24   {.            $
0a70: 64 20 3d 20 27 2d 27 3b 0a 20 20 20 20 20 20 20  d = '-';.       
0a80: 20 20 20 20 20 24 63 20 3d 20 27 27 3b 0a 20 20       $c = '';.  
0a90: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
0aa0: 20 24 71 75 65 72 79 20 3d 20 27 53 45 4c 45 43   $query = 'SELEC
0ab0: 54 20 2a 2c 20 73 74 72 66 74 69 6d 65 28 5c 27  T *, strftime(\'
0ac0: 25 73 5c 27 2c 20 64 61 74 65 29 20 41 53 20 64  %s\', date) AS d
0ad0: 61 74 65 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ate, .          
0ae0: 20 20 28 43 41 53 45 20 57 48 45 4e 20 63 6f 6d    (CASE WHEN com
0af0: 70 74 65 5f 64 65 62 69 74 20 27 2e 24 63 6f 6d  pte_debit '.$com
0b00: 70 74 65 2e 27 20 54 48 45 4e 20 27 2e 24 64 2e  pte.' THEN '.$d.
0b10: 27 6d 6f 6e 74 61 6e 74 20 45 4c 53 45 20 27 2e  'montant ELSE '.
0b20: 24 63 2e 27 6d 6f 6e 74 61 6e 74 20 45 4e 44 29  $c.'montant END)
0b30: 20 41 53 20 73 6f 6c 64 65 0a 20 20 20 20 20 20   AS solde.      
0b40: 20 20 20 20 20 20 46 52 4f 4d 20 63 6f 6d 70 74        FROM compt
0b50: 61 5f 6a 6f 75 72 6e 61 6c 20 57 48 45 52 45 20  a_journal WHERE 
0b60: 28 63 6f 6d 70 74 65 5f 64 65 62 69 74 20 27 2e  (compte_debit '.
0b70: 24 63 6f 6d 70 74 65 2e 27 20 4f 52 20 63 6f 6d  $compte.' OR com
0b80: 70 74 65 5f 63 72 65 64 69 74 20 27 2e 24 63 6f  pte_credit '.$co
0b90: 6d 70 74 65 2e 27 29 20 0a 20 20 20 20 20 20 20  mpte.') .       
0ba0: 20 20 20 20 20 41 4e 44 20 69 64 5f 65 78 65 72       AND id_exer
0bb0: 63 69 63 65 20 3d 20 27 2e 28 69 6e 74 29 24 65  cice = '.(int)$e
0bc0: 78 65 72 63 69 63 65 2e 27 0a 20 20 20 20 20 20  xercice.'.      
0bd0: 20 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 64        ORDER BY d
0be0: 61 74 65 20 41 53 43 3b 27 3b 0a 0a 20 20 20 20  ate ASC;';..    
0bf0: 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 24 64      $result = $d
0c00: 62 2d 3e 67 65 74 28 24 71 75 65 72 79 29 3b 0a  b->get($query);.
0c10: 20 20 20 20 20 20 20 20 24 73 6f 6c 64 65 20 3d          $solde =
0c20: 20 30 2e 30 3b 0a 0a 20 20 20 20 20 20 20 20 66   0.0;..        f
0c30: 6f 72 65 61 63 68 20 28 24 72 65 73 75 6c 74 20  oreach ($result 
0c40: 61 73 20 26 24 72 6f 77 29 0a 20 20 20 20 20 20  as &$row).      
0c50: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
0c60: 24 73 6f 6c 64 65 20 2b 3d 20 24 72 6f 77 2d 3e  $solde += $row->
0c70: 73 6f 6c 64 65 3b 0a 20 20 20 20 20 20 20 20 20  solde;.         
0c80: 20 20 20 24 72 6f 77 2d 3e 73 6f 6c 64 65 20 3d     $row->solde =
0c90: 20 24 73 6f 6c 64 65 3b 0a 20 20 20 20 20 20 20   $solde;.       
0ca0: 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75   }..        retu
0cb0: 72 6e 20 24 72 65 73 75 6c 74 3b 0a 20 20 20 20  rn $result;.    
0cc0: 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 66 75  }..    public fu
0cd0: 6e 63 74 69 6f 6e 20 61 64 64 28 24 64 61 74 61  nction add($data
0ce0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20  ).    {.        
0cf0: 24 74 68 69 73 2d 3e 5f 63 68 65 63 6b 46 69 65  $this->_checkFie
0d00: 6c 64 73 28 24 64 61 74 61 29 3b 0a 0a 20 20 20  lds($data);..   
0d10: 20 20 20 20 20 24 64 62 20 3d 20 44 42 3a 3a 67       $db = DB::g
0d20: 65 74 49 6e 73 74 61 6e 63 65 28 29 3b 0a 0a 20  etInstance();.. 
0d30: 20 20 20 20 20 20 20 24 64 61 74 61 5b 27 69 64         $data['id
0d40: 5f 65 78 65 72 63 69 63 65 27 5d 20 3d 20 24 74  _exercice'] = $t
0d50: 68 69 73 2d 3e 5f 67 65 74 43 75 72 72 65 6e 74  his->_getCurrent
0d60: 45 78 65 72 63 69 63 65 28 29 3b 0a 0a 20 20 20  Exercice();..   
0d70: 20 20 20 20 20 24 64 62 2d 3e 69 6e 73 65 72 74       $db->insert
0d80: 28 27 63 6f 6d 70 74 61 5f 6a 6f 75 72 6e 61 6c  ('compta_journal
0d90: 27 2c 20 24 64 61 74 61 29 3b 0a 20 20 20 20 20  ', $data);.     
0da0: 20 20 20 24 69 64 20 3d 20 24 64 62 2d 3e 6c 61     $id = $db->la
0db0: 73 74 49 6e 73 65 72 74 52 6f 77 49 64 28 29 3b  stInsertRowId();
0dc0: 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
0dd0: 20 24 69 64 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   $id;.    }..   
0de0: 20 70 75 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e   public function
0df0: 20 65 64 69 74 28 24 69 64 2c 20 24 64 61 74 61   edit($id, $data
0e00: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20  ).    {.        
0e10: 24 64 62 20 3d 20 44 42 3a 3a 67 65 74 49 6e 73  $db = DB::getIns
0e20: 74 61 6e 63 65 28 29 3b 0a 0a 20 20 20 20 20 20  tance();..      
0e30: 20 20 2f 2f 20 56 c3 a9 72 69 66 69 63 61 74 69    // V..rificati
0e40: 6f 6e 20 71 75 65 20 6c 27 6f 6e 20 70 65 75 74  on que l'on peut
0e50: 20 c3 a9 64 69 74 65 72 20 63 65 74 74 65 20 6f   ..diter cette o
0e60: 70 c3 a9 72 61 74 69 6f 6e 0a 20 20 20 20 20 20  p..ration.      
0e70: 20 20 69 66 20 28 21 24 74 68 69 73 2d 3e 5f 63    if (!$this->_c
0e80: 68 65 63 6b 4f 70 65 6e 45 78 65 72 63 69 63 65  heckOpenExercice
0e90: 28 24 64 62 2d 3e 66 69 72 73 74 43 6f 6c 75 6d  ($db->firstColum
0ea0: 6e 28 27 53 45 4c 45 43 54 20 69 64 5f 65 78 65  n('SELECT id_exe
0eb0: 72 63 69 63 65 20 46 52 4f 4d 20 63 6f 6d 70 74  rcice FROM compt
0ec0: 61 5f 6a 6f 75 72 6e 61 6c 20 57 48 45 52 45 20  a_journal WHERE 
0ed0: 69 64 20 3d 20 3f 3b 27 2c 20 24 69 64 29 29 29  id = ?;', $id)))
0ee0: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
0ef0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
0f00: 20 55 73 65 72 45 78 63 65 70 74 69 6f 6e 28 27   UserException('
0f10: 43 65 74 74 65 20 6f 70 c3 a9 72 61 74 69 6f 6e  Cette op..ration
0f20: 20 66 61 69 74 20 70 61 72 74 69 65 20 64 5c 27   fait partie d\'
0f30: 75 6e 20 65 78 65 72 63 69 63 65 20 71 75 69 20  un exercice qui 
0f40: 61 20 c3 a9 74 c3 a9 20 63 6c c3 b4 74 75 72 c3  a ..t.. cl..tur.
0f50: a9 2e 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ..');.        }.
0f60: 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e  .        $this->
0f70: 5f 63 68 65 63 6b 46 69 65 6c 64 73 28 24 64 61  _checkFields($da
0f80: 74 61 29 3b 0a 0a 20 20 20 20 20 20 20 20 24 64  ta);..        $d
0f90: 62 2d 3e 75 70 64 61 74 65 28 27 63 6f 6d 70 74  b->update('compt
0fa0: 61 5f 6a 6f 75 72 6e 61 6c 27 2c 20 24 64 61 74  a_journal', $dat
0fb0: 61 2c 20 24 64 62 2d 3e 77 68 65 72 65 28 27 69  a, $db->where('i
0fc0: 64 27 2c 20 74 72 69 6d 28 24 69 64 29 29 29 3b  d', trim($id)));
0fd0: 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
0fe0: 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a 20 20   true;.    }..  
0ff0: 20 20 70 75 62 6c 69 63 20 66 75 6e 63 74 69 6f    public functio
1000: 6e 20 64 65 6c 65 74 65 28 24 69 64 29 0a 20 20  n delete($id).  
1010: 20 20 7b 0a 20 20 20 20 20 20 20 20 24 64 62 20    {.        $db 
1020: 3d 20 44 42 3a 3a 67 65 74 49 6e 73 74 61 6e 63  = DB::getInstanc
1030: 65 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f  e();..        //
1040: 20 56 c3 a9 72 69 66 69 63 61 74 69 6f 6e 20 71   V..rification q
1050: 75 65 20 6c 27 6f 6e 20 70 65 75 74 20 c3 a9 64  ue l'on peut ..d
1060: 69 74 65 72 20 63 65 74 74 65 20 6f 70 c3 a9 72  iter cette op..r
1070: 61 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 69 66  ation.        if
1080: 20 28 21 24 74 68 69 73 2d 3e 5f 63 68 65 63 6b   (!$this->_check
1090: 4f 70 65 6e 45 78 65 72 63 69 63 65 28 24 64 62  OpenExercice($db
10a0: 2d 3e 66 69 72 73 74 43 6f 6c 75 6d 6e 28 27 53  ->firstColumn('S
10b0: 45 4c 45 43 54 20 69 64 5f 65 78 65 72 63 69 63  ELECT id_exercic
10c0: 65 20 46 52 4f 4d 20 63 6f 6d 70 74 61 5f 6a 6f  e FROM compta_jo
10d0: 75 72 6e 61 6c 20 57 48 45 52 45 20 69 64 20 3d  urnal WHERE id =
10e0: 20 3f 3b 27 2c 20 24 69 64 29 29 29 0a 20 20 20   ?;', $id))).   
10f0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
1100: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 55 73 65     throw new Use
1110: 72 45 78 63 65 70 74 69 6f 6e 28 27 43 65 74 74  rException('Cett
1120: 65 20 6f 70 c3 a9 72 61 74 69 6f 6e 20 66 61 69  e op..ration fai
1130: 74 20 70 61 72 74 69 65 20 64 5c 27 75 6e 20 65  t partie d\'un e
1140: 78 65 72 63 69 63 65 20 71 75 69 20 61 20 c3 a9  xercice qui a ..
1150: 74 c3 a9 20 63 6c c3 b4 74 75 72 c3 a9 2e 27 29  t.. cl..tur...')
1160: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  ;.        }..   
1170: 20 20 20 20 20 24 64 62 2d 3e 62 65 67 69 6e 28       $db->begin(
1180: 29 3b 0a 20 20 20 20 20 20 20 20 24 64 62 2d 3e  );.        $db->
1190: 64 65 6c 65 74 65 28 27 6d 65 6d 62 72 65 73 5f  delete('membres_
11a0: 6f 70 65 72 61 74 69 6f 6e 73 27 2c 20 24 64 62  operations', $db
11b0: 2d 3e 77 68 65 72 65 28 27 69 64 5f 6f 70 65 72  ->where('id_oper
11c0: 61 74 69 6f 6e 27 2c 20 28 69 6e 74 29 24 69 64  ation', (int)$id
11d0: 29 29 3b 0a 20 20 20 20 20 20 20 20 24 64 62 2d  ));.        $db-
11e0: 3e 64 65 6c 65 74 65 28 27 63 6f 6d 70 74 61 5f  >delete('compta_
11f0: 72 61 70 70 72 6f 63 68 65 6d 65 6e 74 27 2c 20  rapprochement', 
1200: 24 64 62 2d 3e 77 68 65 72 65 28 27 69 64 5f 6f  $db->where('id_o
1210: 70 65 72 61 74 69 6f 6e 27 2c 20 28 69 6e 74 29  peration', (int)
1220: 24 69 64 29 29 3b 0a 20 20 20 20 20 20 20 20 24  $id));.        $
1230: 64 62 2d 3e 64 65 6c 65 74 65 28 27 63 6f 6d 70  db->delete('comp
1240: 74 61 5f 6a 6f 75 72 6e 61 6c 27 2c 20 24 64 62  ta_journal', $db
1250: 2d 3e 77 68 65 72 65 28 27 69 64 27 2c 20 28 69  ->where('id', (i
1260: 6e 74 29 24 69 64 29 29 3b 0a 20 20 20 20 20 20  nt)$id));.      
1270: 20 20 24 64 62 2d 3e 63 6f 6d 6d 69 74 28 29 3b    $db->commit();
1280: 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1290: 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a 20 20   true;.    }..  
12a0: 20 20 70 75 62 6c 69 63 20 66 75 6e 63 74 69 6f    public functio
12b0: 6e 20 67 65 74 28 24 69 64 29 0a 20 20 20 20 7b  n get($id).    {
12c0: 0a 20 20 20 20 20 20 20 20 24 64 62 20 3d 20 44  .        $db = D
12d0: 42 3a 3a 67 65 74 49 6e 73 74 61 6e 63 65 28 29  B::getInstance()
12e0: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
12f0: 20 24 64 62 2d 3e 66 69 72 73 74 28 27 53 45 4c   $db->first('SEL
1300: 45 43 54 20 2a 2c 20 73 74 72 66 74 69 6d 65 28  ECT *, strftime(
1310: 5c 27 25 73 5c 27 2c 20 64 61 74 65 29 20 41 53  \'%s\', date) AS
1320: 20 64 61 74 65 20 46 52 4f 4d 20 63 6f 6d 70 74   date FROM compt
1330: 61 5f 6a 6f 75 72 6e 61 6c 20 57 48 45 52 45 20  a_journal WHERE 
1340: 69 64 20 3d 20 3f 3b 27 2c 20 24 69 64 29 3b 0a  id = ?;', $id);.
1350: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20      }..    /**. 
1360: 20 20 20 20 2a 20 43 6f 6d 70 74 65 20 6c 65 20      * Compte le 
1370: 6e 6f 6d 62 72 65 20 64 27 c3 a9 63 72 69 74 75  nombre d'..critu
1380: 72 65 73 20 6c 69 c3 a9 65 73 20 c3 a0 20 75 6e  res li..es .. un
1390: 20 6d 65 6d 62 72 65 0a 20 20 20 20 20 2a 20 40   membre.     * @
13a0: 70 61 72 61 6d 20 20 69 6e 74 65 67 65 72 20 24  param  integer $
13b0: 69 64 20 4e 75 6d c3 a9 72 6f 20 64 65 20 6d 65  id Num..ro de me
13c0: 6d 62 72 65 0a 20 20 20 20 20 2a 20 40 72 65 74  mbre.     * @ret
13d0: 75 72 6e 20 69 6e 74 65 67 65 72 20 20 20 20 20  urn integer     
13e0: 4e 6f 6d 62 72 65 20 64 27 c3 a9 63 72 69 74 75  Nombre d'..critu
13f0: 72 65 73 20 6c 69 c3 a9 65 73 0a 20 20 20 20 20  res li..es.     
1400: 2a 2f 0a 20 20 20 20 70 75 62 6c 69 63 20 66 75  */.    public fu
1410: 6e 63 74 69 6f 6e 20 63 6f 75 6e 74 46 6f 72 4d  nction countForM
1420: 65 6d 62 65 72 28 24 69 64 29 0a 20 20 20 20 7b  ember($id).    {
1430: 0a 20 20 20 20 20 20 20 20 24 64 62 20 3d 20 44  .        $db = D
1440: 42 3a 3a 67 65 74 49 6e 73 74 61 6e 63 65 28 29  B::getInstance()
1450: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
1460: 20 24 64 62 2d 3e 63 6f 75 6e 74 28 27 63 6f 6d   $db->count('com
1470: 70 74 61 5f 6a 6f 75 72 6e 61 6c 27 2c 20 24 64  pta_journal', $d
1480: 62 2d 3e 77 68 65 72 65 28 27 69 64 5f 61 75 74  b->where('id_aut
1490: 65 75 72 27 2c 20 24 69 64 29 29 3b 0a 20 20 20  eur', $id));.   
14a0: 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20   }..    /**.    
14b0: 20 2a 20 4c 69 73 74 65 72 20 6c 65 73 20 c3 a9   * Lister les ..
14c0: 63 72 69 74 75 72 65 73 20 6c 69 c3 a9 65 73 20  critures li..es 
14d0: c3 a0 20 75 6e 20 6d 65 6d 62 72 65 0a 20 20 20  .. un membre.   
14e0: 20 20 2a 20 40 70 61 72 61 6d 20 20 69 6e 74 65    * @param  inte
14f0: 67 65 72 20 24 69 64 20 20 20 20 20 20 20 49 64  ger $id       Id
1500: 65 6e 74 69 66 69 61 6e 74 20 64 65 20 6d 65 6d  entifiant de mem
1510: 62 72 65 0a 20 20 20 20 20 2a 20 40 70 61 72 61  bre.     * @para
1520: 6d 20 20 69 6e 74 65 67 65 72 20 24 65 78 65 72  m  integer $exer
1530: 63 69 63 65 20 49 64 65 6e 74 69 66 69 61 6e 74  cice Identifiant
1540: 20 64 27 65 78 65 72 63 69 63 65 0a 20 20 20 20   d'exercice.    
1550: 20 2a 20 40 72 65 74 75 72 6e 20 61 72 72 61 79   * @return array
1560: 20 20 20 20 20 20 20 20 20 20 20 4c 69 73 74 65             Liste
1570: 20 64 65 73 20 c3 a9 63 72 69 74 75 72 65 73 20   des ..critures 
1580: 6c 69 c3 a9 65 73 0a 20 20 20 20 20 2a 2f 0a 20  li..es.     */. 
1590: 20 20 20 70 75 62 6c 69 63 20 66 75 6e 63 74 69     public functi
15a0: 6f 6e 20 6c 69 73 74 46 6f 72 4d 65 6d 62 65 72  on listForMember
15b0: 28 24 69 64 2c 20 24 65 78 65 72 63 69 63 65 29  ($id, $exercice)
15c0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24  .    {.        $
15d0: 64 62 20 3d 20 44 42 3a 3a 67 65 74 49 6e 73 74  db = DB::getInst
15e0: 61 6e 63 65 28 29 3b 0a 20 20 20 20 20 20 20 20  ance();.        
15f0: 72 65 74 75 72 6e 20 24 64 62 2d 3e 67 65 74 28  return $db->get(
1600: 27 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63  'SELECT * FROM c
1610: 6f 6d 70 74 61 5f 6a 6f 75 72 6e 61 6c 0a 20 20  ompta_journal.  
1620: 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20            WHERE 
1630: 69 64 5f 61 75 74 65 75 72 20 3d 20 3f 20 41 4e  id_auteur = ? AN
1640: 44 20 69 64 5f 65 78 65 72 63 69 63 65 20 3d 20  D id_exercice = 
1650: 3f 3b 27 2c 20 28 69 6e 74 29 24 69 64 2c 20 28  ?;', (int)$id, (
1660: 69 6e 74 29 24 65 78 65 72 63 69 63 65 29 3b 0a  int)$exercice);.
1670: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20      }..    /**. 
1680: 20 20 20 20 2a 20 4c 69 73 74 65 72 20 6c 65 73      * Lister les
1690: 20 6d 65 6d 62 72 65 73 20 6c 69 c3 a9 73 20 c3   membres li..s .
16a0: a0 20 63 65 74 74 65 20 c3 a9 63 72 69 74 75 72  . cette ..critur
16b0: 65 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20  e.     * @param 
16c0: 20 69 6e 74 65 67 65 72 20 24 69 64 20 4e 75 6d   integer $id Num
16d0: c3 a9 72 6f 20 64 27 c3 a9 63 72 69 74 75 72 65  ..ro d'..criture
16e0: 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e 20  .     * @return 
16f0: 61 72 72 61 79 20 20 20 20 20 4c 69 73 74 65 20  array     Liste 
1700: 64 65 73 20 6d 65 6d 62 72 65 73 20 6c 69 c3 a9  des membres li..
1710: 73 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 70 75  s.     */.    pu
1720: 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20 6c 69  blic function li
1730: 73 74 52 65 6c 61 74 65 64 4d 65 6d 62 65 72 73  stRelatedMembers
1740: 28 24 69 64 29 0a 20 20 20 20 7b 0a 20 20 20 20  ($id).    {.    
1750: 20 20 20 20 24 64 62 20 3d 20 44 42 3a 3a 67 65      $db = DB::ge
1760: 74 49 6e 73 74 61 6e 63 65 28 29 3b 0a 20 20 20  tInstance();.   
1770: 20 20 20 20 20 24 63 68 61 6d 70 5f 69 64 20 3d       $champ_id =
1780: 20 43 6f 6e 66 69 67 3a 3a 67 65 74 49 6e 73 74   Config::getInst
1790: 61 6e 63 65 28 29 2d 3e 67 65 74 28 27 63 68 61  ance()->get('cha
17a0: 6d 70 5f 69 64 65 6e 74 69 74 65 27 29 3b 0a 0a  mp_identite');..
17b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $
17c0: 64 62 2d 3e 67 65 74 28 27 53 45 4c 45 43 54 20  db->get('SELECT 
17d0: 69 64 5f 6d 65 6d 62 72 65 2c 20 69 64 5f 63 6f  id_membre, id_co
17e0: 74 69 73 61 74 69 6f 6e 2c 20 6d 2e 27 2e 24 63  tisation, m.'.$c
17f0: 68 61 6d 70 5f 69 64 2e 27 20 41 53 20 69 64 65  hamp_id.' AS ide
1800: 6e 74 69 74 65 0a 20 20 20 20 20 20 20 20 20 20  ntite.          
1810: 20 20 46 52 4f 4d 20 6d 65 6d 62 72 65 73 5f 6f    FROM membres_o
1820: 70 65 72 61 74 69 6f 6e 73 20 41 53 20 6d 6f 20  perations AS mo 
1830: 49 4e 4e 45 52 20 4a 4f 49 4e 20 6d 65 6d 62 72  INNER JOIN membr
1840: 65 73 20 41 53 20 6d 20 4f 4e 20 6d 6f 2e 69 64  es AS m ON mo.id
1850: 5f 6d 65 6d 62 72 65 20 3d 20 6d 2e 69 64 0a 20  _membre = m.id. 
1860: 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45             WHERE
1870: 20 6d 6f 2e 69 64 5f 6f 70 65 72 61 74 69 6f 6e   mo.id_operation
1880: 20 3d 20 3f 3b 27 2c 20 28 69 6e 74 29 24 69 64   = ?;', (int)$id
1890: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  );.    }..    pr
18a0: 6f 74 65 63 74 65 64 20 66 75 6e 63 74 69 6f 6e  otected function
18b0: 20 5f 63 68 65 63 6b 46 69 65 6c 64 73 28 26 24   _checkFields(&$
18c0: 64 61 74 61 29 0a 20 20 20 20 7b 0a 20 20 20 20  data).    {.    
18d0: 20 20 20 20 24 64 62 20 3d 20 44 42 3a 3a 67 65      $db = DB::ge
18e0: 74 49 6e 73 74 61 6e 63 65 28 29 3b 0a 0a 20 20  tInstance();..  
18f0: 20 20 20 20 20 20 69 66 20 28 65 6d 70 74 79 28        if (empty(
1900: 24 64 61 74 61 5b 27 6c 69 62 65 6c 6c 65 27 5d  $data['libelle']
1910: 29 20 7c 7c 20 21 74 72 69 6d 28 24 64 61 74 61  ) || !trim($data
1920: 5b 27 6c 69 62 65 6c 6c 65 27 5d 29 29 0a 20 20  ['libelle'])).  
1930: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1940: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 55 73      throw new Us
1950: 65 72 45 78 63 65 70 74 69 6f 6e 28 27 4c 65 20  erException('Le 
1960: 6c 69 62 65 6c 6c c3 a9 20 6e 65 20 70 65 75 74  libell.. ne peut
1970: 20 72 65 73 74 65 72 20 76 69 64 65 2e 27 29 3b   rester vide.');
1980: 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
1990: 20 20 20 20 24 64 61 74 61 5b 27 6c 69 62 65 6c      $data['libel
19a0: 6c 65 27 5d 20 3d 20 74 72 69 6d 28 24 64 61 74  le'] = trim($dat
19b0: 61 5b 27 6c 69 62 65 6c 6c 65 27 5d 29 3b 0a 0a  a['libelle']);..
19c0: 20 20 20 20 20 20 20 20 69 66 20 28 21 65 6d 70          if (!emp
19d0: 74 79 28 24 64 61 74 61 5b 27 6d 6f 79 65 6e 5f  ty($data['moyen_
19e0: 70 61 69 65 6d 65 6e 74 27 5d 29 0a 20 20 20 20  paiement']).    
19f0: 20 20 20 20 20 20 20 20 26 26 20 21 24 64 62 2d          && !$db-
1a00: 3e 74 65 73 74 28 27 63 6f 6d 70 74 61 5f 6d 6f  >test('compta_mo
1a10: 79 65 6e 73 5f 70 61 69 65 6d 65 6e 74 27 2c 20  yens_paiement', 
1a20: 24 64 62 2d 3e 77 68 65 72 65 28 27 63 6f 64 65  $db->where('code
1a30: 27 2c 20 24 64 61 74 61 5b 27 6d 6f 79 65 6e 5f  ', $data['moyen_
1a40: 70 61 69 65 6d 65 6e 74 27 5d 29 29 29 0a 20 20  paiement']))).  
1a50: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1a60: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 55 73      throw new Us
1a70: 65 72 45 78 63 65 70 74 69 6f 6e 28 27 4d 6f 79  erException('Moy
1a80: 65 6e 20 64 65 20 70 61 69 65 6d 65 6e 74 20 69  en de paiement i
1a90: 6e 76 61 6c 69 64 65 2e 27 29 3b 0a 20 20 20 20  nvalide.');.    
1aa0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 69      }..        i
1ab0: 66 20 28 65 6d 70 74 79 28 24 64 61 74 61 5b 27  f (empty($data['
1ac0: 64 61 74 65 27 5d 29 20 7c 7c 20 21 55 74 69 6c  date']) || !Util
1ad0: 73 3a 3a 63 68 65 63 6b 44 61 74 65 28 24 64 61  s::checkDate($da
1ae0: 74 61 5b 27 64 61 74 65 27 5d 29 29 0a 20 20 20  ta['date'])).   
1af0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
1b00: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 55 73 65     throw new Use
1b10: 72 45 78 63 65 70 74 69 6f 6e 28 27 44 61 74 65  rException('Date
1b20: 20 76 69 64 65 20 6f 75 20 69 6e 76 61 6c 69 64   vide ou invalid
1b30: 65 2e 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  e.');.        }.
1b40: 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 64  .        if (!$d
1b50: 62 2d 3e 74 65 73 74 28 27 63 6f 6d 70 74 61 5f  b->test('compta_
1b60: 65 78 65 72 63 69 63 65 73 27 2c 20 27 63 6c 6f  exercices', 'clo
1b70: 74 75 72 65 20 3d 20 30 20 41 4e 44 20 64 65 62  ture = 0 AND deb
1b80: 75 74 20 3c 3d 20 3a 64 61 74 65 20 41 4e 44 20  ut <= :date AND 
1b90: 66 69 6e 20 3e 3d 20 3a 64 61 74 65 3b 27 2c 20  fin >= :date;', 
1ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 27 64  .            ['d
1bb0: 61 74 65 27 20 3d 3e 20 24 64 61 74 61 5b 27 64  ate' => $data['d
1bc0: 61 74 65 27 5d 5d 29 29 0a 20 20 20 20 20 20 20  ate']])).       
1bd0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74   {.            t
1be0: 68 72 6f 77 20 6e 65 77 20 55 73 65 72 45 78 63  hrow new UserExc
1bf0: 65 70 74 69 6f 6e 28 27 4c 61 20 64 61 74 65 20  eption('La date 
1c00: 6e 65 20 63 6f 72 72 65 73 70 6f 6e 64 20 70 61  ne correspond pa
1c10: 73 20 c3 a0 20 6c 5c 27 65 78 65 72 63 69 63 65  s .. l\'exercice
1c20: 20 65 6e 20 63 6f 75 72 73 2e 27 29 3b 0a 20 20   en cours.');.  
1c30: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
1c40: 20 69 66 20 28 65 6d 70 74 79 28 24 64 61 74 61   if (empty($data
1c50: 5b 27 6d 6f 79 65 6e 5f 70 61 69 65 6d 65 6e 74  ['moyen_paiement
1c60: 27 5d 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  '])).        {. 
1c70: 20 20 20 20 20 20 20 20 20 20 20 24 64 61 74 61             $data
1c80: 5b 27 6d 6f 79 65 6e 5f 70 61 69 65 6d 65 6e 74  ['moyen_paiement
1c90: 27 5d 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20  '] = null;.     
1ca0: 20 20 20 20 20 20 20 24 64 61 74 61 5b 27 6e 75         $data['nu
1cb0: 6d 65 72 6f 5f 63 68 65 71 75 65 27 5d 20 3d 20  mero_cheque'] = 
1cc0: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 7d 0a  null;.        }.
1cd0: 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20          else.   
1ce0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
1cf0: 20 20 20 24 64 61 74 61 5b 27 6d 6f 79 65 6e 5f     $data['moyen_
1d00: 70 61 69 65 6d 65 6e 74 27 5d 20 3d 20 73 74 72  paiement'] = str
1d10: 74 6f 75 70 70 65 72 28 24 64 61 74 61 5b 27 6d  toupper($data['m
1d20: 6f 79 65 6e 5f 70 61 69 65 6d 65 6e 74 27 5d 29  oyen_paiement'])
1d30: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ;..            i
1d40: 66 20 28 24 64 61 74 61 5b 27 6d 6f 79 65 6e 5f  f ($data['moyen_
1d50: 70 61 69 65 6d 65 6e 74 27 5d 20 21 3d 20 27 43  paiement'] != 'C
1d60: 48 27 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  H').            
1d70: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
1d80: 20 20 24 64 61 74 61 5b 27 6e 75 6d 65 72 6f 5f    $data['numero_
1d90: 63 68 65 71 75 65 27 5d 20 3d 20 6e 75 6c 6c 3b  cheque'] = null;
1da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a  .            }..
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1dc0: 21 24 64 62 2d 3e 74 65 73 74 28 27 63 6f 6d 70  !$db->test('comp
1dd0: 74 61 5f 6d 6f 79 65 6e 73 5f 70 61 69 65 6d 65  ta_moyens_paieme
1de0: 6e 74 27 2c 20 24 64 62 2d 3e 77 68 65 72 65 28  nt', $db->where(
1df0: 27 63 6f 64 65 27 2c 20 24 64 61 74 61 5b 27 6d  'code', $data['m
1e00: 6f 79 65 6e 5f 70 61 69 65 6d 65 6e 74 27 5d 29  oyen_paiement'])
1e10: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )).            {
1e20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e30: 20 74 68 72 6f 77 20 6e 65 77 20 55 73 65 72 45   throw new UserE
1e40: 78 63 65 70 74 69 6f 6e 28 27 4d 6f 79 65 6e 20  xception('Moyen 
1e50: 64 65 20 70 61 69 65 6d 65 6e 74 20 69 6e 76 61  de paiement inva
1e60: 6c 69 64 65 2e 27 29 3b 0a 20 20 20 20 20 20 20  lide.');.       
1e70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
1e80: 0a 0a 20 20 20 20 20 20 20 20 24 64 61 74 61 5b  ..        $data[
1e90: 27 6d 6f 6e 74 61 6e 74 27 5d 20 3d 20 73 74 72  'montant'] = str
1ea0: 5f 72 65 70 6c 61 63 65 28 27 2c 27 2c 20 27 2e  _replace(',', '.
1eb0: 27 2c 20 24 64 61 74 61 5b 27 6d 6f 6e 74 61 6e  ', $data['montan
1ec0: 74 27 5d 29 3b 0a 20 20 20 20 20 20 20 20 24 64  t']);.        $d
1ed0: 61 74 61 5b 27 6d 6f 6e 74 61 6e 74 27 5d 20 3d  ata['montant'] =
1ee0: 20 28 66 6c 6f 61 74 29 24 64 61 74 61 5b 27 6d   (float)$data['m
1ef0: 6f 6e 74 61 6e 74 27 5d 3b 0a 0a 20 20 20 20 20  ontant'];..     
1f00: 20 20 20 69 66 20 28 24 64 61 74 61 5b 27 6d 6f     if ($data['mo
1f10: 6e 74 61 6e 74 27 5d 20 3c 3d 20 30 29 0a 20 20  ntant'] <= 0).  
1f20: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1f30: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 55 73      throw new Us
1f40: 65 72 45 78 63 65 70 74 69 6f 6e 28 27 4c 65 20  erException('Le 
1f50: 6d 6f 6e 74 61 6e 74 20 6e 65 20 70 65 75 74 20  montant ne peut 
1f60: c3 aa 74 72 65 20 c3 a9 67 61 6c 20 6f 75 20 69  ..tre ..gal ou i
1f70: 6e 66 c3 a9 72 69 65 75 72 20 c3 a0 20 7a c3 a9  nf..rieur .. z..
1f80: 72 6f 2e 27 29 3b 0a 20 20 20 20 20 20 20 20 7d  ro.');.        }
1f90: 0a 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
1fa0: 68 20 28 5b 27 72 65 6d 61 72 71 75 65 73 27 2c  h (['remarques',
1fb0: 20 27 6e 75 6d 65 72 6f 5f 70 69 65 63 65 27 2c   'numero_piece',
1fc0: 20 27 6e 75 6d 65 72 6f 5f 63 68 65 71 75 65 27   'numero_cheque'
1fd0: 5d 20 61 73 20 24 63 68 61 6d 70 29 0a 20 20 20  ] as $champ).   
1fe0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
1ff0: 20 20 20 69 66 20 28 65 6d 70 74 79 28 24 64 61     if (empty($da
2000: 74 61 5b 24 63 68 61 6d 70 5d 29 20 7c 7c 20 21  ta[$champ]) || !
2010: 74 72 69 6d 28 24 64 61 74 61 5b 24 63 68 61 6d  trim($data[$cham
2020: 70 5d 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  p])).           
2030: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
2040: 20 20 20 24 64 61 74 61 5b 24 63 68 61 6d 70 5d     $data[$champ]
2050: 20 3d 20 27 27 3b 0a 20 20 20 20 20 20 20 20 20   = '';.         
2060: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
2070: 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20   else.          
2080: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
2090: 20 20 20 20 24 64 61 74 61 5b 24 63 68 61 6d 70      $data[$champ
20a0: 5d 20 3d 20 74 72 69 6d 28 24 64 61 74 61 5b 24  ] = trim($data[$
20b0: 63 68 61 6d 70 5d 29 3b 0a 20 20 20 20 20 20 20  champ]);.       
20c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
20d0: 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 61  ..        if (!a
20e0: 72 72 61 79 5f 6b 65 79 5f 65 78 69 73 74 73 28  rray_key_exists(
20f0: 27 63 6f 6d 70 74 65 5f 64 65 62 69 74 27 2c 20  'compte_debit', 
2100: 24 64 61 74 61 29 20 7c 7c 20 0a 20 20 20 20 20  $data) || .     
2110: 20 20 20 20 20 20 20 28 21 69 73 5f 6e 75 6c 6c         (!is_null
2120: 28 24 64 61 74 61 5b 27 63 6f 6d 70 74 65 5f 64  ($data['compte_d
2130: 65 62 69 74 27 5d 29 20 26 26 20 0a 20 20 20 20  ebit']) && .    
2140: 20 20 20 20 20 20 20 20 20 20 20 20 21 24 64 62              !$db
2150: 2d 3e 74 65 73 74 28 27 63 6f 6d 70 74 61 5f 63  ->test('compta_c
2160: 6f 6d 70 74 65 73 27 2c 20 24 64 62 2d 3e 77 68  omptes', $db->wh
2170: 65 72 65 28 27 69 64 27 2c 20 24 64 61 74 61 5b  ere('id', $data[
2180: 27 63 6f 6d 70 74 65 5f 64 65 62 69 74 27 5d 29  'compte_debit'])
2190: 29 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  ))).        {.  
21a0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
21b0: 6e 65 77 20 55 73 65 72 45 78 63 65 70 74 69 6f  new UserExceptio
21c0: 6e 28 27 43 6f 6d 70 74 65 20 64 c3 a9 62 69 74  n('Compte d..bit
21d0: c3 a9 20 69 6e 63 6f 6e 6e 75 2e 27 29 3b 0a 20  .. inconnu.');. 
21e0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
21f0: 20 20 69 66 20 28 21 61 72 72 61 79 5f 6b 65 79    if (!array_key
2200: 5f 65 78 69 73 74 73 28 27 63 6f 6d 70 74 65 5f  _exists('compte_
2210: 63 72 65 64 69 74 27 2c 20 24 64 61 74 61 29 20  credit', $data) 
2220: 7c 7c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  || .            
2230: 28 21 69 73 5f 6e 75 6c 6c 28 24 64 61 74 61 5b  (!is_null($data[
2240: 27 63 6f 6d 70 74 65 5f 63 72 65 64 69 74 27 5d  'compte_credit']
2250: 29 20 26 26 20 0a 20 20 20 20 20 20 20 20 20 20  ) && .          
2260: 20 20 20 20 20 20 21 24 64 62 2d 3e 74 65 73 74        !$db->test
2270: 28 27 63 6f 6d 70 74 61 5f 63 6f 6d 70 74 65 73  ('compta_comptes
2280: 27 2c 20 24 64 62 2d 3e 77 68 65 72 65 28 27 69  ', $db->where('i
2290: 64 27 2c 20 24 64 61 74 61 5b 27 63 6f 6d 70 74  d', $data['compt
22a0: 65 5f 63 72 65 64 69 74 27 5d 29 29 29 29 0a 20  e_credit'])))). 
22b0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
22c0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 55       throw new U
22d0: 73 65 72 45 78 63 65 70 74 69 6f 6e 28 27 43 6f  serException('Co
22e0: 6d 70 74 65 20 63 72 c3 a9 64 69 74 c3 a9 20 69  mpte cr..dit.. i
22f0: 6e 63 6f 6e 6e 75 2e 27 29 3b 0a 20 20 20 20 20  nconnu.');.     
2300: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 24 64     }..        $d
2310: 61 74 61 5b 27 63 6f 6d 70 74 65 5f 63 72 65 64  ata['compte_cred
2320: 69 74 27 5d 20 3d 20 69 73 5f 6e 75 6c 6c 28 24  it'] = is_null($
2330: 64 61 74 61 5b 27 63 6f 6d 70 74 65 5f 63 72 65  data['compte_cre
2340: 64 69 74 27 5d 29 20 3f 20 6e 75 6c 6c 20 3a 20  dit']) ? null : 
2350: 73 74 72 74 6f 75 70 70 65 72 28 74 72 69 6d 28  strtoupper(trim(
2360: 24 64 61 74 61 5b 27 63 6f 6d 70 74 65 5f 63 72  $data['compte_cr
2370: 65 64 69 74 27 5d 29 29 3b 0a 20 20 20 20 20 20  edit']));.      
2380: 20 20 24 64 61 74 61 5b 27 63 6f 6d 70 74 65 5f    $data['compte_
2390: 64 65 62 69 74 27 5d 20 3d 20 69 73 5f 6e 75 6c  debit'] = is_nul
23a0: 6c 28 24 64 61 74 61 5b 27 63 6f 6d 70 74 65 5f  l($data['compte_
23b0: 64 65 62 69 74 27 5d 29 20 3f 20 6e 75 6c 6c 20  debit']) ? null 
23c0: 3a 20 73 74 72 74 6f 75 70 70 65 72 28 74 72 69  : strtoupper(tri
23d0: 6d 28 24 64 61 74 61 5b 27 63 6f 6d 70 74 65 5f  m($data['compte_
23e0: 64 65 62 69 74 27 5d 29 29 3b 0a 0a 20 20 20 20  debit']));..    
23f0: 20 20 20 20 69 66 20 28 24 64 61 74 61 5b 27 63      if ($data['c
2400: 6f 6d 70 74 65 5f 63 72 65 64 69 74 27 5d 20 3d  ompte_credit'] =
2410: 3d 20 24 64 61 74 61 5b 27 63 6f 6d 70 74 65 5f  = $data['compte_
2420: 64 65 62 69 74 27 5d 29 0a 20 20 20 20 20 20 20  debit']).       
2430: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74   {.            t
2440: 68 72 6f 77 20 6e 65 77 20 55 73 65 72 45 78 63  hrow new UserExc
2450: 65 70 74 69 6f 6e 28 27 43 6f 6d 70 74 65 20 63  eption('Compte c
2460: 72 c3 a9 64 69 74 c3 a9 20 69 64 65 6e 74 69 71  r..dit.. identiq
2470: 75 65 20 61 75 20 63 6f 6d 70 74 65 20 64 c3 a9  ue au compte d..
2480: 62 69 74 c3 a9 2e 27 29 3b 0a 20 20 20 20 20 20  bit...');.      
2490: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20    }..        if 
24a0: 28 69 73 73 65 74 28 24 64 61 74 61 5b 27 69 64  (isset($data['id
24b0: 5f 63 61 74 65 67 6f 72 69 65 27 5d 29 29 0a 20  _categorie'])). 
24c0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
24d0: 20 20 20 20 20 69 66 20 28 21 24 64 62 2d 3e 74       if (!$db->t
24e0: 65 73 74 28 27 63 6f 6d 70 74 61 5f 63 61 74 65  est('compta_cate
24f0: 67 6f 72 69 65 73 27 2c 20 24 64 62 2d 3e 77 68  gories', $db->wh
2500: 65 72 65 28 27 69 64 27 2c 20 28 69 6e 74 29 24  ere('id', (int)$
2510: 64 61 74 61 5b 27 69 64 5f 63 61 74 65 67 6f 72  data['id_categor
2520: 69 65 27 5d 29 29 29 0a 20 20 20 20 20 20 20 20  ie']))).        
2530: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
2540: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
2550: 55 73 65 72 45 78 63 65 70 74 69 6f 6e 28 27 43  UserException('C
2560: 61 74 c3 a9 67 6f 72 69 65 20 69 6e 63 6f 6e 6e  at..gorie inconn
2570: 75 65 2e 27 29 3b 0a 20 20 20 20 20 20 20 20 20  ue.');.         
2580: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20     }..          
2590: 20 20 24 64 61 74 61 5b 27 69 64 5f 63 61 74 65    $data['id_cate
25a0: 67 6f 72 69 65 27 5d 20 3d 20 28 69 6e 74 29 24  gorie'] = (int)$
25b0: 64 61 74 61 5b 27 69 64 5f 63 61 74 65 67 6f 72  data['id_categor
25c0: 69 65 27 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ie'];.        }.
25d0: 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20          else.   
25e0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
25f0: 20 20 20 24 64 61 74 61 5b 27 69 64 5f 63 61 74     $data['id_cat
2600: 65 67 6f 72 69 65 27 5d 20 3d 20 4e 55 4c 4c 3b  egorie'] = NULL;
2610: 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
2620: 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 64      if (isset($d
2630: 61 74 61 5b 27 69 64 5f 61 75 74 65 75 72 27 5d  ata['id_auteur']
2640: 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  )).        {.   
2650: 20 20 20 20 20 20 20 20 20 24 64 61 74 61 5b 27           $data['
2660: 69 64 5f 61 75 74 65 75 72 27 5d 20 3d 20 28 69  id_auteur'] = (i
2670: 6e 74 29 24 64 61 74 61 5b 27 69 64 5f 61 75 74  nt)$data['id_aut
2680: 65 75 72 27 5d 3b 0a 20 20 20 20 20 20 20 20 7d  eur'];.        }
2690: 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 65 6d  ..        if (em
26a0: 70 74 79 28 24 64 61 74 61 5b 27 69 64 5f 70 72  pty($data['id_pr
26b0: 6f 6a 65 74 27 5d 29 29 0a 20 20 20 20 20 20 20  ojet'])).       
26c0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24   {.            $
26d0: 64 61 74 61 5b 27 69 64 5f 70 72 6f 6a 65 74 27  data['id_projet'
26e0: 5d 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  ] = null;.      
26f0: 20 20 7d 0a 20 20 20 20 20 20 20 20 65 6c 73 65    }.        else
2700: 69 66 20 28 69 73 73 65 74 28 24 64 61 74 61 5b  if (isset($data[
2710: 27 69 64 5f 70 72 6f 6a 65 74 27 5d 29 29 0a 20  'id_projet'])). 
2720: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
2730: 20 20 20 20 20 24 64 61 74 61 5b 27 69 64 5f 70       $data['id_p
2740: 72 6f 6a 65 74 27 5d 20 3d 20 28 69 6e 74 29 24  rojet'] = (int)$
2750: 64 61 74 61 5b 27 69 64 5f 70 72 6f 6a 65 74 27  data['id_projet'
2760: 5d 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
2770: 69 66 20 28 21 24 64 62 2d 3e 74 65 73 74 28 27  if (!$db->test('
2780: 63 6f 6d 70 74 61 5f 70 72 6f 6a 65 74 73 27 2c  compta_projets',
2790: 20 24 64 62 2d 3e 77 68 65 72 65 28 27 69 64 27   $db->where('id'
27a0: 2c 20 24 64 61 74 61 5b 27 69 64 5f 70 72 6f 6a  , $data['id_proj
27b0: 65 74 27 5d 29 29 29 0a 20 20 20 20 20 20 20 20  et']))).        
27c0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
27d0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
27e0: 55 73 65 72 45 78 63 65 70 74 69 6f 6e 28 27 50  UserException('P
27f0: 72 6f 6a 65 74 20 69 6e 63 6f 6e 6e 75 2e 27 29  rojet inconnu.')
2800: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
2810: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
2820: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a     return true;.
2830: 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69      }..    publi
2840: 63 20 66 75 6e 63 74 69 6f 6e 20 67 65 74 4c 69  c function getLi
2850: 73 74 46 6f 72 43 61 74 65 67 6f 72 79 28 24 74  stForCategory($t
2860: 79 70 65 20 3d 20 6e 75 6c 6c 2c 20 24 63 61 74  ype = null, $cat
2870: 20 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 7b 0a 20   = null).    {. 
2880: 20 20 20 20 20 20 20 24 64 62 20 3d 20 44 42 3a         $db = DB:
2890: 3a 67 65 74 49 6e 73 74 61 6e 63 65 28 29 3b 0a  :getInstance();.
28a0: 20 20 20 20 20 20 20 20 24 65 78 65 72 63 69 63          $exercic
28b0: 65 20 3d 20 24 74 68 69 73 2d 3e 5f 67 65 74 43  e = $this->_getC
28c0: 75 72 72 65 6e 74 45 78 65 72 63 69 63 65 28 29  urrentExercice()
28d0: 3b 0a 0a 20 20 20 20 20 20 20 20 24 71 75 65 72  ;..        $quer
28e0: 79 20 3d 20 27 53 45 4c 45 43 54 20 63 6f 6d 70  y = 'SELECT comp
28f0: 74 61 5f 6a 6f 75 72 6e 61 6c 2e 2a 2c 20 73 74  ta_journal.*, st
2900: 72 66 74 69 6d 65 28 5c 27 25 73 5c 27 2c 20 63  rftime(\'%s\', c
2910: 6f 6d 70 74 61 5f 6a 6f 75 72 6e 61 6c 2e 64 61  ompta_journal.da
2920: 74 65 29 20 41 53 20 64 61 74 65 20 27 3b 0a 0a  te) AS date ';..
2930: 20 20 20 20 20 20 20 20 69 66 20 28 69 73 5f 6e          if (is_n
2940: 75 6c 6c 28 24 63 61 74 29 20 26 26 20 21 69 73  ull($cat) && !is
2950: 5f 6e 75 6c 6c 28 24 74 79 70 65 29 29 0a 20 20  _null($type)).  
2960: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
2970: 20 20 20 20 24 71 75 65 72 79 2e 3d 20 27 2c 20      $query.= ', 
2980: 63 6f 6d 70 74 61 5f 63 61 74 65 67 6f 72 69 65  compta_categorie
2990: 73 2e 69 6e 74 69 74 75 6c 65 20 41 53 20 63 61  s.intitule AS ca
29a0: 74 65 67 6f 72 69 65 0a 20 20 20 20 20 20 20 20  tegorie.        
29b0: 20 20 20 20 20 20 20 20 46 52 4f 4d 20 63 6f 6d          FROM com
29c0: 70 74 61 5f 6a 6f 75 72 6e 61 6c 20 4c 45 46 54  pta_journal LEFT
29d0: 20 4a 4f 49 4e 20 63 6f 6d 70 74 61 5f 63 61 74   JOIN compta_cat
29e0: 65 67 6f 72 69 65 73 0a 20 20 20 20 20 20 20 20  egories.        
29f0: 20 20 20 20 20 20 20 20 4f 4e 20 63 6f 6d 70 74          ON compt
2a00: 61 5f 6a 6f 75 72 6e 61 6c 2e 69 64 5f 63 61 74  a_journal.id_cat
2a10: 65 67 6f 72 69 65 20 3d 20 63 6f 6d 70 74 61 5f  egorie = compta_
2a20: 63 61 74 65 67 6f 72 69 65 73 2e 69 64 20 27 3b  categories.id ';
2a30: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2a40: 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20     else.        
2a50: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 71  {.            $q
2a60: 75 65 72 79 2e 3d 20 27 20 46 52 4f 4d 20 63 6f  uery.= ' FROM co
2a70: 6d 70 74 61 5f 6a 6f 75 72 6e 61 6c 20 27 3b 0a  mpta_journal ';.
2a80: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
2a90: 20 20 20 24 71 75 65 72 79 20 2e 3d 20 27 20 57     $query .= ' W
2aa0: 48 45 52 45 20 27 3b 0a 0a 20 20 20 20 20 20 20  HERE ';..       
2ab0: 20 69 66 20 28 21 69 73 5f 6e 75 6c 6c 28 24 63   if (!is_null($c
2ac0: 61 74 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  at)).        {. 
2ad0: 20 20 20 20 20 20 20 20 20 20 20 24 71 75 65 72             $quer
2ae0: 79 20 2e 3d 20 27 69 64 5f 63 61 74 65 67 6f 72  y .= 'id_categor
2af0: 69 65 20 3d 20 27 20 2e 20 28 69 6e 74 29 24 63  ie = ' . (int)$c
2b00: 61 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  at;.        }.  
2b10: 20 20 20 20 20 20 65 6c 73 65 69 66 20 28 69 73        elseif (is
2b20: 5f 6e 75 6c 6c 28 24 74 79 70 65 29 20 26 26 20  _null($type) && 
2b30: 69 73 5f 6e 75 6c 6c 28 24 63 61 74 29 29 0a 20  is_null($cat)). 
2b40: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
2b50: 20 20 20 20 20 24 71 75 65 72 79 20 2e 3d 20 27       $query .= '
2b60: 69 64 5f 63 61 74 65 67 6f 72 69 65 20 49 53 20  id_categorie IS 
2b70: 4e 55 4c 4c 27 3b 0a 20 20 20 20 20 20 20 20 7d  NULL';.        }
2b80: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20  .        else.  
2b90: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
2ba0: 20 20 20 20 24 71 75 65 72 79 2e 3d 20 27 69 64      $query.= 'id
2bb0: 5f 63 61 74 65 67 6f 72 69 65 20 49 4e 20 28 53  _categorie IN (S
2bc0: 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 63 6f  ELECT id FROM co
2bd0: 6d 70 74 61 5f 63 61 74 65 67 6f 72 69 65 73 20  mpta_categories 
2be0: 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 2e 28  WHERE type = '.(
2bf0: 69 6e 74 29 24 74 79 70 65 2e 27 29 27 3b 0a 20  int)$type.')';. 
2c00: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
2c10: 20 20 24 71 75 65 72 79 20 2e 3d 20 27 20 41 4e    $query .= ' AN
2c20: 44 20 69 64 5f 65 78 65 72 63 69 63 65 20 3d 20  D id_exercice = 
2c30: 27 20 2e 20 28 69 6e 74 29 24 65 78 65 72 63 69  ' . (int)$exerci
2c40: 63 65 3b 0a 20 20 20 20 20 20 20 20 24 71 75 65  ce;.        $que
2c50: 72 79 20 2e 3d 20 27 20 4f 52 44 45 52 20 42 59  ry .= ' ORDER BY
2c60: 20 64 61 74 65 3b 27 3b 0a 0a 20 20 20 20 20 20   date;';..      
2c70: 20 20 72 65 74 75 72 6e 20 24 64 62 2d 3e 67 65    return $db->ge
2c80: 74 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 7d  t($query);.    }
2c90: 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 66 75 6e  ..    public fun
2ca0: 63 74 69 6f 6e 20 73 65 61 72 63 68 53 51 4c 28  ction searchSQL(
2cb0: 24 71 75 65 72 79 29 0a 20 20 20 20 7b 0a 20 20  $query).    {.  
2cc0: 20 20 20 20 20 20 24 64 62 20 3d 20 44 42 3a 3a        $db = DB::
2cd0: 67 65 74 49 6e 73 74 61 6e 63 65 28 29 3b 0a 0a  getInstance();..
2ce0: 20 20 20 20 20 20 20 20 69 66 20 28 21 70 72 65          if (!pre
2cf0: 67 5f 6d 61 74 63 68 28 27 2f 4c 49 4d 49 54 5c  g_match('/LIMIT\
2d00: 73 2b 2f 69 27 2c 20 24 71 75 65 72 79 29 29 0a  s+/i', $query)).
2d10: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
2d20: 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 70        $query = p
2d30: 72 65 67 5f 72 65 70 6c 61 63 65 28 27 2f 3b 3f  reg_replace('/;?
2d40: 5c 73 2a 24 2f 27 2c 20 27 27 2c 20 24 71 75 65  \s*$/', '', $que
2d50: 72 79 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ry);.           
2d60: 20 24 71 75 65 72 79 20 2e 3d 20 27 20 4c 49 4d   $query .= ' LIM
2d70: 49 54 20 31 30 30 27 3b 0a 20 20 20 20 20 20 20  IT 100';.       
2d80: 20 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28   }..        if (
2d90: 70 72 65 67 5f 6d 61 74 63 68 28 27 2f 3b 5c 73  preg_match('/;\s
2da0: 2a 28 2e 2b 3f 29 24 2f 27 2c 20 24 71 75 65 72  *(.+?)$/', $quer
2db0: 79 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  y)).        {.  
2dc0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
2dd0: 6e 65 77 20 55 73 65 72 45 78 63 65 70 74 69 6f  new UserExceptio
2de0: 6e 28 27 55 6e 65 20 73 65 75 6c 65 20 72 65 71  n('Une seule req
2df0: 75 c3 aa 74 65 20 70 65 75 74 20 c3 aa 74 72 65  u..te peut ..tre
2e00: 20 65 6e 76 6f 79 c3 a9 65 20 65 6e 20 6d c3 aa   envoy..e en m..
2e10: 6d 65 20 74 65 6d 70 73 2e 27 29 3b 0a 20 20 20  me temps.');.   
2e20: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
2e30: 24 73 74 20 3d 20 24 64 62 2d 3e 70 72 65 70 61  $st = $db->prepa
2e40: 72 65 28 24 71 75 65 72 79 29 3b 0a 0a 20 20 20  re($query);..   
2e50: 20 20 20 20 20 69 66 20 28 21 24 73 74 2d 3e 72       if (!$st->r
2e60: 65 61 64 4f 6e 6c 79 28 29 29 0a 20 20 20 20 20  eadOnly()).     
2e70: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
2e80: 20 74 68 72 6f 77 20 6e 65 77 20 55 73 65 72 45   throw new UserE
2e90: 78 63 65 70 74 69 6f 6e 28 27 53 65 75 6c 65 73  xception('Seules
2ea0: 20 6c 65 73 20 72 65 71 75 c3 aa 74 65 73 20 65   les requ..tes e
2eb0: 6e 20 6c 65 63 74 75 72 65 20 73 6f 6e 74 20 61  n lecture sont a
2ec0: 75 74 6f 72 69 73 c3 a9 65 73 2e 27 29 3b 0a 20  utoris..es.');. 
2ed0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
2ee0: 20 20 24 72 65 73 20 3d 20 24 73 74 2d 3e 65 78    $res = $st->ex
2ef0: 65 63 75 74 65 28 29 3b 0a 20 20 20 20 20 20 20  ecute();.       
2f00: 20 24 6f 75 74 20 3d 20 5b 5d 3b 0a 0a 20 20 20   $out = [];..   
2f10: 20 20 20 20 20 77 68 69 6c 65 20 28 24 72 6f 77       while ($row
2f20: 20 3d 20 24 72 65 73 2d 3e 66 65 74 63 68 41 72   = $res->fetchAr
2f30: 72 61 79 28 53 51 4c 49 54 45 33 5f 41 53 53 4f  ray(SQLITE3_ASSO
2f40: 43 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  C)).        {.  
2f50: 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 5b 5d            $out[]
2f60: 20 3d 20 24 72 6f 77 3b 0a 20 20 20 20 20 20 20   = $row;.       
2f70: 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75   }..        retu
2f80: 72 6e 20 24 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a  rn $out;.    }..
2f90: 20 20 20 20 70 75 62 6c 69 63 20 66 75 6e 63 74      public funct
2fa0: 69 6f 6e 20 73 63 68 65 6d 61 53 51 4c 28 29 0a  ion schemaSQL().
2fb0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 64      {.        $d
2fc0: 62 20 3d 20 44 42 3a 3a 67 65 74 49 6e 73 74 61  b = DB::getInsta
2fd0: 6e 63 65 28 29 3b 0a 0a 20 20 20 20 20 20 20 20  nce();..        
2fe0: 24 74 61 62 6c 65 73 20 3d 20 5b 0a 20 20 20 20  $tables = [.    
2ff0: 20 20 20 20 20 20 20 20 27 6a 6f 75 72 6e 61 6c          'journal
3000: 27 20 20 20 3d 3e 20 20 24 64 62 2d 3e 66 69 72  '   =>  $db->fir
3010: 73 74 43 6f 6c 75 6d 6e 28 27 53 45 4c 45 43 54  stColumn('SELECT
3020: 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
3030: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
3040: 70 65 20 3d 20 5c 27 74 61 62 6c 65 5c 27 20 41  pe = \'table\' A
3050: 4e 44 20 6e 61 6d 65 20 3d 20 5c 27 63 6f 6d 70  ND name = \'comp
3060: 74 61 5f 6a 6f 75 72 6e 61 6c 5c 27 3b 27 29 2c  ta_journal\';'),
3070: 0a 20 20 20 20 20 20 20 20 5d 3b 0a 0a 20 20 20  .        ];..   
3080: 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 61 62       return $tab
3090: 6c 65 73 3b 0a 20 20 20 20 7d 0a 7d 0a           les;.    }.}.