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(); } } }