예제 #1
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;
  }
예제 #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
 private LigneStock createLigneStock(final MvtStock mvt) {
   final LigneStock ligneStock =
       new LigneStock(
           mvt.getEssai(),
           mvt.getPharmacie(),
           mvt.getProduit(),
           mvt.getConditionnement(),
           mvt.getApproApprouve());
   ligneStock.setNumLot(mvt.getNumLot());
   ligneStock.setNumTraitement(mvt.getNumTraitement());
   ligneStock.setDatePeremption(mvt.getDatePeremption());
   ligneStock.setQteGlobalStock(mvt.getQuantite());
   return ligneStock;
 }
예제 #4
0
  private void initLigneStockDispensationGlobale(final Sortie sortie) {
    final MvtStock mvt = sortie.getMvtSortie();
    final StockSearchCriteria criteria = new StockSearchCriteria();
    criteria.setProduit(mvt.getProduit());
    criteria.setPharmacie(mvt.getPharmacie());
    criteria.setEssai(mvt.getEssai());
    criteria.setConditionnement(mvt.getConditionnement());
    criteria.setNotNullQteDispensationGlobal(Boolean.TRUE);

    final List<LigneStock> lignesStock = this.getAll(criteria);
    for (final LigneStock ligneStock : lignesStock) {
      ligneStock.setDotation(Boolean.TRUE);
    }
    sortie.setLignesStock(lignesStock);
  }
예제 #5
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());
    }
  }
예제 #6
0
  /**
   * Méthode en charge d'initialiser les lignes de stock à partir des mouvements de stock de type
   * Dispensation globales.
   *
   * @param essai L'essai .
   * @param pharmacie La pharmacie.
   * @param produit Le produit.
   * @param conditionnement Le conditionnement.
   * @param mapLines Les lignes contenants les résultats.
   */
  private void updateFromDispensationGlobales(
      final MvtStockSearchCriteria critEntree, final Map<String, LigneStock> mapLines) {
    critEntree.setTypeMouvement(TypeMvtStock.DOTATION);

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

    for (final MvtStock disp : dispGlobales) {
      final DispensationGlobale dotation = (DispensationGlobale) disp;
      final String key = this.getKeyMvtStock(dotation, false);
      if (mapLines.containsKey(key)) {
        final LigneStock ligneStock = mapLines.get(key);
        // Mise à jour de la quantité réelle en stock
        ligneStock.setQteDispensationGlobal(
            (dotation.getQuantite() - dotation.getQuantiteDispensee()));
      } else {
        this.log.error(
            "Aucun Mvt d'entrée correspondant à la dispensation - idMvt " + disp.getId());
      }
    }
  }
예제 #7
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;
  }
예제 #8
0
  /** {@inheritDoc} */
  @Override
  public List<LigneStock> getAllLignesStock(
      final Essai essai,
      final Pharmacie pharmacie,
      final Produit produit,
      final Conditionnement conditionnement,
      final Boolean dotations) {
    final MvtStockSearchCriteria criteria = new MvtStockSearchCriteria();
    criteria.setEssai(essai);
    criteria.setPharmacie(pharmacie);
    criteria.setProduit(produit);
    criteria.setConditionnement(conditionnement);
    final List<LigneStock> resultWithNullStock = super.getAll(criteria);

    for (final LigneStock ligneStock : resultWithNullStock) {
      ligneStock.setDotation(dotations);
    }

    return new ArrayList<LigneStock>(
        CollectionUtils.select(resultWithNullStock, new LigneStockNonEpuisePredicate()));
  }
예제 #9
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;
 }
예제 #10
0
  @Override
  public void addQuarantaineToStock(final EtatStock etat, final EtatLigneStock ligne) {

    // Récupération des mouvements associés à la ligne
    final MvtStockSearchCriteria criteria = new MvtStockSearchCriteria();
    criteria.setEssai(etat.getEssai());
    criteria.setPharmacie(etat.getPharmacie());
    criteria.setProduit(etat.getProduit());
    criteria.setConditionnement(etat.getConditionnement());
    criteria.setNumLot(ligne.getNumLot());
    criteria.setNumTraitement(ligne.getNumTraitement());

    for (final MvtStock mvt : this.mvtStockService.getAll(criteria)) {
      mvt.setApproApprouve(true);
      this.mvtStockService.save(mvt);
    }

    // Récupération des lignes de stock pour mettre à jour le lieu de
    // stockage ainsi que l'info de quarantaine
    final StockSearchCriteria stockCriteria = new StockSearchCriteria();
    stockCriteria.setEssai(etat.getEssai());
    stockCriteria.setPharmacie(etat.getPharmacie());
    stockCriteria.setProduit(etat.getProduit());
    stockCriteria.setConditionnement(etat.getConditionnement());
    stockCriteria.setNumLotStrict(ligne.getNumLot());
    stockCriteria.setNumTraitement(ligne.getNumTraitement());

    final List<LigneStock> ligneStocks = this.getAll(stockCriteria);
    for (final LigneStock ligneStock : ligneStocks) {
      final Produit prod = this.produitService.reattach(etat.getProduit());
      ligneStock.setStockage(
          this.produitService.getStockageProduitPharma(prod, etat.getPharmacie()).getNomComplet());
      ligneStock.setApproApprouve(true);
    }
    this.saveAll(ligneStocks);
  }
예제 #11
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);
    }
  }