package com.opentravelsoft.action.branch;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.opensymphony.xwork2.ActionContext;
import com.opentravelsoft.common.SessionKeyParams;
import com.opentravelsoft.entity.Booking;
import com.opentravelsoft.entity.finance.Invoice;
import com.opentravelsoft.entity.finance.InvoiceItem;
import com.opentravelsoft.entity.finance.InvoicePiece;
import com.opentravelsoft.entity.finance.Income;
import com.opentravelsoft.service.finance.InvoiceService;
import com.opentravelsoft.service.order.BookingService;
import com.opentravelsoft.webapp.action.PortalAction;
/**
* 填写发票
*
* @author <a herf="mailto:zhangsitao@gmail.com">Steven Zhang</a>
*/
public class InvoiceAction extends PortalAction {
private static final long serialVersionUID = -8607586773699795330L;
@Autowired
private InvoiceService invoiceService;
@Autowired
private BookingService bookService;
/** 订单编号编号 */
private String reserveNo;
/** 支付订单号 */
private String orderNo;
private Invoice invoice;
private List<InvoiceItem> items = new ArrayList<InvoiceItem>();
private List<InvoicePiece> pieces = new ArrayList<InvoicePiece>();
public String input() {
invoice = new Invoice();
// 订单
Booking book = bookService.roGetReserve(reserveNo);
// 付款记录
Income payment = null;
for (Income item : book.getPayments()) {
if (item.getBookingNo().equals(orderNo))
payment = item;
}
if (null == payment)
addActionError("付款记录不存在");
ActionContext.getContext().getSession()
.put(SessionKeyParams.EBIZ_CURRENT_BOOKING, book);
ActionContext.getContext().getSession()
.put(SessionKeyParams.EBIZ_CURRENT_PAYMENT, payment);
if (items.size() == 0)
for (int i = 0; i < 4; i++) {
InvoiceItem item = new InvoiceItem();
item.setId(i);
items.add(item);
}
if (pieces.size() == 0)
for (int i = 0; i < 5; i++) {
InvoicePiece piece = new InvoicePiece();
piece.setId(i);
pieces.add(piece);
}
// 备注栏填写 线路名,出团时间
invoice.setRemarks("旅游线路:" + book.getPlan().getLine().getLineName()
+ " 人数:" + book.getPax());
return INPUT;
}
@Override
public void validate() {
Income payment = (Income) ActionContext.getContext().getSession()
.get(SessionKeyParams.EBIZ_CURRENT_PAYMENT);
BigDecimal pay = new BigDecimal(0);
for (InvoiceItem item : items) {
pay = pay.add(item.getExpense());
}
if (pay.compareTo(payment.getAmount()) > 0) {
addActionError("发票付款项目总额大于付款额.");
} else if (pay.doubleValue() == 0) {
addActionError("发票付款项目总额为零.");
}
BigDecimal block = new BigDecimal(0);
for (InvoicePiece piece : pieces) {
block = block.add(piece.getAmount());
}
if (block.compareTo(payment.getAmount()) > 0) {
addActionError("发票收款方式一栏总额大于付款额.");
} else if (block.doubleValue() == 0) {
addActionError("发票收款方式一栏总额为零.");
}
if (pay != block)
addActionError("发票付款项目总额与发票收款方式一栏总额不符.");
}
public String submit() {
invoice.setItems(items);
invoice.setPieces(pieces);
invoice.setInvoiceNo(orderNo);
invoiceService.txSaveInvoice(invoice, 0);
return SUCCESS;
}
public Invoice getInvoice() {
return invoice;
}
public void setInvoice(Invoice invoice) {
this.invoice = invoice;
}
public List<InvoiceItem> getItems() {
return items;
}
public void setItems(List<InvoiceItem> items) {
this.items = items;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String getReserveNo() {
return reserveNo;
}
public void setReserveNo(String reserveNo) {
this.reserveNo = reserveNo;
}
public List<InvoicePiece> getPieces() {
return pieces;
}
public void setPieces(List<InvoicePiece> pieces) {
this.pieces = pieces;
}
}