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