package devopsdistilled.operp.client.account.panes.controllers.impl;
import javax.inject.Inject;
import devopsdistilled.operp.client.abstracts.EntityOperation;
import devopsdistilled.operp.client.account.models.PaidTransactionModel;
import devopsdistilled.operp.client.account.panes.PaidTransactionPane;
import devopsdistilled.operp.client.account.panes.controllers.PaidTransactionPaneController;
import devopsdistilled.operp.client.account.panes.models.PaidTransactionPaneModel;
import devopsdistilled.operp.client.exceptions.EntityValidationException;
import devopsdistilled.operp.client.exceptions.NullFieldException;
import devopsdistilled.operp.client.party.models.VendorModel;
import devopsdistilled.operp.server.data.entity.account.PaidTransaction;
public class PaidTransactionPaneControllerImpl implements
PaidTransactionPaneController {
@Inject
private PaidTransactionPane view;
@Inject
private PaidTransactionPaneModel model;
@Inject
private VendorModel vendorModel;
@Inject
private PaidTransactionModel paidTransactionModel;
@Override
public void validate() throws EntityValidationException {
if (model.getEntity().getAccount() == null)
throw new NullFieldException("Vendor must be selected");
if (model.getEntity().getAmount().compareTo(0.0) < 1)
throw new NullFieldException("Amount must be greater than 0");
if (model.getEntity().getAccount().getBalance()
.compareTo(model.getEntity().getAmount()) < 0)
throw new EntityValidationException(
"Paid Amount must not be greater than balance");
}
@Override
public PaidTransaction save() {
return paidTransactionModel.saveAndUpdateModel(model.getEntity());
}
@Override
public PaidTransactionPaneModel getModel() {
return model;
}
@Override
public PaidTransactionPane getView() {
return view;
}
@Override
public void init(PaidTransaction paidTransaction,
EntityOperation entityOperation) {
if (EntityOperation.Edit == entityOperation) {
paidTransactionModel.getService().delete(paidTransaction);
}
view.setController(this);
view.resetComponents();
model.registerObserver(view);
model.setEntityAndEntityOperation(paidTransaction, entityOperation);
vendorModel.registerObserver(view);
view.init();
}
}