package com.topsun.posclient.sales.ui.table;
import java.math.BigDecimal;
import java.util.List;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import com.topsun.posclient.common.ProjectUtil;
import com.topsun.posclient.common.ui.utils.FormatUtils;
import com.topsun.posclient.datamodel.CashierModel;
public class CashierModelItemCellModify implements ICellModifier {
public TableViewer tableViewer;
public Text cashBack;
public String price;
public Text discountAmount;//折扣金额
public Text zeroAmount;//抹零金额
public Text pointAmount;//积分抵扣
private Text factTotalAmount;//实际收金额
public Text getFactTotalAmount() {
return factTotalAmount;
}
public void setFactTotalAmount(Text factTotalAmount) {
this.factTotalAmount = factTotalAmount;
}
public Text getPointAmount() {
return pointAmount;
}
public void setPointAmount(Text pointAmount) {
this.pointAmount = pointAmount;
}
public Text getDiscountAmount() {
return discountAmount;
}
public void setDiscountAmount(Text discountAmount) {
this.discountAmount = discountAmount;
}
public Text getZeroAmount() {
return zeroAmount;
}
public void setZeroAmount(Text zeroAmount) {
this.zeroAmount = zeroAmount;
}
public Text getCashBack() {
return cashBack;
}
public void setCashBack(Text cashBack) {
this.cashBack = cashBack;
}
public CashierModelItemCellModify(TableViewer tableViewer,Text cashBack,String price){
this.tableViewer = tableViewer;
this.cashBack = cashBack;
this.price = price;
}
public boolean canModify(Object element, String property) {
if("amount".equals(property)){
return true;
}
if("cardno".equals(property)){
return true;
}
return false;
}
public Object getValue(Object element, String property) {
if(element instanceof CashierModel){
CashierModel cashierModel = (CashierModel)element;
if("amount".equals(property)){
return String.valueOf(cashierModel.getAmount());
}
if("cardno".equals(property)){
return String.valueOf(cashierModel.getCardNumber());
}
}
return null;
}
public void modify(Object element, String property, Object value) {
if(element instanceof TableItem){
TableItem item = (TableItem)element;
CashierModel cashierModel = (CashierModel)item.getData();
if("amount".equals(property)){
if("".equals(value.toString().trim())){
return;
}
if(value.toString().equals("0.0")){
cashierModel.setAmount(new BigDecimal(0));
cashierModel.setMakeup(new BigDecimal(0));
}else{
boolean flag = FormatUtils.chenckNumFormat(tableViewer.getTable(), value.toString(), "【金额】格式错误");
if(!flag){
return;
}
BigDecimal amount = new BigDecimal(value.toString());
amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
cashierModel.setAmount(amount);
List<CashierModel> models = (List<CashierModel>)tableViewer.getInput();
BigDecimal totalPay = new BigDecimal(0);
BigDecimal makeUpPay = new BigDecimal(0);
BigDecimal noMakeUpPay = new BigDecimal(0);
for(CashierModel cm : models){
totalPay = totalPay.add(cm.getAmount());
if(cm.getIsNoMakeup() == 0){
makeUpPay = makeUpPay.add(cm.getAmount());
}else{
noMakeUpPay = noMakeUpPay.add(cm.getAmount());
}
}
if(getFactTotalAmount() == null){
if(totalPay.compareTo(ProjectUtil.formatString(this.price)) == -1){
tableViewer.refresh();
cashBack.setText("0.00");
cashierModel.setMakeup(new BigDecimal(0));
return;
}
}else{
//收款方式之和小于实收款,刷新与设置找补金额为0
// if(totalPay.compareTo(ProjectUtil.formatString(getFactTotalAmount().getText())) == -1){
// tableViewer.refresh();
// cashBack.setText("0.00");
// cashierModel.setMakeup(new BigDecimal(0));
// return;
// }
}
if(totalPay.compareTo(new BigDecimal(0)) == 0){
cashBack.setText("0.00");
cashierModel.setMakeup(new BigDecimal(0));
}else{
BigDecimal big_Price = ProjectUtil.formatString(price);
BigDecimal big_DisAmount = new BigDecimal(0);
BigDecimal big_Zore = new BigDecimal(0);
BigDecimal big_point = new BigDecimal(0);
if(discountAmount!= null){
big_DisAmount = ProjectUtil.formatString(discountAmount.getText());
}
if(zeroAmount!= null){
big_Zore = ProjectUtil.formatString(zeroAmount.getText());
}
if(pointAmount!= null){
big_point = ProjectUtil.formatString(pointAmount.getText());
}
Text factAmountText = getFactTotalAmount();
BigDecimal factAmount = new BigDecimal(0);
if(factAmountText == null){
factAmount = ProjectUtil.formatString(this.price);
}else{
String factAmountStr = factAmountText.getText();
factAmount = ProjectUtil.formatString(factAmountStr);
}
//收银方式中找补项的收款合计金额”大于0
if((makeUpPay.compareTo(new BigDecimal(0)) == 1)){
//实收金额 > 不找补项金额合计
if(factAmount.compareTo(noMakeUpPay) == 1){
// BigDecimal big_CashBack = factAmount.subtract(noMakeUpPay).subtract(makeUpPay);
BigDecimal big_CashBack = noMakeUpPay.add(makeUpPay).subtract(factAmount);
// if(big_CashBack.compareTo(new BigDecimal(0)) == -1){
// big_CashBack = big_CashBack.abs();
// }
cashBack.setText(ProjectUtil.formatAmount(null, big_CashBack));
//实收金额 <= 不找补项金额合计
}else if(factAmount.compareTo(noMakeUpPay) == -1 || factAmount.compareTo(noMakeUpPay) == 0){
BigDecimal big_CashBack = makeUpPay;
if(big_CashBack.compareTo(new BigDecimal(0)) == -1){
big_CashBack = big_CashBack.abs();
}
cashBack.setText(ProjectUtil.formatAmount(null, big_CashBack));
}
//收银方式中的找补项的收款金额小于等于0
}else if(makeUpPay.compareTo(new BigDecimal(0)) == -1 || makeUpPay.compareTo(new BigDecimal(0)) == 0){
cashBack.setText("");
}
}
}
String makeup = cashBack.getText();
if(makeup != null){
cashierModel.setMakeup(ProjectUtil.formatString(makeup));
}else{
cashierModel.setMakeup(new BigDecimal(0));
}
tableViewer.refresh();
}
if("cardno".equals(property)){
String cardNo = String.valueOf(value);
if(cardNo.length() > 20){
MessageDialog.openError(tableViewer.getTable().getShell(), "错误", "【卡号】长度超过20");
return;
}
cashierModel.setCardNumber(cardNo);
}
tableViewer.refresh();
}
}
}