/* * Copyright (C) 2016 Arthur Gregorio, AG.Software * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package br.com.webbudget.application.controller.logbook; import br.com.webbudget.application.component.table.AbstractLazyModel; import br.com.webbudget.application.component.table.Page; import br.com.webbudget.application.component.table.PageRequest; import br.com.webbudget.application.controller.AbstractBean; import br.com.webbudget.domain.misc.ex.InternalServiceError; import br.com.webbudget.domain.model.entity.entries.MovementClass; import br.com.webbudget.domain.model.entity.entries.MovementClassType; import br.com.webbudget.domain.model.entity.logbook.FuelType; import br.com.webbudget.domain.model.entity.logbook.Refueling; import br.com.webbudget.domain.model.entity.logbook.Vehicle; import br.com.webbudget.domain.model.entity.miscellany.FinancialPeriod; import br.com.webbudget.domain.model.service.FinancialPeriodService; import br.com.webbudget.domain.model.service.LogbookService; import br.com.webbudget.domain.model.service.MovementService; import java.util.List; import java.util.Map; import javax.faces.view.ViewScoped; import javax.inject.Inject; import javax.inject.Named; import lombok.Getter; import lombok.Setter; import org.primefaces.model.SortOrder; /** * Controller responsavel pela view de abastecimento no diario de bordo * * @author Arthur Gregorio * * @version 1.0.0 * @since 2.3.0, 27/06/2016 */ @Named @ViewScoped public class RefuelingBean extends AbstractBean { @Getter @Setter private Refueling refueling; @Getter private List<Vehicle> vehicles; @Getter private List<Refueling> refuelings; @Getter private List<FinancialPeriod> openPeriods; @Getter private List<MovementClass> movementClasses; @Inject private LogbookService logbookService; @Inject private MovementService movementService; @Inject private FinancialPeriodService periodService; @Getter private final AbstractLazyModel<Refueling> refuelingsModel; /** * Inicializa o tablemodel */ public RefuelingBean() { this.refuelingsModel = new AbstractLazyModel<Refueling>() { @Override public List<Refueling> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) { final PageRequest pageRequest = new PageRequest(); pageRequest .setFirstResult(first) .withPageSize(pageSize) .sortingBy(sortField, "inclusion") .withDirection(sortOrder.name()); final Page<Refueling> page = logbookService.listRefuelingsLazily(null, pageRequest); this.setRowCount(page.getTotalPagesInt()); return page.getContent(); } }; } /** * */ public void initializeListing() { this.viewState = ViewState.LISTING; } /** * * @param refuelingId * @param viewState */ public void initializeForm(long refuelingId, String viewState) { this.viewState = ViewState.valueOf(viewState); // pegamos os periodos financeiros em aberto this.openPeriods = this.periodService.listOpenFinancialPeriods(); // lista os veiculos disponiveis this.vehicles = this.logbookService.listVehicles(false); if (refuelingId != 0 && this.viewState == ViewState.DETAILING) { this.refueling = this.logbookService.findRefuelingById(refuelingId); } else { this.refueling = new Refueling(); } } /** * @return */ public String changeToAdd() { return "formRefueling.xhtml?faces-redirect=true" + "&viewState=" + ViewState.ADDING; } /** * @return */ public String changeToListing() { return "listRefuelings.xhtml?faces-redirect=true"; } /** * */ public void changeToDetail() { this.redirectTo("formRefueling.xhtml?faces-redirect=true&refuelingId=" + this.refueling.getId() + "&viewState=" + ViewState.DETAILING); } /** * @param refuelingId */ public void changeToDelete(long refuelingId) { this.refueling = this.logbookService.findRefuelingById(refuelingId); this.updateAndOpenDialog("deleteRefuelingDialog", "dialogDeleteRefueling"); } /** * @return */ public String doCancel() { return "listRefuelings.xhtml?faces-redirect=true"; } /** * */ public void doSave() { try { this.logbookService.saveRefueling(this.refueling); this.refueling = new Refueling(); this.addInfo(true, "refueling.saved"); } catch (InternalServiceError ex) { this.addError(true, ex.getMessage(), ex.getParameters()); } catch (Exception ex) { this.logger.error(ex.getMessage(), ex); this.addError(true, "error.undefined-error", ex.getMessage()); } } /** * */ public void doDelete() { try { this.logbookService.deleteRefueling(this.refueling); this.addInfo(true, "refueling.deleted"); } catch (InternalServiceError ex) { this.addError(true, ex.getMessage(), true, ex.getParameters()); } catch (Exception ex) { this.logger.error(ex.getMessage(), ex); this.addError(true, "error.undefined-error", ex.getMessage()); } finally { this.closeDialog("dialogDeleteRefueling"); this.updateComponent("refuelingsList"); } } /** * Quando um veiculo eh selecionado, carregamos aqui as classes do CC */ public void onVehicleSelect() { this.movementClasses = this.movementService.listMovementClassesByCostCenterAndType( this.refueling.getCostCenter(), MovementClassType.OUT); } /** * @return os tipos de combustivel disponiveis para selecao */ public FuelType[] getFuelTypes() { return FuelType.values(); } }