/*
* Electronic Logistics Management Information System (eLMIS) is a supply chain management system for health commodities in a developing country setting.
*
* Copyright (C) 2015 John Snow, Inc (JSI). This program was produced for the U.S. Agency for International Development (USAID). It was prepared under the USAID | DELIVER PROJECT, Task Order 4.
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.openlmis.ivdform.service;
import org.openlmis.core.domain.Product;
import org.openlmis.core.domain.ProgramProduct;
import org.openlmis.core.repository.ProgramProductRepository;
import org.openlmis.ivdform.domain.VaccineProductDose;
import org.openlmis.ivdform.dto.ProductDoseDTO;
import org.openlmis.ivdform.dto.VaccineServiceConfigDTO;
import org.openlmis.ivdform.repository.ProductDoseRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class ProductDoseService {
@Autowired
private ProductDoseRepository repository;
@Autowired
private ProgramProductRepository programProductRepository;
public VaccineServiceConfigDTO getProductDoseForProgram(Long programId) {
VaccineServiceConfigDTO dto = new VaccineServiceConfigDTO();
List<ProductDoseDTO> productDoseDTOs = new ArrayList<>();
List<ProgramProduct> pp = programProductRepository.getActiveByProgram(programId);
List<Product> products = new ArrayList<>();
for (ProgramProduct p : pp) {
if (!p.getProduct().getFullSupply()) {
continue;
}
List<VaccineProductDose> doses = repository.getDosesForProduct(programId, p.getProduct().getId());
if (!doses.isEmpty()) {
ProductDoseDTO productDose = new ProductDoseDTO();
productDose.setProductId(p.getProduct().getId());
productDose.setProductName(p.getProduct().getPrimaryName());
productDose.setDoses(doses);
productDoseDTOs.add(productDose);
} else {
//these are the possible other products.
products.add(p.getProduct());
}
}
dto.setPossibleDoses(repository.getAllDoses());
dto.setPossibleProducts(products);
dto.setProtocols(productDoseDTOs);
return dto;
}
public List<VaccineProductDose> getForProgram(Long programId) {
return repository.getProgramProductDoses(programId);
}
public void save(List<ProductDoseDTO> productDoseDTOs) {
repository.deleteAllByProgram(productDoseDTOs.get(0).getDoses().get(0).getProgramId());
for (ProductDoseDTO productDose : productDoseDTOs) {
for (VaccineProductDose dose : productDose.getDoses()) {
repository.insert(dose);
}
}
}
public List<VaccineProductDose> getProductDosesListByProgramProduct(Long programId, Long productId) {
return repository.getDosesForProduct(programId, productId);
}
}