<commit_before><?php
/**
 * Model for RegistreVCI
 *
 */

class RegistreVCI extends BaseRegistreVCI implements InterfaceProduitsDocument, InterfaceMouvementFacturesDocument, InterfacePieceDocument {

      protected $piece_document = null;
      protected $mouvement_document = null;

      public function __construct() {
          parent::__construct();
          $this->initDocuments();
      }

      public function __clone() {
          parent::__clone();
          $this->initDocuments();
      }

      public function constructId() {
          $id = RegistreVCIClient::TYPE_COUCHDB.'-' . $this->identifiant . '-' . $this->campagne;
          if($this->version) {
              $id .= "-".$this->version;
          }
          $this->set('_id', $id);
      }

      public function getConfiguration() {

          return ConfigurationClient::getInstance()->getConfiguration($this->campagne);
      }

      protected function initDocuments() {
          $this->piece_document = new PieceDocument($this);
          $this->mouvement_document = new MouvementFacturesDocument($this);
      }

      public function initDoc($identifiant, $campagne) {
          $this->identifiant = $identifiant;
          $this->campagne = $campagne;
          $etablissement = $this->getEtablissementObject();
          $this->initDocuments();
      }

      public function getProduits() {
        $produits = array();
        foreach ($this->declaration as $k => $p) {
          $produits['declaration/'.$k] = $p;
        }
        return $produits;
      }

      public function getProduitDetails() {
        $produits = array();
        foreach ($this->declaration as $k => $p) {
          foreach ($p->details as $key => $d) {
            $produits[$d->getHash()] = $d;
          }
        }
        return $produits;
      }

      public function getConfigProduits() {

          return $this->getConfiguration()->declaration->getProduits();
      }

      public function getEtablissementObject() {
        return EtablissementClient::getInstance()->findByIdentifiant($this->identifiant);
      }

      public function clotureStock() {
          if(!$this->isStockUtiliseEntierement()) {
              return;
          }
          foreach($this->getProduits() as $produit) {
                $produit->_set('stock_final', 0);
                foreach($produit->details as $detail) {
                    $detail->_set('stock_final', 0);
                }
          }
      }

      public function addLigne($produit, $mouvement_type, $volume, $lieu) {
          if (is_string($produit)) {
            $hproduit = preg_replace('/\/*declaration\//', '', $produit);
            $produit = $this->getConfiguration()->declaration->get($hproduit);
          }else{
            $hproduit = preg_replace('/\/*declaration\//', '', $produit->getHash());
          }
          $hproduit = preg_replace('|appellation_CREMANT/mention/lieu/couleur/.*|', 'appellation_CREMANT', $hproduit);
          $nDetail = $this->add('declaration')->add($hproduit)->addLigne($mouvement_type, $volume, $lieu);
          $mvt = $this->add('lignes')->add();
          $mvt->produit_hash = $hproduit;
          $mvt->produit_libelle = $nDetail->getLibelleProduit();
          $mvt->detail_hash = $nDetail->stockage_identifiant;
          $mvt->detail_libelle = $nDetail->getLibelle();
          $mvt->volume = $volume;
          $mvt->mouvement_type = $mouvement_type;
          $mvt->stock_resultant = $nDetail->stock_final;
          if (RegistreVCIClient::MOUVEMENT_SENS($mouvement_type) > 0) {
            $mvt->date = $this->campagne.'-10-15';
          }else{
            $mvt->date = ($this->campagne + 1).'-12-31';
          }
      	  $this->reorderProduits();
      }

            protected function reorderProduits() {
		              $produits = $this->getProduits();

			                $this->remove('declaration');
			                $this->add('declaration');

					          foreach($this->getConfigProduits() as $config) {
							              foreach($produits as $hash => $produit) {
									                      if(!preg_match("|".$produit->getHash()."|", $config->getHash())) {
												                          continue;
															                  }
		$this->declaration->add(str_replace("/declaration/", "", $produit->getHash()), $produit);
											                      unset($produits[$hash]);
													                  }
								                }

					          foreach($produits as $produit) {
							                $this->declaration->add(str_replace("/declaration/", "", $produit->getHash()), $produit->getData());
									          }

					          return $this->declaration;
					      }

      public function clear() {
        $this->remove('declaration');
        $this->remove('lignes');
        $this->remove('mouvements');
        $this->superficies_facturables = null;
      }

      public function save() {
          $this->superficies_facturables = $this->calculSurfaceFacturable();
          parent::save();
      }

      protected function doSave() {<commit_msg>Retourn save<commit_after><?php
/**
 * Model for RegistreVCI
 *
 */

class RegistreVCI extends BaseRegistreVCI implements InterfaceProduitsDocument, InterfaceMouvementFacturesDocument, InterfacePieceDocument {

      protected $piece_document = null;
      protected $mouvement_document = null;

      public function __construct() {
          parent::__construct();
          $this->initDocuments();
      }

      public function __clone() {
          parent::__clone();
          $this->initDocuments();
      }

      public function constructId() {
          $id = RegistreVCIClient::TYPE_COUCHDB.'-' . $this->identifiant . '-' . $this->campagne;
          if($this->version) {
              $id .= "-".$this->version;
          }
          $this->set('_id', $id);
      }

      public function getConfiguration() {

          return ConfigurationClient::getInstance()->getConfiguration($this->campagne);
      }

      protected function initDocuments() {
          $this->piece_document = new PieceDocument($this);
          $this->mouvement_document = new MouvementFacturesDocument($this);
      }

      public function initDoc($identifiant, $campagne) {
          $this->identifiant = $identifiant;
          $this->campagne = $campagne;
          $etablissement = $this->getEtablissementObject();
          $this->initDocuments();
      }

      public function getProduits() {
        $produits = array();
        foreach ($this->declaration as $k => $p) {
          $produits['declaration/'.$k] = $p;
        }
        return $produits;
      }

      public function getProduitDetails() {
        $produits = array();
        foreach ($this->declaration as $k => $p) {
          foreach ($p->details as $key => $d) {
            $produits[$d->getHash()] = $d;
          }
        }
        return $produits;
      }

      public function getConfigProduits() {

          return $this->getConfiguration()->declaration->getProduits();
      }

      public function getEtablissementObject() {
        return EtablissementClient::getInstance()->findByIdentifiant($this->identifiant);
      }

      public function clotureStock() {
          if(!$this->isStockUtiliseEntierement()) {
              return;
          }
          foreach($this->getProduits() as $produit) {
                $produit->_set('stock_final', 0);
                foreach($produit->details as $detail) {
                    $detail->_set('stock_final', 0);
                }
          }
      }

      public function addLigne($produit, $mouvement_type, $volume, $lieu) {
          if (is_string($produit)) {
            $hproduit = preg_replace('/\/*declaration\//', '', $produit);
            $produit = $this->getConfiguration()->declaration->get($hproduit);
          }else{
            $hproduit = preg_replace('/\/*declaration\//', '', $produit->getHash());
          }
          $hproduit = preg_replace('|appellation_CREMANT/mention/lieu/couleur/.*|', 'appellation_CREMANT', $hproduit);
          $nDetail = $this->add('declaration')->add($hproduit)->addLigne($mouvement_type, $volume, $lieu);
          $mvt = $this->add('lignes')->add();
          $mvt->produit_hash = $hproduit;
          $mvt->produit_libelle = $nDetail->getLibelleProduit();
          $mvt->detail_hash = $nDetail->stockage_identifiant;
          $mvt->detail_libelle = $nDetail->getLibelle();
          $mvt->volume = $volume;
          $mvt->mouvement_type = $mouvement_type;
          $mvt->stock_resultant = $nDetail->stock_final;
          if (RegistreVCIClient::MOUVEMENT_SENS($mouvement_type) > 0) {
            $mvt->date = $this->campagne.'-10-15';
          }else{
            $mvt->date = ($this->campagne + 1).'-12-31';
          }
      	  $this->reorderProduits();
      }

            protected function reorderProduits() {
		              $produits = $this->getProduits();

			                $this->remove('declaration');
			                $this->add('declaration');

					          foreach($this->getConfigProduits() as $config) {
							              foreach($produits as $hash => $produit) {
									                      if(!preg_match("|".$produit->getHash()."|", $config->getHash())) {
												                          continue;
															                  }
		$this->declaration->add(str_replace("/declaration/", "", $produit->getHash()), $produit);
											                      unset($produits[$hash]);
													                  }
								                }

					          foreach($produits as $produit) {
							                $this->declaration->add(str_replace("/declaration/", "", $produit->getHash()), $produit->getData());
									          }

					          return $this->declaration;
					      }

      public function clear() {
        $this->remove('declaration');
        $this->remove('lignes');
        $this->remove('mouvements');
        $this->superficies_facturables = null;
      }

      public function save() {
          $this->superficies_facturables = $this->calculSurfaceFacturable();
          return parent::save();
      }

      protected function doSave() {
{'fraction_non_alphanumeric': 0.150813885075505, 'fraction_numerical': 0.002353402627966268, 'mean_word_length': 1.9570890113076254, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 161, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1377180', 'n_tokens_mistral': 3199, 'n_tokens_neox': 2902, 'n_words': 442}