/[dolibarr]/dolibarr/htdocs/bon-prelevement.class.php
ViewVC logotype

Diff of /dolibarr/htdocs/bon-prelevement.class.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.15 by rodolphe, Mon May 9 10:15:58 2005 UTC revision 1.16 by rodolphe, Mon Jul 25 13:22:29 2005 UTC
# Line 185  class BonPrelevement Line 185  class BonPrelevement
185    {    {
186      $sql = "SELECT p.rowid, p.ref, p.amount, p.note, p.credite";      $sql = "SELECT p.rowid, p.ref, p.amount, p.note, p.credite";
187      $sql .= ",".$this->db->pdate("p.datec")." as dc";      $sql .= ",".$this->db->pdate("p.datec")." as dc";
   
188      $sql .= ",".$this->db->pdate("p.date_trans")." as date_trans";      $sql .= ",".$this->db->pdate("p.date_trans")." as date_trans";
189      $sql .= " , method_trans, fk_user_trans";      $sql .= " , method_trans, fk_user_trans";
190      $sql .= ",".$this->db->pdate("p.date_credit")." as date_credit";      $sql .= ",".$this->db->pdate("p.date_credit")." as date_credit";
# Line 382  class BonPrelevement Line 381  class BonPrelevement
381          $sql .= " WHERE rowid=".$this->id;          $sql .= " WHERE rowid=".$this->id;
382          $sql .= " AND statut = 0";          $sql .= " AND statut = 0";
383                
384          if (! $this->db->query($sql))          if ($this->db->query($sql))
385              {
386                // Appel des triggers
387                include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
388                $interface = new Interfaces($this->db);
389                $ret=$interface->run_triggers('STANDINGORDER_TRANS',$this,$user,$lang,$conf);
390                // Fin appel triggers
391              }
392            else
393            {            {
394              dolibarr_syslog("bon-prelevement::set_infotrans Erreur 1");              dolibarr_syslog("bon-prelevement::set_infotrans Erreur 1");
395              dolibarr_syslog($this->db->error());              dolibarr_syslog($this->db->error());
# Line 460  class BonPrelevement Line 467  class BonPrelevement
467        return $arr;        return $arr;
468      }      }
469    
470      /**
471       *
472       *
473       */
474      function SommeAPrelever()
475      {  
476        $sql = "SELECT sum(f.total_ttc)";
477        $sql .= " FROM ".MAIN_DB_PREFIX."facture as f";
478        $sql .= " , ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
479        
480        $sql .= " WHERE f.fk_statut = 1";
481        $sql .= " AND f.rowid = pfd.fk_facture";
482        $sql .= " AND f.paye = 0";
483        $sql .= " AND pfd.traite = 0";
484        $sql .= " AND f.total_ttc > 0";
485        $sql .= " AND f.fk_mode_reglement = 3";
486        
487        $resql = $this->db->query($sql);
488        
489        if ( $resql )
490          {
491            $row = $this->db->fetch_row($resql);
492                
493            return $row[0];
494                
495            $this->db->free($resql);
496          }
497        else
498          {
499            $error = 1;
500            dolibarr_syslog("BonPrelevement::SommeAPrelever Erreur -1");
501            dolibarr_syslog($this->db->error());
502          }
503      }
504      /*
505       *
506       *
507       */
508      function NbFactureAPrelever($banque=0,$agence=0)
509      {  
510        $sql = "SELECT count(f.total_ttc)";
511        $sql .= " FROM ".MAIN_DB_PREFIX."facture as f";
512        $sql .= " , ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
513        $sql .= " , ".MAIN_DB_PREFIX."societe_rib as sr";
514    
515        $sql .= " WHERE f.fk_statut = 1";
516        $sql .= " AND f.rowid = pfd.fk_facture";
517        $sql .= " AND f.fk_soc = sr.fk_soc";
518        $sql .= " AND f.paye = 0";
519        $sql .= " AND pfd.traite = 0";
520        $sql .= " AND f.total_ttc > 0";
521        $sql .= " AND f.fk_mode_reglement = 3";
522        
523        if ($banque == 1)
524          {
525            $sql .= " AND sr.code_banque = '".PRELEVEMENT_CODE_BANQUE."'";
526          }
527    
528        if ($agence == 1)
529          {
530            $sql .= " AND sr.code_guichet = '".PRELEVEMENT_CODE_GUICHET."'";
531          }
532    
533        $resql = $this->db->query($sql);
534        
535        if ( $resql )
536          {
537            $row = $this->db->fetch_row($resql);
538                
539            return $row[0];
540                
541            $this->db->free($resql);
542          }
543        else
544          {
545            $error = 1;
546            dolibarr_syslog("BonPrelevement::SommeAPrelever Erreur -1");
547            dolibarr_syslog($this->db->error());
548          }
549      }
550      /*
551       *
552       *
553       */
554      function Create($banque=0, $guichet=0)
555      {
556        dolibarr_syslog("BonPrelevement::Create");
557    
558        require_once (DOL_DOCUMENT_ROOT."/bon-prelevement.class.php");
559        require_once (DOL_DOCUMENT_ROOT."/facture.class.php");
560        require_once (DOL_DOCUMENT_ROOT."/societe.class.php");
561        require_once (DOL_DOCUMENT_ROOT."/paiement.class.php");
562        require_once (DOL_DOCUMENT_ROOT."/lib/dolibarrmail.class.php");
563        
564        $error = 0;
565    
566        $datetimeprev = time();
567    
568        $month = strftime("%m", $datetimeprev);
569        $year = strftime("%Y", $datetimeprev);
570        
571        $user = new user($this->db, PRELEVEMENT_USER);
572        
573        /*
574         *
575         * Lectures des factures
576         *
577         */
578        
579        $factures = array();
580        $factures_prev = array();
581        
582        if (!$error)
583          {
584            
585            $sql = "SELECT f.rowid, pfd.rowid as pfdrowid, f.fk_soc";
586            $sql .= ", pfd.code_banque, pfd.code_guichet, pfd.number, pfd.cle_rib";
587            $sql .= ", pfd.amount";
588            $sql .= ", s.nom";
589            $sql .= " FROM ".MAIN_DB_PREFIX."facture as f";
590            $sql .= " , ".MAIN_DB_PREFIX."societe as s";
591            $sql .= " , ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
592            $sql .= " , ".MAIN_DB_PREFIX."societe_rib as sr";
593            
594            $sql .= " WHERE f.rowid = pfd.fk_facture";
595            $sql .= " AND s.idp = f.fk_soc";
596            $sql .= " AND s.idp = sr.fk_soc";
597            $sql .= " AND f.fk_statut = 1";
598            $sql .= " AND f.paye = 0";
599            $sql .= " AND pfd.traite = 0";
600            $sql .= " AND f.total_ttc > 0";
601            $sql .= " AND f.fk_mode_reglement = 3";
602    
603            if ($banque == 1)
604              {
605                $sql .= " AND sr.code_banque = '".PRELEVEMENT_CODE_BANQUE."'";
606              }
607            
608            if ($agence == 1)
609              {
610                $sql .= " AND sr.code_guichet = '".PRELEVEMENT_CODE_GUICHET."'";
611              }
612            
613            $resql = $this->db->query($sql);
614    
615            if ( $resql)
616              {
617                $num = $this->db->num_rows($resql);
618                $i = 0;
619                
620                while ($i < $num)
621                  {
622                    $row = $this->db->fetch_row($resql);            
623                    $factures[$i] = $row;          
624                    $i++;
625                  }            
626                $this->db->free($resql);
627                dolibarr_syslog("$i factures à prélever");
628              }
629            else
630              {
631                $error = 1;
632                dolibarr_syslog("Erreur -1");
633                dolibarr_syslog($this->db->error());
634              }
635          }
636        
637        /*
638         *
639         * Verif des clients
640         *
641         */
642        
643        if (!$error)
644          {
645            /*
646             * Vérification des RIB
647             *
648             */
649            $i = 0;
650            dolibarr_syslog("Début vérification des RIB");
651            
652            if (sizeof($factures) > 0)
653              {      
654                foreach ($factures as $fac)
655                  {
656                    $fact = new Facture($this->db);
657                    
658                    if ($fact->fetch($fac[0]) == 1)
659                      {
660                        $soc = new Societe($this->db);
661                        if ($soc->fetch($fact->socidp) == 1)
662                          {
663                            if ($soc->verif_rib() == 1)
664                              {
665                                $factures_prev[$i] = $fac;
666                                /* second tableau necessaire pour bon-prelevement */
667                                $factures_prev_id[$i] = $fac[0];
668                                $i++;
669                              }
670                            else
671                              {
672                                dolibarr_syslog("Erreur de RIB societe $fact->socidp $soc->nom");
673                              }
674                          }
675                        else
676                          {
677                            dolibarr_syslog("Impossible de lire la société");
678                          }
679                      }
680                    else
681                      {
682                        dolibarr_syslog("Impossible de lire la facture");
683                      }
684                  }
685              }
686            else
687              {
688                dolibarr_syslog("Aucune factures a traiter");
689              }
690          }
691        
692        /*
693         *
694         *
695         *
696         */
697        
698        dolibarr_syslog(sizeof($factures_prev)." factures seront prélevées");
699        
700        if (sizeof($factures_prev) > 0)
701          {
702            /*
703             * Ouverture de la transaction
704             *
705             */
706            
707            if (!$this->db->query("BEGIN"))
708              {
709                $error++;
710              }
711            
712            /*
713             * Traitements
714             *
715             */
716            
717            if (!$error)
718              {
719                $ref = "T".substr($year,-2).$month;
720                
721                /*
722                 *
723                 *
724                 */
725                $sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."prelevement_bons";
726                $sql .= " WHERE ref LIKE '$ref%'";
727                
728                $resql = $this->db->query($sql);
729    
730                if ($resql)
731                  {      
732                    $row = $this->db->fetch_row($resql);
733                  }
734                else
735                  {
736                    $error++;
737                    dolibarr_syslog("Erreur recherche reference");
738                  }
739                
740                $ref = $ref . substr("00".($row[0]+1), -2);
741                
742                $filebonprev = $ref;
743                
744                /*
745                 * Creation du bon de prelevement
746                 *
747                 */
748                
749                $sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_bons (ref,datec)";
750                $sql .= " VALUES ('".$ref."',now())";
751                
752                $resql = $this->db->query($sql);
753    
754                if ($resql)
755                  {      
756                    $prev_id = $this->db->last_insert_id(MAIN_DB_PREFIX."prelevement_bons");
757                    
758                    $bonprev = new BonPrelevement($this->db, DOL_DATA_ROOT."/prelevement/bon/".$filebonprev);
759                    $bonprev->id = $prev_id;
760                  }
761                else
762                  {
763                    $error++;
764                    dolibarr_syslog("Erreur création du bon de prelevement");
765                  }
766                
767              }
768            
769            /*
770             *
771             *
772             *
773             */
774            if (!$error)
775              {      
776                dolibarr_syslog("Début génération des paiements");
777                dolibarr_syslog("Nombre de factures ".sizeof($factures_prev));
778                
779                if (sizeof($factures_prev) > 0)
780                  {
781                    foreach ($factures_prev as $fac)
782                      {
783                        $fact = new Facture($this->db);
784                        $fact->fetch($fac[0]);
785                        
786                        $pai = new Paiement($this->db);
787                        
788                        $pai->amounts = array();
789                        $pai->amounts[$fac[0]] = $fact->total_ttc;
790                        $pai->datepaye = $this->db->idate($datetimeprev);
791                        $pai->paiementid = 3; // prélèvement
792                        $pai->num_paiement = $ref;
793                        
794                        if ($pai->create($user, 1) == -1)  // on appelle en no_commit
795                          {
796                            $error++;
797                            dolibarr_syslog("Erreur creation paiement facture ".$fac[0]);
798                          }
799                        else
800                          {
801                            /*
802                             * Validation du paiement
803                             */
804                            $pai->valide();
805                            
806                            /*
807                             * Ajout d'une ligne de prélèvement
808                             *
809                             *
810                             * $fac[3] : banque
811                             * $fac[4] : guichet
812                             * $fac[5] : number
813                             * $fac[6] : cle rib
814                             * $fac[7] : amount
815                             * $fac[8] : client nom
816                             * $fac[2] : client id
817                             */
818                            
819                            $ri = $bonprev->AddFacture($fac[0], $fac[2], $fac[8], $fac[7],
820                                                       $fac[3], $fac[4], $fac[5], $fac[6]);
821                            if ($ri <> 0)
822                              {
823                                $error++;
824                              }
825                            
826                            /*
827                             * Mise à jour des demandes
828                             *
829                             */
830                            $sql = "UPDATE ".MAIN_DB_PREFIX."prelevement_facture_demande";
831                            $sql .= " SET traite = 1";
832                            $sql .= ", date_traite=now()";
833                            $sql .= ", fk_prelevement_bons = ".$prev_id;
834                            $sql .= " WHERE rowid=".$fac[1];
835                            
836                            if ($this->db->query($sql))
837                              {      
838                                
839                              }
840                            else
841                              {
842                                $error++;
843                                dolibarr_syslog("Erreur mise a jour des demandes");
844                                dolibarr_syslog($this->db->error());
845                              }
846                            
847                          }
848                      }
849                  }
850                
851                dolibarr_syslog("Fin des paiements");
852              }
853            
854            if (!$error)
855              {
856                /*
857                 * Bon de Prelevement
858                 *
859                 *
860                 */
861                
862                dolibarr_syslog("Debut prelevement");
863                dolibarr_syslog("Nombre de factures ".sizeof($factures_prev));
864                
865                if (sizeof($factures_prev) > 0)
866                  {
867                    $bonprev->date_echeance = $datetimeprev;      
868                    $bonprev->reference_remise = $ref;
869                    
870                    
871                    $bonprev->numero_national_emetteur = PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR;
872                    $bonprev->raison_sociale = PRELEVEMENT_RAISON_SOCIALE;
873                    
874                    $bonprev->emetteur_code_etablissement = PRELEVEMENT_CODE_BANQUE;
875                    $bonprev->emetteur_code_guichet       = PRELEVEMENT_CODE_GUICHET;
876                    $bonprev->emetteur_numero_compte      = PRELEVEMENT_NUMERO_COMPTE;
877                    
878                    
879                    $bonprev->factures = $factures_prev_id;
880                    
881                    $bonprev->generate();  
882                  }
883                dolibarr_syslog( $filebonprev ) ;
884                dolibarr_syslog("Fin prelevement");
885              }
886            
887            /*
888             * Mise à jour du total
889             *
890             */
891            
892            $sql = "UPDATE ".MAIN_DB_PREFIX."prelevement_bons";
893            $sql .= " SET amount = ".ereg_replace(",",".",$bonprev->total);
894            $sql .= " WHERE rowid = ".$prev_id;
895            
896            if (!$this->db->query($sql))
897              {
898                $error++;
899                dolibarr_syslog("Erreur mise à jour du total");
900                dolibarr_syslog($sql);
901              }
902            
903            /*
904             * Rollback ou Commit
905             *
906             */
907            if (!$error)
908              {
909                $this->db->query("COMMIT");
910                dolibarr_syslog("COMMIT");
911              }
912            else
913              {
914                $this->db->query("ROLLBAK");
915                dolibarr_syslog("ROLLBACK");
916              }
917          }  
918      }
919      
920      
921    
922    /**    /**
923     * Génération d'un bon de prélèvement     * Génération d'un bon de prélèvement
924     *     *

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.16

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26