package com.floreantpos.jreports;
import java.util.ArrayList;
import java.util.List;
import com.floreantpos.main.Application;
import com.floreantpos.model.Ticket;
import com.floreantpos.model.TicketItem;
import com.floreantpos.model.TicketItemModifier;
import com.floreantpos.model.TicketItemModifierGroup;
public class TicketDataSource extends AbstractReportDataSource {
public TicketDataSource() {
super(new String[] {"itemQty", "itemName", "itemUnitPrice", "itemSubtotal"});
}
public TicketDataSource(Ticket ticket) {
super(new String[] {"itemQty", "itemName", "itemUnitPrice", "itemSubtotal"});
setTicket(ticket);
}
private void setTicket(Ticket ticket) {
ArrayList<Row> rows = new ArrayList<Row>();
List<TicketItem> ticketItems = ticket.getTicketItems();
if (ticketItems != null) {
for (TicketItem ticketItem : ticketItems) {
Row row = new Row(ticketItem.getItemCount(), ticketItem.getName(), ticketItem.getUnitPrice(), ticketItem.getSubtotalAmountWithoutModifiers());
rows.add(row);
List<TicketItemModifierGroup> modifierGroups = ticketItem.getTicketItemModifierGroups();
if (modifierGroups != null) {
for (TicketItemModifierGroup modifierGroup : modifierGroups) {
List<TicketItemModifier> modifiers = modifierGroup.getTicketItemModifiers();
if (modifiers != null) {
for (TicketItemModifier modifier : modifiers) {
if (modifier.getTotalAmount() == 0) {
continue;
}
boolean extra = false;
String name = " - " + modifier.getName();
if (modifier.getModifierType() == TicketItemModifier.EXTRA_MODIFIER) {
name = " - Extra " + name;
extra = true;
}
row = new Row();
row.setItemCount(modifier.getItemCount());
row.setItemName(name);
if(extra) {
row.setUnitPrice(modifier.getExtraUnitPrice());
}
else {
row.setUnitPrice(modifier.getUnitPrice());
}
row.setSubtotalAmount(modifier.getTotalAmount());
rows.add(row);
}
}
}
}
}
}
setRows(rows);
}
public Object getValueAt(int rowIndex, int columnIndex) {
Row item = (Row) rows.get(rowIndex);
switch(columnIndex) {
case 0:
return String.valueOf(item.getItemCount());
case 1:
return item.getItemName();
case 2:
return Application.formatNumber(item.getUnitPrice());
case 3:
return Application.formatNumber(item.getSubtotalAmount());
}
return null;
}
private class Row {
private int itemCount;
private String itemName;
private double unitPrice;
private double subtotalAmount;
public Row() {
super();
}
public Row(int itemCount, String itemName, double unitPrice, double subtotalAmount) {
super();
this.itemCount = itemCount;
this.itemName = itemName;
this.unitPrice = unitPrice;
this.subtotalAmount = subtotalAmount;
}
public int getItemCount() {
return itemCount;
}
public void setItemCount(int itemCount) {
this.itemCount = itemCount;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public double getSubtotalAmount() {
return subtotalAmount;
}
public void setSubtotalAmount(double subtotalAmount) {
this.subtotalAmount = subtotalAmount;
}
public double getUnitPrice() {
return unitPrice;
}
public void setUnitPrice(double unitPrice) {
this.unitPrice = unitPrice;
}
}
}