/**
* Axelor Business Solutions
*
* Copyright (C) 2016 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* 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 com.axelor.apps.cash.management.service;
import java.math.BigDecimal;
import java.util.List;
import org.joda.time.LocalDate;
import com.axelor.apps.base.db.BankDetails;
import com.axelor.apps.base.db.Company;
import com.axelor.apps.base.service.administration.GeneralService;
import com.axelor.apps.cash.management.db.Forecast;
import com.axelor.apps.cash.management.db.ForecastGenerator;
import com.axelor.apps.cash.management.db.ForecastReason;
import com.axelor.apps.cash.management.db.repo.ForecastRepository;
import com.google.inject.Inject;
public class ForecastService {
@Inject
protected GeneralService generalService;
public void generate(ForecastGenerator forecastGenerator){
LocalDate fromDate = forecastGenerator.getFromDate();
LocalDate toDate = forecastGenerator.getToDate();
LocalDate itDate = new LocalDate(fromDate);
LocalDate todayDate = generalService.getTodayDate();
if(forecastGenerator.getForecastList() != null && !forecastGenerator.getForecastList().isEmpty()){
List<Forecast> forecastList = forecastGenerator.getForecastList();
for (Forecast forecast : forecastList) {
if(forecast.getRealizedSelect() == ForecastRepository.REALISED_SELECT_NO){
forecastList.remove(forecast);
}
else if(forecast.getRealizedSelect() == ForecastRepository.REALISED_SELECT_AUTO && forecast.getEstimatedDate().isAfter(todayDate)){
forecastList.remove(forecast);
}
}
}
while(!itDate.isAfter(toDate)){
Forecast forecast = this.createForecast(forecastGenerator.getCompany(), forecastGenerator.getBankDetails(),
forecastGenerator.getTypeSelect(), forecastGenerator.getAmount(), itDate, forecastGenerator.getForecastReason(),
forecastGenerator.getComments(),forecastGenerator.getRealizedSelect());
forecastGenerator.addForecastListItem(forecast);
itDate.plusMonths(forecastGenerator.getPeriodicitySelect());
}
}
public Forecast createForecast(Company company, BankDetails bankDetails, int typeSelect, BigDecimal amount,
LocalDate estimatedDate, ForecastReason reason, String comments, int realizedSelect){
Forecast forecast = new Forecast();
forecast.setCompany(company);
forecast.setBankDetails(bankDetails);
forecast.setTypeSelect(typeSelect);
forecast.setAmount(amount);
forecast.setEstimatedDate(estimatedDate);
forecast.setForecastReason(reason);
forecast.setComments(comments);
forecast.setRealizedSelect(realizedSelect);
return forecast;
}
}