/** * 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()); } }
/** * 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()); } } }
/** * 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; }
/** * 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); } }
/** {@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; }
/** * 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; }