[ Index ]
 

Code source de Dolibarr 2.0.1

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/htdocs/telephonie/script/ -> commission.php (source)

   1  <?PHP
   2  /* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
   3   *
   4   * This program is free software; you can redistribute it and/or modify
   5   * it under the terms of the GNU General Public License as published by
   6   * the Free Software Foundation; either version 2 of the License, or
   7   * (at your option) any later version.
   8   *
   9   * This program is distributed in the hope that it will be useful,
  10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12   * GNU General Public License for more details.
  13   *
  14   * You should have received a copy of the GNU General Public License
  15   * along with this program; if not, write to the Free Software
  16   * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17   *
  18   * $Id: commission.php,v 1.14 2005/11/16 12:13:16 rodolphe Exp $
  19   * $Source: /cvsroot/dolibarr/dolibarr/htdocs/telephonie/script/commission.php,v $
  20   *
  21   * Calcul des commissions des distributeurs
  22   */
  23  
  24  require  ("../../master.inc.php");
  25  require_once (DOL_DOCUMENT_ROOT."/telephonie/distributeurtel.class.php");
  26  
  27  $error = 0;
  28  $nbcommit = 0;
  29  $datetime = time();
  30  $space = str_repeat(" ",28);
  31  $user = new User($db, 1);
  32  $user->login = "Rodo";
  33  
  34  $opt = getopt("m:");
  35  
  36  if ($opt['m'] > 0)
  37  {
  38    $datetime = mktime(10,10,10,$opt['m'],10,2005);
  39  }
  40  
  41  $date = strftime("%d%h%Y%Hh%Mm%S",$datetime);
  42  
  43  /*
  44   * On facture les communications du mois précédent
  45   */
  46  
  47  $month = strftime("%m", $datetime);
  48  $year = strftime("%Y", $datetime);
  49  
  50  if ($month == 1)
  51  {
  52    $month_prev = "12";
  53    $year_prev = $year - 1;
  54  }
  55  else
  56  {
  57    $month_prev = $month - 1;
  58    $year_prev = $year ;
  59  }
  60  
  61  $month_prev = substr("00".$month_prev, -2) ;
  62  
  63  
  64  $dir = DOL_DATA_ROOT.'/telephonie/log/';
  65  if (!file_exists($dir))
  66    create_dir($dir);
  67  
  68  $dir = DOL_DATA_ROOT.'/telephonie/log/commission/';
  69  if (!file_exists($dir))
  70    create_dir($dir);
  71  
  72  function create_dir($dir)
  73  {
  74    if (! file_exists($dir))
  75      {
  76        umask(0);
  77        if (! @mkdir($dir, 0755))
  78      {
  79        die ("Erreur: Le répertoire ".$dir." n'existe pas et Dolibarr n'a pu le créer.");
  80      }
  81      }
  82  }
  83  
  84  if (! $db->begin()) die ;
  85  
  86  $fp = fopen($dir."/$month.$year.log","w+");
  87  fputs($fp,"Commissions $month/$year\n");
  88  /********************************************************
  89   *
  90   * Verification des données
  91   *
  92   *
  93   *********************************************************/
  94  
  95  $distributeurs = array();
  96  
  97  $sql = "SELECT distinct fk_distributeur";
  98  $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_contrat_priseordre";
  99  $sql .= " WHERE fk_distributeur <> 0";
 100    
 101  $resql = $db->query($sql);
 102    
 103  if ( $resql )
 104  {
 105    while ($row = $db->fetch_row($resql))
 106      {
 107        array_push($distributeurs, $row[0]);
 108      }
 109    $db->free($resql);
 110  }
 111  else
 112  {
 113    $error = 1;
 114    dolibarr_syslog("Verification Erreur ".$error);
 115  }
 116  
 117  /********************************************************
 118   *
 119   * Calcul des avances
 120   *
 121   *
 122   ********************************************************/
 123  dolibarr_syslog("Calcul avance");
 124  $sql = "SELECT rowid, fk_distributeur, fk_contrat, datepo, montant";
 125  $sql .= " , avance_pourcent, rem_pour_prev, rem_pour_autr, mode_paiement";
 126  $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_contrat_priseordre";
 127  $sql .= " WHERE date_format(datepo, '%Y%m') = '".$year_prev.$month_prev."'";
 128  $sql .= " AND fk_distributeur > 0";
 129  
 130  $resql = $db->query($sql);
 131  
 132  if ( $resql )
 133  {
 134    $num = $db->num_rows($resql);
 135    $i = 0;
 136    
 137    while ($i < $num)
 138      {
 139        $obj = $db->fetch_object($resql);
 140        
 141        if ($obj->mode_paiement == 'pre')
 142      {
 143        $pourcent = $obj->rem_pour_prev;
 144      }
 145        else
 146      {
 147        $pourcent = $obj->rem_pour_autr;
 148      }
 149        $avance_pourcent = $obj->avance_pourcent;
 150        
 151        $avance = $obj->montant * 12 * $avance_pourcent * $pourcent;
 152        
 153        $avance = round($avance  * 0.0001, 2);
 154  
 155        fputs($fp, "DIS : ".$obj->fk_distributeur);
 156        fputs($fp, " av avance po ".substr($space.$obj->rowid,-4));
 157        fputs($fp, " : ".substr($space.$avance,-8)."\n");
 158  
 159        $sqli = "INSERT INTO ".MAIN_DB_PREFIX."telephonie_commission_avance";
 160        $sqli .= " (date, fk_distributeur, fk_po,fk_contrat, montant, pourcentage, avance)";
 161        $sqli .= " VALUES ('".$year_prev.$month_prev."'";
 162        $sqli .= ",".$obj->fk_distributeur.",".$obj->rowid.",".$obj->fk_contrat;
 163        $sqli .= ",".ereg_replace(",",".",$avance);
 164        $sqli .= ",".ereg_replace(",",".",$pourcent);
 165        $sqli .= ",1)";
 166        
 167        if (! $db->query($sqli))
 168      {
 169        $error = 2;
 170        dolibarr_syslog("Calcul avance Erreur ".$db->error());
 171      }
 172        
 173        $i++;
 174      }
 175    $db->free($resql);
 176  }
 177  else
 178  {
 179    $error = 3;
 180    dolibarr_syslog("Erreur ".$db->error());
 181  }
 182   
 183  
 184  /********************************************************
 185   *
 186   * Calculs des commissions basées sur les consommations
 187   *
 188   *
 189   *********************************************************/
 190  
 191  $sql = "SELECT p.rowid,  p.fk_contrat,  p.fk_distributeur";
 192  $sql .= " , p.avance_pourcent, p.rem_pour_prev, p.rem_pour_autr";
 193  $sql .= " , p.avance_duree";
 194  $sql .= " , date_format(p.datepo + INTERVAL p.avance_duree MONTH, '%Y%m') as date_regul";
 195  $sql .= " , f.cout_vente,l.rowid as ligne";
 196  $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_contrat_priseordre as p";
 197  $sql .= " , ".MAIN_DB_PREFIX."telephonie_contrat as c";
 198  $sql .= " , ".MAIN_DB_PREFIX."telephonie_societe_ligne as l";
 199  $sql .= " , ".MAIN_DB_PREFIX."telephonie_facture as f";
 200  
 201  $sql .= " WHERE p.fk_contrat = c.rowid";
 202  $sql .= " AND l.fk_contrat = c.rowid";
 203  $sql .= " AND f.fk_ligne = l.rowid";
 204  $sql .= " AND date_format(f.date, '%Y%m') = '".$year_prev.$month_prev."'";
 205  $sql .= " AND date_format(p.datepo, '%Y%m') <= '".$year_prev.$month_prev."'";
 206  $sql .= " AND fk_distributeur > 0";
 207  
 208  $resql = $db->query($sql);
 209  //print $sql;
 210  if ( $resql )
 211  {
 212    $num = $db->num_rows($resql);
 213    $i = 0;
 214    
 215    while ($i < $num)
 216      {
 217        $obj = $db->fetch_object($resql);
 218    
 219        if ($obj->mode_paiement == 'pre')
 220      {
 221        $pourcent = $obj->rem_pour_prev;
 222      }
 223        else
 224      {
 225        $pourcent = $obj->rem_pour_autr;
 226      }
 227  
 228        $comm = round($obj->cout_vente * $pourcent * 0.01, 2) ;
 229       
 230        $sqli = "INSERT INTO ".MAIN_DB_PREFIX."telephonie_commission_conso";
 231        $sqli .= " (date, fk_distributeur, fk_contrat, fk_ligne, montant, pourcentage, avance)";
 232        $sqli .= " VALUES ('".$year_prev.$month_prev."'";
 233        $sqli .= ",".$obj->fk_distributeur.",".$obj->fk_contrat.",".$obj->ligne;
 234        $sqli .= ",".ereg_replace(",",".",$comm);
 235        $sqli .= ",".ereg_replace(",",".",$pourcent);
 236  
 237        if ($obj->date_regul < $year_prev.$month_prev)
 238      {
 239        $sqli .= ",0)";
 240        $avan = 0;
 241      }
 242        else
 243      {
 244        $sqli .= ",1)";
 245        $avan = 1;
 246      }
 247  
 248        fputs($fp, "DIS : ".$obj->fk_distributeur);
 249        fputs($fp, " CON : ".$obj->fk_contrat);
 250        fputs($fp, " conso  : $comm avance $avan\n");
 251        
 252        if (! $db->query($sqli))
 253      {
 254        $error = 4;
 255        dolibarr_syslog("Calcul conso Erreur ".$db->error());
 256      }
 257  
 258        //dolibarr_syslog("Conso po : ".$obj->rowid . " ".$comm);
 259                
 260        $i++;
 261      }
 262    $db->free($resql);
 263  }
 264  else
 265  {
 266    $error = 5;
 267    dolibarr_syslog("Erreur ".$db->error());
 268  }
 269  
 270  /********************************************************
 271   *
 272   * Régulation sur contrats annulés
 273   *
 274   *
 275   *********************************************************/
 276  
 277  
 278  /********************************************************
 279   *
 280   * Régulation des avances
 281   *
 282   *
 283   *********************************************************/
 284  $distri_av = array();
 285  
 286  $sql = "SELECT distinct fk_distributeur";
 287  $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_commission_avance";
 288  $sql .= " WHERE fk_distributeur <> 0";
 289    
 290  $resql = $db->query($sql);
 291    
 292  if ( $resql )
 293  {
 294    while ($row = $db->fetch_row($resql))
 295      {
 296        array_push($distri_av, $row[0]);
 297      }
 298    $db->free($resql);
 299  }
 300  else
 301  {
 302    $error = 6;
 303    dolibarr_syslog("Erreur regul avances ".$error);
 304  }
 305  
 306  $avan_regul = array();
 307  $comm_regul = array();
 308  
 309  foreach ($distri_av as $distributeur_id)
 310  {
 311    $avan_regul[$distributeur_id] = 0;
 312    $comm_regul[$distributeur_id] = 0;
 313  
 314    $sqla = "SELECT rowid, ".$db->pdate("datepo").", avance_duree";
 315    $sqla .= " FROM ".MAIN_DB_PREFIX."telephonie_contrat_priseordre";
 316    $sqla .= " WHERE fk_distributeur = ".$distributeur_id;
 317    $sqla .= " AND date_format(datepo + INTERVAL avance_duree MONTH, '%Y%m')='".$year_prev.$month_prev."';";
 318  
 319    $resqla = $db->query($sqla);
 320    
 321    if ( $resqla )
 322      {
 323        $numa = $db->num_rows($resqla);
 324        $ia = 0;
 325        
 326        while ($ia < $numa)
 327      {
 328        $rowa = $db->fetch_row($resqla);
 329         dolibarr_syslog("* Regul des avances de la po " .$rowa[0] . " ".strftime("%Y%m",$rowa[1]));
 330        $ia++;
 331  
 332        /* Calcul des sommes avancées */
 333        $sql = "SELECT a.montant, a.fk_contrat, c.statut";
 334        $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_commission_avance as a";
 335        $sql .= " , ".MAIN_DB_PREFIX."telephonie_contrat as c";
 336        $sql .= " WHERE a.fk_distributeur = ".$distributeur_id;
 337        $sql .= " AND c.rowid = a.fk_contrat";
 338        $sql .= " AND a.fk_po = ".$rowa[0];
 339        
 340        $resql = $db->query($sql);
 341        
 342        if ( $resql )
 343          {
 344            $num = $db->num_rows($resql);
 345            dolibarr_syslog("* Regul des avances de la po ".$rowa[0]." ".strftime("%Y%m",$rowa[1]).", $num avances");
 346            $i = 0;          
 347            while ($i < $num)
 348          {
 349            $row = $db->fetch_row($resql);
 350            
 351            $avan_regul[$distributeur_id] = $avan_regul[$distributeur_id] + $row[0];
 352            
 353            fputs($fp, "DIS : ".$distributeur_id);
 354            fputs($fp, " av regul  po ".substr($space.$rowa[0],-4));
 355            fputs($fp, " : ".substr($space.$row[0],-8)."\n");
 356  
 357            $sqlir = "INSERT INTO ".MAIN_DB_PREFIX."telephonie_commission_regul";
 358            $sqlir .= " (date, fk_distributeur, fk_contrat, montant, type)";
 359            $sqlir .= " VALUES ('".$year_prev.$month_prev."'";
 360            $sqlir .= ",'".$distributeur_id."','".$row[1];
 361            $sqlir .= "','-".ereg_replace(",",".",$row[0]);
 362            $sqlir .= "','avan')";
 363            $resqlir = $db->query($sqlir);
 364            if (!$resqlir)
 365              {
 366                $error = 32;
 367                dolibarr_syslog("Erreur insertion regul avances (error $error)");
 368                dolibarr_syslog($sqlir);
 369              }
 370  
 371            dolibarr_syslog("* Avance ".$row[0] . " statut : ".$row[2]);
 372            
 373            /* Communications relatives */
 374            $datup = $year_prev.$month_prev;
 375            $datdo = strftime("%Y%m",$rowa[1]);
 376            if ($row[2] <> 6)
 377              {
 378                dolibarr_syslog("* Communications <= $datup >= $datdo ");
 379                $sqlc = "SELECT sum(montant)";
 380                $sqlc .= " FROM ".MAIN_DB_PREFIX."telephonie_commission_conso";
 381                $sqlc .= " WHERE fk_contrat = ". $row[1];
 382                $sqlc .= " AND date <= '".$datup."' AND date >= '".$datdo."'";
 383                
 384                $resqlc = $db->query($sqlc);
 385                
 386                if ( $resqlc )
 387              {              
 388                while ($rowc = $db->fetch_row($resqlc))
 389                  {
 390                    $comm_regul[$distributeur_id] = $comm_regul[$distributeur_id] + $rowc[0];
 391                    dolibarr_syslog("* Conso générée ".$rowc[0]);
 392  
 393                    $sqlir = "INSERT INTO ".MAIN_DB_PREFIX."telephonie_commission_regul";
 394                    $sqlir .= " (date, fk_distributeur, fk_contrat, montant, type)";
 395                    $sqlir .= " VALUES ('".$year_prev.$month_prev."'";
 396                    $sqlir .= ",'".$distributeur_id."','".$row[1];
 397                    $sqlir .= "','".ereg_replace(",",".",$rowc[0]);
 398                    $sqlir .= "','comm')";
 399                    $resqlir = $db->query($sqlir);
 400                    if (!$resqlir)
 401                  {
 402                    $error = 31;
 403                    dolibarr_syslog("Erreur insertion regul avances conso (error $error)");
 404                    dolibarr_syslog($sqlir);
 405                  }
 406                  }
 407                $db->free($resqlc);
 408              }
 409                else
 410              {
 411                $error = 10;
 412                dolibarr_syslog("Erreur regul avances conso ".$error);
 413              }
 414              }
 415            else
 416              {
 417                /*
 418                 * Contrats résiliés
 419                 *
 420                 */
 421                fputs($fp, "DIS : ".$obj->fk_distributeur);
 422                fputs($fp, " CON : ".$row[1] . " ANNULE\n");
 423  
 424                $sqlc = "UPDATE ".MAIN_DB_PREFIX."telephonie_commission_conso";
 425                $sqlc .= " SET annul = '".$year_prev.$month_prev."'";
 426                $sqlc .= " WHERE fk_contrat = ".$row[1];
 427                $sqlc .= " AND date <= '".$datup."' AND date >= '".$datdo."'";
 428  
 429                $resqlc = $db->query($sqlc);
 430  
 431                if (! $resqlc )
 432              {
 433                $error = 11;
 434                dolibarr_syslog("Erreur regul avances conso ".$error);
 435              }
 436              }
 437            
 438            $i++;
 439          }
 440            $db->free($resql);
 441          }
 442        else
 443          {
 444            $error = 12;
 445            dolibarr_syslog("Erreur regul avances ".$db->error());
 446          }                             
 447      }
 448      }
 449    else
 450      {
 451        $error = 13;
 452        dolibarr_syslog("Erreur regul avances aaaa".$db->error());
 453        dolibarr_syslog($sqla);
 454      }
 455  }
 456  
 457  /********************************************************
 458   *
 459   * Calcul des consos
 460   *
 461   *
 462   *********************************************************/
 463  $distri_co = array();
 464  
 465  $sql = "SELECT distinct fk_distributeur";
 466  $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_commission_conso";
 467  $sql .= " WHERE fk_distributeur <> 0";
 468    
 469  $resql = $db->query($sql);
 470    
 471  if ( $resql )
 472  {
 473    while ($row = $db->fetch_row($resql))
 474      {
 475        array_push($distri_co, $row[0]);
 476      }
 477    $db->free($resql);
 478  }
 479  else
 480  {
 481    $error = 14;
 482    dolibarr_syslog("Erreur calcul des commission sur conso ".$error);
 483  }
 484  
 485  $comm_conso = array();
 486  
 487  foreach ($distri_co as $distributeur_id)
 488  {
 489    $comm_conso[$distributeur_id] = 0;
 490  
 491    $sqla = "SELECT rowid, ".$db->pdate("datepo").", fk_contrat";
 492    $sqla .= " FROM ".MAIN_DB_PREFIX."telephonie_contrat_priseordre";
 493    $sqla .= " WHERE fk_distributeur = ".$distributeur_id;
 494    $sqla .= " AND date_format(datepo + INTERVAL avance_duree MONTH, '%Y%m')<'".$year_prev.$month_prev."';";
 495  
 496    $resqla = $db->query($sqla);
 497    
 498    if ( $resqla )
 499      {
 500        $numa = $db->num_rows($resqla);
 501        $ia = 0;
 502        
 503        while ($ia < $numa)
 504      {
 505        $rowa = $db->fetch_row($resqla);
 506        dolibarr_syslog("** Calcul des consos la po " .$rowa[0] . " ".strftime("%Y%m",$rowa[1]));
 507        $ia++;
 508  
 509        /* Communications relatives */
 510  
 511        $datup = $year_prev.$month_prev;
 512        
 513        dolibarr_syslog("** Communications  $datup");
 514            
 515        $sqlc = "SELECT sum(montant)";
 516        $sqlc .= " FROM ".MAIN_DB_PREFIX."telephonie_commission_conso";
 517        $sqlc .= " WHERE fk_contrat = ". $rowa[2];
 518        $sqlc .= " AND date = '".$datup."';";
 519        
 520        $resqlc = $db->query($sqlc);
 521        
 522        if ( $resqlc )
 523          {
 524            if ( $rowc = $db->fetch_row($resqlc) )
 525          {
 526            $comm_conso[$distributeur_id] = $comm_conso[$distributeur_id] + $rowc[0];          
 527            dolibarr_syslog("** Conso générée ".$rowc[0]);
 528          }
 529            else
 530          {
 531            $error = 151;
 532            dolibarr_syslog("Erreur regul conso");
 533          }
 534            $db->free($resqlc);
 535          }
 536        else
 537          {
 538            $error = 15;
 539            dolibarr_syslog("Erreur regul conso");
 540          }
 541      }                    
 542      }
 543    else
 544      {
 545        $error = 16;
 546        dolibarr_syslog("Erreur regul conso".$db->error());
 547        dolibarr_syslog($sqla);
 548      }
 549  }
 550  
 551  /********************************************************
 552   *
 553   *
 554   *
 555   ********************************************************/
 556  
 557  foreach ($distributeurs as $distributeur_id)
 558  {
 559    $distributeur = new DistributeurTelephonie($db);
 560    $distributeur->fetch($distributeur_id);
 561  
 562    dolibarr_syslog($distributeur->nom . " : ".$month_prev."-".$year_prev);
 563  
 564    $amount = 0;
 565  
 566    $amount = $amount + $comm_regul[$distributeur_id];
 567    $amount = $amount - $avan_regul[$distributeur_id];
 568    $amount = $amount + $comm_conso[$distributeur_id];
 569  
 570    fputs($fp, "DIS : ".$distributeur_id);
 571    fputs($fp, " ".str_repeat("-",35)."\n");
 572  
 573    fputs($fp, "DIS : ".$distributeur_id);
 574    fputs($fp, " Comm Regul : ".substr($space.$comm_regul[$distributeur_id],-15)."\n");
 575  
 576    fputs($fp, "DIS : ".$distributeur_id);
 577    fputs($fp, " Comm Conso : ".substr($space.$comm_conso[$distributeur_id],-15)."\n");
 578  
 579    /********************************************************
 580     *
 581     * Somme des commissions
 582     *
 583     *
 584     *********************************************************/
 585    
 586    $sql = "SELECT sum(montant)";
 587    $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_commission_avance";
 588    $sql .= " WHERE fk_distributeur = ".$distributeur->id; 
 589    $sql .= " AND date = '".$year_prev.$month_prev."';";
 590  
 591    $resql = $db->query($sql);
 592    
 593    if ( $resql )
 594      {
 595        if ($row = $db->fetch_row($resql))
 596      {
 597        fputs($fp, "DIS : ".$distributeur_id);
 598        fputs($fp, " Avances    : ".substr($space.$row[0],-15)."\n");
 599  
 600        fputs($fp, "DIS : ".$distributeur_id);
 601        fputs($fp, " Avan Regul : ".substr($space."-".$avan_regul[$distributeur_id],-15)."\n");
 602  
 603        $amount = $amount + $row[0];
 604        /* commission finale */
 605        $sqli = "INSERT INTO ".MAIN_DB_PREFIX."telephonie_commission";
 606        $sqli .= " (date, fk_distributeur, montant)";
 607        $sqli .= " VALUES ('".$year_prev.$month_prev."'";
 608        $sqli .= ",".$distributeur->id;
 609        $sqli .= ",".ereg_replace(",",".",$amount).")";
 610  
 611        if (! $db->query($sqli))
 612          {
 613            $error = 17;
 614            dolibarr_syslog("Erreur insertion Commission finale");
 615          }
 616  
 617        dolibarr_syslog("Commission finale ".$amount);
 618  
 619        fputs($fp, "DIS : ".$distributeur_id);
 620        fputs($fp, " Comm final : ".substr($space.$amount,-15)."\n");
 621      }
 622        else
 623      {
 624        $error = 18;
 625        dolibarr_syslog("Erreur lecture avances");
 626      }
 627        $db->free($resql);
 628      }
 629    else
 630      {
 631        $error = 19;
 632        dolibarr_syslog("Erreur ".$error);
 633      }
 634  }
 635  
 636  if ($error == 0)
 637  {
 638    $db->commit();
 639    dolibarr_syslog("Commit");
 640  }
 641  else
 642  {
 643    $db->rollback();
 644    dolibarr_syslog("Rollback", LOG_ERR);
 645  }
 646  dolibarr_syslog("----------------");
 647  fclose($fp);
 648  ?>


Généré le : Mon Nov 26 12:29:37 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics