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