示例#1
0
  /**
   * Méthode en charge d'initialiser les lignes de stock à partir des mouvements de stock de type
   * Entree.
   *
   * @param essai Essai.
   * @param pharmacie Pharmacie.
   * @param produit Produit.
   * @param conditionnement Conditionnement.
   * @param mapLines Map des lignes de stock à construire.
   */
  private void buildFromMvtTypeEntree(
      final MvtStockSearchCriteria critEntree, final Map<String, LigneStock> mapLines) {
    // Récupération des mouvements de type Entree qui concernent l'essai, la
    // pharmacie, le produit et le conditionnement
    critEntree.setTypesMouvement(TypeMvtStock.ENTREES);
    critEntree.setActiveOrder("datePeremption");

    final List<MvtStock> appros = this.mvtStockService.getAll(critEntree);

    for (final MvtStock mouvementStock : appros) {
      final Approvisionnement appro = (Approvisionnement) mouvementStock;
      final LigneStock ligneStock = this.createLigneStock(mouvementStock);

      if (appro.getApproApprouve()) {
        final Produit prod = this.produitService.reattach(appro.getProduit());
        final Stockage stockage =
            this.produitService.getStockageProduitPharma(prod, appro.getPharmacie());
        ligneStock.setStockage(stockage.getNomComplet());
      } else {
        ligneStock.setStockage(LigneStock.EN_QUARANTAINE);
      }

      final String key = this.getKeyMvtStock(mouvementStock, false);

      // Une entrée existe déjà => cumul des quantités saisies
      if (mapLines.get(key) != null) {
        final LigneStock l = mapLines.get(key);
        l.setQteGlobalStock(l.getQteGlobalStock() + ligneStock.getQteGlobalStock());
      } else {
        mapLines.put(key, ligneStock);
      }
      this.log.debug(
          "Entrée key: " + key + " object: " + ligneStock + "Mvt Id: " + mouvementStock.getId());
    }
  }
示例#2
0
  /**
   * Méthode en charge de mettre à jour les lignes de stock à partir des mouvements de stock de type
   * Sortie. La mise à jour concerne la quantité.
   *
   * @param essai Essai.
   * @param pharmacie Pharmacie.
   * @param produit Produit.
   * @param conditionnement Conditionnement.
   * @param mapLines Map des lignes de stock à mettre à jour.
   */
  private void updateFromMvtTypeSortie(
      final MvtStockSearchCriteria critSortie, final Map<String, LigneStock> mapLines) {
    // Récupération des mouvements de type Sortie qui concernant l'essai, la
    // pharmacie, le
    // produit et le conditionnement
    critSortie.setTypesMouvement(TypeMvtStock.ALL_SORTIES);
    critSortie.setActiveOrder("datePeremption");

    final List<MvtStock> sorties = this.mvtStockService.getAll(critSortie);

    // on ne traite pas ici les dispensations globales car elles ne sortent
    // pas du stocks.
    CollectionUtils.filter(
        sorties,
        new Predicate<MvtStock>() {
          @Override
          public boolean evaluate(final MvtStock object) {
            return !object.getType().equals(TypeMvtStock.DOTATION);
          }
        });

    for (final MvtStock mvtStock : sorties) {
      final String key = this.getKeyMvtStock(mvtStock, false);
      if (mapLines.containsKey(key)) {
        final LigneStock ligneStock = mapLines.get(key);
        this.log.debug("Key: " + key + " objec: " + ligneStock);
        // Mise à jour de la quantité réelle en stock
        ligneStock.setQteGlobalStock(ligneStock.getQteGlobalStock() - mvtStock.getQuantite());
      } else {
        this.log.error("Aucun Mvt d'entrée correspondant à la sortie - idMvt " + mvtStock.getId());
      }
    }
  }
示例#3
0
  /**
   * Mise à jour d'un mouvement de sortie.
   *
   * @param sortie Mouvement de sortie.
   * @return Ligne de stock.
   */
  private LigneStock updateSortie(final MvtStock sortie) {
    // Récupération de la ligne de stock associée au mouvement
    final LigneStock ligneStock = this.getLigneStock(sortie);
    ligneStock.setQteGlobalStock(ligneStock.getQteGlobalStock() - sortie.getQuantite());

    return ligneStock;
  }
示例#4
0
  /**
   * Création ou mise à jour d'une ligne stock après la mise à jour de la date de péremption d'un
   * approvisionnement.
   *
   * @param appro l'approvisionnement avec la date à jour
   * @param oldLigneStock la ligne de stock associée à l'ancienne date de péremption
   */
  protected void updateLigneStock(final Approvisionnement appro, final LigneStock oldLigneStock) {
    // Deuxième recherche après la MAJ de la date de péremption de
    // l'appro
    final LigneStock newLineStock = this.getLigneStock(appro);

    // Si ID est null, la ligne a été créée par getLigneStock
    if (newLineStock.getId() == null) {
      // Sauvegarde de la ligne
      oldLigneStock.setDatePeremption(appro.getDatePeremption());
      this.save(oldLigneStock);
    } else {
      // Fusion avec celle qui existe déjà
      newLineStock.setQteGlobalStock(
          newLineStock.getQteGlobalStock() + oldLigneStock.getQteGlobalStock());
      newLineStock.setQteDispensationGlobal(
          newLineStock.getQteDispensationGlobal() + oldLigneStock.getQteDispensationGlobal());
      this.save(newLineStock);
      // Suppression de la ligne de stock
      this.remove(oldLigneStock);
    }
  }
示例#5
0
 /** {@inheritDoc} */
 @Override
 public LigneStock save(final LigneStock ligneStock) {
   // Log de sauvegarde de quantité négative
   if ((ligneStock != null)
       && (ligneStock.getQteEnStock() != null)
       && (ligneStock.getQteDispensationGlobal() != null)
       && ((ligneStock.getQteEnStock() < 0) || (ligneStock.getQteDispensationGlobal() < 0))) {
     this.log.error(
         "ERREUR dans le stock (quantitites negatives) : LigneStock (id="
             + ligneStock.getId()
             + ")");
   }
   final LigneStock saved = super.save(ligneStock);
   // On ne garde pas la ligne de stock si les quantités sont à 0
   if ((saved != null)
       && (saved.getQteGlobalStock() != null)
       && (saved.getQteDispensationGlobal() != null)
       && Integer.valueOf(0).equals(saved.getQteGlobalStock())
       && Integer.valueOf(0).equals(saved.getQteDispensationGlobal())) {
     this.remove(ligneStock);
   }
   return saved;
 }
示例#6
0
  /**
   * Mise à jour d'un mouvement d'approvisionnement.
   *
   * @param appro Approvisionnement à mettre à jour.
   * @param stockage Lieu de stockage.
   */
  private LigneStock updateAppro(final Approvisionnement appro) {

    // Récupération de la ligne de stock associée au mouvement
    final LigneStock ligneStock = this.getLigneStock(appro);

    // Valorisation du lieu de stockage
    if (Boolean.FALSE.equals(appro.getApproApprouve())) {
      ligneStock.setStockage(LigneStock.EN_QUARANTAINE);
    } else {
      // Récupération du lieu de stockage pour le produit et la
      // pharmacie
      final Produit produit = this.produitService.get(appro.getProduit().getId());
      final Stockage stockage =
          this.produitService.getStockageProduitPharma(produit, appro.getPharmacie());
      ligneStock.setStockage(stockage.getNomComplet());
    }
    ligneStock.setQteGlobalStock(ligneStock.getQteGlobalStock() + appro.getQuantite());

    return ligneStock;
  }