package devopsdistilled.operp.client.business.sales.panes.controllers.impl;
import javax.inject.Inject;
import javax.swing.JPanel;
import devopsdistilled.operp.client.abstracts.EntityOperation;
import devopsdistilled.operp.client.business.sales.panes.SaleDescPane;
import devopsdistilled.operp.client.business.sales.panes.controllers.SaleDescPaneController;
import devopsdistilled.operp.client.business.sales.panes.controllers.SaleDescRowPaneController;
import devopsdistilled.operp.client.business.sales.panes.models.SaleDescPaneModel;
import devopsdistilled.operp.client.exceptions.EntityValidationException;
import devopsdistilled.operp.client.exceptions.NullFieldException;
import devopsdistilled.operp.client.stock.models.StockModel;
import devopsdistilled.operp.server.data.entity.business.SaleDesc;
import devopsdistilled.operp.server.data.entity.business.SaleDescRow;
import devopsdistilled.operp.server.data.entity.stock.Stock;
public class SaleDescPaneControllerImpl implements SaleDescPaneController {
@Inject
private SaleDescPane view;
@Inject
private SaleDescPaneModel model;
@Inject
private StockModel stockModel;
@Inject
private SaleDescRowPaneController saleDescRowPaneController;
@Override
public void validate() throws EntityValidationException {
Long quantity = model.getSaleDescRow().getQuantity();
Double rate = model.getSaleDescRow().getRate();
if (model.getSaleDescRow().getItem() == null
|| model.getSaleDescRow().getWarehouse() == null
|| quantity.equals(0L) || rate.equals(0.0)) {
throw new NullFieldException();
}
if (quantity.compareTo(0L) <= 0)
throw new EntityValidationException(
"Quantity shouldnt' be negative value");
if (rate.compareTo(0.0) < 0)
throw new EntityValidationException("Rate can't be negative");
// Check if quantity exceeds stock
for (Stock stock : stockModel.getEntities())
if (stock.getWarehouse().compareTo(
model.getSaleDescRow().getWarehouse()) == 0
&& stock.getItem().compareTo(
model.getSaleDescRow().getItem()) == 0)
if (stock.getQuantity().compareTo(quantity) < 0)
throw new EntityValidationException("Only "
+ stock.getQuantity() + " " + stock.getItem()
+ " available in " + stock.getWarehouse());
}
@Override
public SaleDesc save() {
return null;
}
@Override
public SaleDescPaneModel getModel() {
return model;
}
@Override
public SaleDescPane getView() {
return view;
}
@Override
public void init(SaleDesc saleDesc, EntityOperation entityOperation) {
if (EntityOperation.Create == entityOperation) {
SaleDescRow saleDescRow = new SaleDescRow();
model.setSaleDescRow(saleDescRow);
saleDescRowPaneController.init(saleDescRow, entityOperation);
}
view.setSaleDescRowpanel((JPanel) saleDescRowPaneController.getView()
.getPane());
view.setController(this);
view.resetComponents();
model.registerObserver(view);
model.setEntityAndEntityOperation(saleDesc, entityOperation);
}
@Override
public void addNewSaleDescRow() {
model.getSaleDescRow().setBusinessDesc(model.getEntity());
if (EntityOperation.Edit != model.getEntityOperation()) {
model.getEntity().getDescRows().add(model.getSaleDescRow());
}
model.getEntity().setTotalAmount(
model.getEntity().getTotalAmount()
+ model.getSaleDescRow().getAmount());
model.setEntityAndEntityOperation(model.getEntity(),
EntityOperation.Create);
SaleDescRow saleDescRow = new SaleDescRow();
model.setSaleDescRow(saleDescRow);
saleDescRowPaneController.init(saleDescRow, EntityOperation.Create);
}
@Override
public void initEditSaleDescRow(SaleDescRow saleDescRow) {
model.setSaleDescRow(saleDescRow);
model.getEntity().setTotalAmount(
model.getEntity().getTotalAmount()
- model.getSaleDescRow().getAmount());
model.setEntityAndEntityOperation(model.getEntity(),
EntityOperation.Edit);
saleDescRowPaneController.init(saleDescRow, EntityOperation.Edit);
}
}