package com.topsun.posclient.sales.ui.gold;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import com.topsun.posclient.common.AppConstants;
import com.topsun.posclient.common.POSClientApp;
import com.topsun.posclient.common.POSException;
import com.topsun.posclient.common.ProjectUtil;
import com.topsun.posclient.common.service.IBaseService;
import com.topsun.posclient.common.service.impl.BaseServiceImpl;
import com.topsun.posclient.datamodel.Item;
import com.topsun.posclient.datamodel.PartSales;
import com.topsun.posclient.datamodel.RetailFP;
import com.topsun.posclient.datamodel.User;
import com.topsun.posclient.sales.MessageResources;
import com.topsun.posclient.sales.core.PartSalesPrintData;
import com.topsun.posclient.sales.core.service.IPartSaleService;
import com.topsun.posclient.sales.core.service.IReturnedService;
import com.topsun.posclient.sales.core.service.impl.PartSaleServiceImpl;
import com.topsun.posclient.sales.core.service.impl.ReturnedServiceImpl;
public class ReturnedFacade extends CommonFacade {
/**
* /**
* 重置退换货视图
* @throws POSException
*/
public static void restReturnedView() throws POSException{
IBaseService baseService = new BaseServiceImpl();
TableViewer tableViewer = ReturnedManager.getInstance().getReturnedTableView();
tableViewer.setInput(null);
tableViewer.refresh();
Text text = ReturnedManager.getInstance().getDocNum();
text.setText(baseService.createNo(AppConstants.DOC_TYPE_RETURNED));
Text oldDocNum = ReturnedManager.getInstance().getOldDocNum();
Text barCode = ReturnedManager.getInstance().getBarCode();
oldDocNum.setText("");
barCode.setText("");
ReturnedManager.getInstance().setCurrentDocNum(new StringBuffer());
caculatorReturnedPrice();
}
/**
* 获取当前零售窗口选中的ITEM
* @return
*/
public static Item getCurrentSelectionItem() {
TableViewer tableViewer = ReturnedManager.getInstance().getReturnedTableView();
ISelection iSelection = tableViewer.getSelection();
if (iSelection instanceof StructuredSelection) {
StructuredSelection selection = (StructuredSelection) iSelection;
Object obj = selection.getFirstElement();
if (obj instanceof Item) {
Item item = (Item) obj;
return item;
}
}
return null;
}
public static List<Item> getCurrentItemList() {
TableViewer tableViewer = ReturnedManager.getInstance().getReturnedTableView();
return (List<Item>)tableViewer.getInput();
}
/**
* 计算总价
*/
public static void caculatorReturnedPrice() {
Label salesPriceLable = ReturnedManager.getInstance().getReturnedTotlePrice();
TableViewer tableViewer = ReturnedManager.getInstance().getReturnedTableView();
TableItem[] items = tableViewer.getTable().getItems();
BigDecimal totle = new BigDecimal(0);
for (TableItem tableItem : items) {
String price = tableItem.getText(8);
String oldFoldDisStr = tableItem.getText(11);
BigDecimal bigDecimal = ProjectUtil.formatString(price);
BigDecimal oldFoldDis = ProjectUtil.formatString(oldFoldDisStr);
totle = totle.add(bigDecimal.add(oldFoldDis));
}
salesPriceLable.setText(ProjectUtil.formatAmount(null, totle));
}
/**
* 删除金品ITEM
*
* @param control
*/
public static void delGoldSaleItemListener(Control control) {
if (control instanceof Button) {
Button button = (Button) control;
button.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
TableViewer tableViewer = ReturnedManager.getInstance()
.getReturnedTableView();
ISelection iSelection = tableViewer.getSelection();
if (iSelection instanceof IStructuredSelection) {
IStructuredSelection iStructuredSelection = (IStructuredSelection) iSelection;
Object obj = iStructuredSelection.getFirstElement();
if (obj instanceof Item) {
Item item = (Item) obj;
Object itemList = tableViewer.getInput();
if (itemList == null) {
return;
} else {
if (itemList instanceof List) {
List list = (List) itemList;
list.remove(item);
}
}
tableViewer.refresh();
caculatorReturnedPrice();
}
}
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
}
}
/**
* 添加退换信息
*
* @param control
* @param tableViewer
*/
public static void addSalesItemListener(Control control) {
control.addKeyListener(new KeyListener() {
public void keyReleased(KeyEvent e) {
Text text = null;
if (e.keyCode == SWT.CR) {
String inputBarCode = "";
if (e.getSource() instanceof Text) {
text = (Text) e.getSource();
inputBarCode = text.getText();
}
TableViewer tableViewer = ReturnedManager.getInstance().getReturnedTableView();
try {
IBaseService baseService = new BaseServiceImpl();
Item item = baseService.getItemByBarCode(inputBarCode);
if (item == null) {
MessageDialog.openError(tableViewer.getControl().getShell(), MessageResources.message_ui_tips, "没有找到相应的单品信息");
text.setText("");
return;
}
List<Item> tableObj = (List<Item>)tableViewer.getInput();
if(null != tableObj){
for (Item existObj : tableObj) {
if(existObj.getItemType().equals(AppConstants.ITEM_TYPE_RETURNED)){
continue;
}
if(inputBarCode.equals(existObj.getItemCode())){
MessageDialog.openError(tableViewer.getControl().getShell(), MessageResources.message_ui_tips, "列表中已存在相同的单品信息");
text.setText("");
return;
}
}
}
int userId = POSClientApp.get().getLoginUser().getId();
Map<Integer,User> map = POSClientApp.get().getUserRelation();
Iterator<Entry<Integer, User>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, User> value = (Map.Entry<Integer, User>) it.next();
if(value.getValue().getId() == userId){
item.setCashier(value.getValue().getId());
}
}
item.setCashierName("");
item.setFactZJGF(item.getZJGF());//实际工费默认等于原工费
//是素金并且标签价==0
if(isSuGold(item.getMatkl()) && (item.getZMDLSBQJ().compareTo(new BigDecimal(0.00)) == 0 || null == item.getZMDLSBQJ())){
IReturnedService returnedService = new ReturnedServiceImpl();
BigDecimal gPrice = returnedService.getServerGoldPrice(item.getMatkl());
item.setPrice(gPrice);
item.setZMDLSBQJ(item.getZDPYZL().multiply(gPrice));
}else{
item.setPrice(item.getZMDLSBQJ());
}
if(isSuGold(item.getMatkl())){//素金产品为克重*单价+加工费,非素金产品为单价
item.setSalesAmount(item.getZMDLSBQJ().add(item.getFactZJGF()));
}else{
item.setSalesAmount(item.getZMDLSBQJ());
}
item.setFactAmount(item.getSalesAmount());//实售为应售+加工费
item.setPretlAmount(new BigDecimal(0.00));
item.setItemType(AppConstants.ITEM_TYPE_RETURNED_NEW);
item.setItemStatus(AppConstants.ITEM_STATU_NORMAL);
//update by tandong,因为添加了payAmount属性,
// 换货时添加的新品payAmount默认等于factAmount,因为后面结算没有其他折扣和抵扣修改这个金额,这里设置默认值是合理的
item.setPayAmount(item.getFactAmount());
Object obj = tableViewer.getInput();
if (obj == null) {
List<Item> list = new ArrayList<Item>();
list.add(item);
tableViewer.setInput(list);
} else {
if (obj instanceof List) {
List list = (List) obj;
list.add(item);
tableViewer.setInput(list);
}
}
ReturnedFacade.caculatorReturnedPrice();
tableViewer.refresh();
} catch (POSException e1) {
MessageDialog.openError(((Control)e.getSource()).getShell(), MessageResources.message_ui_tips, e1.getErrorMessage());
text.setText("");
return;
}
text.setText("");
}
}
public void keyPressed(KeyEvent e) {
}
});
}
private static boolean isExitsInvoiceNumData(String invoiceNum){
TableViewer tableViewer = ReturnedManager.getInstance().getReturnedTableView();
List<Item> list = (List<Item>)tableViewer.getInput();
if(list == null){
return false;
}
if(list.size() == 0){
return false;
}
List<Item> returnedItem = new ArrayList<Item>();
for (Item item : returnedItem) {
String docNum = item.getDocNum();
if(invoiceNum.equals(docNum)){
return true;
}
}
for (Item item : list) {
if(item.getItemType().equals(AppConstants.ITEM_TYPE_RETURNED)){
returnedItem.add(item);
}
}
if(returnedItem.size() == 0){
return false;
}
return true;
}
/**
* 原发票号、条形码等回车事件
* @param inputDocNum
* @param barCode
* @param tableViewer
*/
public static void addDocNumListener(final Text inputInvoiceNumber,final Text inputInvoiceCode,final Text barCode,final TableViewer tableViewer){
inputInvoiceNumber.addKeyListener(new KeyListener() {
public void keyReleased(KeyEvent e) {
PartSales partSales;
if (e.keyCode == SWT.CR) {
String invoiceNumber = inputInvoiceNumber.getText();
String invoiceCode = inputInvoiceCode.getText();
IReturnedService returnedService = new ReturnedServiceImpl();
if(null == invoiceCode || "".equals(invoiceCode)){
MessageDialog.openInformation(tableViewer.getTable().getShell(), MessageResources.message_ui_tips, "请输入【发票代码】");
inputInvoiceCode.setFocus();
return;
}
if(null == invoiceNumber || "".equals(invoiceNumber)){
MessageDialog.openInformation(tableViewer.getTable().getShell(), MessageResources.message_ui_tips, "请输入【发票号码】");
inputInvoiceNumber.setFocus();
return;
}
if(isExitsInvoiceNumData(invoiceNumber)){
MessageDialog.openError(tableViewer.getTable().getShell(), MessageResources.message_ui_tips, "发票号码【"+invoiceNumber+"】对应的数据已在列表中");
barCode.setText("");
inputInvoiceNumber.setText("");
inputInvoiceCode.setText("");
return;
}
try {
partSales = returnedService.queryReturnedItemsByInvoiceNum(invoiceNumber, invoiceCode);
} catch (POSException e1) {
inputInvoiceNumber.setText("");
inputInvoiceCode.setText("");
MessageDialog.openError(tableViewer.getTable().getShell(), MessageResources.message_ui_tips, e1.getErrorMessage());
return;
}
Object obj = tableViewer.getInput();
if (obj == null) {
List<Item> list = new ArrayList<Item>();
if(null != partSales){
list.addAll(partSales.getItemList());
tableViewer.setInput(list);
}
} else {
if (obj instanceof List) {
List list = (List) obj;
if(null != partSales.getItemList() && partSales.getItemList().size() > 0){
list.addAll(partSales.getItemList());
tableViewer.setInput(list);
}
}
}
ReturnedManager.getInstance().setPartSales(partSales);
ReturnedManager.getInstance().getCurrentDocNum().append(invoiceNumber+",");
ReturnedFacade.caculatorReturnedPrice();
tableViewer.refresh();
barCode.setText("");
inputInvoiceNumber.setText("");
inputInvoiceCode.setText("");
}
}
public void keyPressed(KeyEvent e) {
}
});
}
/**
* 添加退货新品信息
* @param inputDocNum
* @param inputBarCode
* @param tableViewer
* @throws POSException
*/
public static void addTableItem(String inputDocNum, String inputBarCode, TableViewer tableViewer) throws POSException{
IPartSaleService partSaleService = new PartSaleServiceImpl();
Item item = partSaleService.getItemByBarCode(inputBarCode);
if (item == null) {
MessageDialog.openError(tableViewer.getControl().getShell(), MessageResources.message_ui_tips, "没有找到相应的单品信息");
return;
}
List<Item> tableObj = (List<Item>)tableViewer.getInput();
if(null != tableObj){
for (Item existObj : tableObj) {
if(existObj.getItemType().equals(AppConstants.ITEM_TYPE_RETURNED)){
continue;
}
if(inputBarCode.equals(existObj.getItemCode())){
throw new POSException("列表中已存在相同的单品信息");
}
}
}
item.setFactZJGF(item.getZJGF());//实际工费默认等于原工费
//是素金并且标签价==0
if(isSuGold(item.getMatkl()) && (item.getZMDLSBQJ().compareTo(new BigDecimal(0.00)) == 0 || null == item.getZMDLSBQJ())){
IReturnedService returnedService = new ReturnedServiceImpl();
BigDecimal gPrice = returnedService.getServerGoldPrice(item.getMatkl());
item.setPrice(gPrice);
item.setZMDLSBQJ(item.getZDPZL().multiply(gPrice));
}else{
item.setPrice(item.getZMDLSBQJ());
}
if(isSuGold(item.getMatkl())){//素金产品为克重*单价+加工费,非素金产品为单价
item.setSalesAmount(item.getZMDLSBQJ().add(item.getFactZJGF()));
}else{
item.setSalesAmount(item.getZMDLSBQJ());
}
item.setFactAmount(item.getSalesAmount());//实售为应售+加工费
item.setPretlAmount(new BigDecimal(0.00));
item.setItemType(AppConstants.ITEM_TYPE_RETURNED_NEW);
item.setItemStatus(AppConstants.ITEM_STATU_NORMAL);
item.setDocNum(inputDocNum);
item.setPayAmount(item.getFactAmount());
Object obj = tableViewer.getInput();
if (obj == null) {
List<Item> list = new ArrayList<Item>();
list.add(item);
tableViewer.setInput(list);
} else {
if (obj instanceof List) {
List list = (List) obj;
list.add(item);
tableViewer.setInput(list);
}
}
ReturnedFacade.caculatorReturnedPrice();
tableViewer.refresh();
}
/**
* 添加无源退货
* @param tableViewer
* @throws POSException
*/
public static void addUnSourcesTableItem(TableViewer tableViewer) throws POSException{
Item item = new Item();
item.setFactAmount(new BigDecimal(0));
item.setSalesAmount(new BigDecimal(0));
item.setZMDLSBQJ(new BigDecimal(0));
item.setZDPYZL(new BigDecimal(0));
item.setZDPZL(new BigDecimal(0));
item.setHasGiveaway(0);
item.setIsOldGold(0);
item.setPretlAmount(new BigDecimal(0));
item.setItemType(AppConstants.ITEM_TYPE_UNRETURNED);
item.setItemStatus(AppConstants.ITEM_STATU_RETURN);
item.setZJGF(new BigDecimal(0));
item.setCashierName("");
item.setFactZJGF(new BigDecimal(0));
item.setPayAmount(item.getFactAmount());
Object obj = tableViewer.getInput();
if (obj == null) {
List<Item> list = new ArrayList<Item>();
list.add(item);
tableViewer.setInput(list);
} else {
if (obj instanceof List) {
List list = (List) obj;
if(null != list){
list.add(item);
tableViewer.setInput(list);
}
}
}
ReturnedFacade.caculatorReturnedPrice();
tableViewer.refresh();
}
/**
* 退货开废票,大于10W拆票
* @param partSales
* @return
* @throws POSException
*/
public static List<RetailFP> getRetailFPFromPartSalesForReturn(PartSales partSales) throws POSException{
PartSales printPartSales = new PartSalesPrintData().convertPartSalesForChaiPiao(partSales);
List<RetailFP> retailFps = new ArrayList<RetailFP>();
if(null == printPartSales){
return retailFps;
}
if(null == printPartSales.getItemList() || printPartSales.getItemList().size() == 0){
return retailFps;
}
BigDecimal invoiceAmount = new BigDecimal(0);//开票金额
for(Item item : printPartSales.getItemList()){
//退货的开票金额=payAmount+旧金抵扣,总和为复数
BigDecimal oldAmount = item.getOldGoldAmount();
if(null == oldAmount){
oldAmount = new BigDecimal(0);
}
if(oldAmount.compareTo(BigDecimal.ZERO) == 1){
oldAmount = oldAmount.multiply(new BigDecimal(-1));
}
invoiceAmount = invoiceAmount.add(null == item.getPayAmount()?new BigDecimal(0):item.getPayAmount()).add(oldAmount);
RetailFP retailFP = new RetailFP();;
retailFP.setType("4");
retailFP.setUsedDate(ProjectUtil.getCurrentDateByFormat(null));
retailFP.setKPRID(String.valueOf(POSClientApp.get().getLoginUser().getId()));
retailFP.setShopID(POSClientApp.get().getSysConfig().getOwnerShop());
IBaseService baseService = new BaseServiceImpl();
// Invoice currentInvoice = baseService.getInvoice();
// if(null == currentInvoice){
// throw new POSException("发票已用完,请同步发票数据");
// }
retailFP.setFPMSID("");
retailFP.setFPDM("");
retailFP.setFPH("");
retailFP.setItemID(String.valueOf(item.getId()));
retailFP.setItemCode(item.getItemCode());
retailFP.setInvoiceAmount(ProjectUtil.formatAmount(null, invoiceAmount));
retailFP.setOldFPH(item.getInvoceNumber());
retailFP.setPOS(POSClientApp.get().getSysConfig().getPosNo());
retailFps.add(retailFP);
}
return retailFps;
}
}