示例#1
0
        private void hlbtnSplit_Click(object sender, RoutedEventArgs e)
        {
            HyperlinkButton  btn  = sender as HyperlinkButton;
            InvoiceProductVM data = btn.DataContext as InvoiceProductVM;

            if (data.InvoiceQuantity > 1) //如果商品的数量>1,则将此商品拆分到新的发票中
            {
                data.InvoiceQuantity--;
                var numberList = data.InvoiceNumberList;
                int newNo      = data.InvoiceNumberList.Count;

                InvoiceProductVM newData = new InvoiceProductVM
                {
                    InvoiceNo            = newNo,
                    Price                = data.Price,
                    ProductID            = data.ProductID,
                    ProductName          = data.ProductName,
                    ProductSysNo         = data.ProductSysNo,
                    Quantity             = data.Quantity,
                    StockSysNo           = data.StockSysNo,
                    IsExtendWarrantyItem = data.IsExtendWarrantyItem,
                    MasterProductSysNo   = data.MasterProductSysNo,
                    InvoiceQuantity      = 1
                };
                PageView.SplitedProductList.Add(newData);
            }
            SortInvoice();
        }
示例#2
0
        private void hlbtnDelete_Click(object sender, RoutedEventArgs e)
        {
            HyperlinkButton  btn  = sender as HyperlinkButton;
            InvoiceProductVM data = btn.DataContext as InvoiceProductVM;

            data.InvoiceNo = 1;

            SortInvoice();
        }
示例#3
0
        void SplitInvoice_Loaded(object sender, RoutedEventArgs e)
        {
            SOQueryFacade = new SOQueryFacade(Page);
            SOFacade      = new SOFacade(Page);
            int totalQty = 0;

            //need reload sovm
            SOQueryFacade.QuerySOInfo(m_soSysNo, vm =>
            {
                if (vm == null)
                {
                    Window.Alert(ResSO.Info_SOIsNotExist, ResSO.Info_SOIsNotExist, MessageType.Warning, (obj, args) =>
                    {
                        Window.Close();
                    });
                    return;
                }
                m_soVM = vm;
                m_soVM.ItemsVM.ForEach(soItem =>
                {
                    if (soItem.ProductType != SOProductType.Coupon)
                    {
                        if (soItem.ProductType != SOProductType.ExtendWarranty)
                        {
                            totalQty += soItem.Quantity.Value;
                        }

                        InvoiceProductVM invoiceProductVM = new InvoiceProductVM
                        {
                            InvoiceNo            = 1,
                            Price                = soItem.Price.Value,
                            ProductID            = soItem.ProductID,
                            ProductName          = soItem.ProductName,
                            ProductSysNo         = soItem.ProductSysNo.Value,
                            Quantity             = soItem.Quantity.Value,
                            StockSysNo           = soItem.StockSysNo,
                            InvoiceQuantity      = soItem.Quantity.Value,
                            IsExtendWarrantyItem = soItem.ProductType == SOProductType.ExtendWarranty
                        };

                        string[] mpSysNo = null;
                        if (soItem.MasterProductSysNo != null)
                        {
                            mpSysNo = soItem.MasterProductSysNo.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                        }

                        if (mpSysNo != null)
                        {
                            invoiceProductVM.MasterProductSysNo = invoiceProductVM.MasterProductSysNo ?? new List <int>();
                            mpSysNo.ForEach(n =>
                            {
                                int no; if (int.TryParse(n, out no))
                                {
                                    invoiceProductVM.MasterProductSysNo.Add(no);
                                }
                            });
                        }
                        PageView.OriginalProductList.Add(invoiceProductVM);
                    }
                });
                SOFacade.GetSOInvoiceList(m_soSysNo, PageView.OriginalProductList, (isSplited, invoiceList) =>
                {
                    if (isSplited)
                    {
                        PageView.SplitedProductList = invoiceList;
                        btnSave.IsEnabled           = false;
                        btnCancelSplit.IsEnabled    = true;
                    }
                    else
                    {
                        PageView.SplitedProductList = PageView.OriginalProductList.DeepCopy();
                        ECCentral.BizEntity.SO.SOStatus soStatus = m_soVM.BaseInfoVM.Status.Value;
                        btnSave.IsEnabled = totalQty > 1 &&
                                            (soStatus == ECCentral.BizEntity.SO.SOStatus.Origin ||
                                             soStatus == ECCentral.BizEntity.SO.SOStatus.WaitingOutStock ||
                                             soStatus == ECCentral.BizEntity.SO.SOStatus.Shipping);
                        btnCancelSplit.IsEnabled = false;
                    }
                    btnGroupSort.IsEnabled = btnSave.IsEnabled;
                    SortInvoice();
                });
            });
        }
示例#4
0
        /// <summary>
        /// 为发票排序
        /// </summary>
        private bool SortInvoice()
        {
            bool result = true;
            List <InvoiceProductVM> invoiceProductList = new List <InvoiceProductVM>();

            //合并同一发票中相同的商品
            PageView.SplitedProductList.ForEach(item =>
            {
                InvoiceProductVM oldItem = invoiceProductList.FirstOrDefault(i => item.ProductID == i.ProductID && item.InvoiceNo == i.InvoiceNo);
                if (oldItem == null)
                {
                    if (item.InvoiceQuantity > 0)
                    {
                        invoiceProductList.Add(item);
                    }
                }
                else
                {
                    oldItem.InvoiceQuantity += item.InvoiceQuantity;
                }
            });

            var quantityMoreThanOneList = (from item in PageView.OriginalProductList
                                           where item.Quantity > 1
                                           orderby item.ProductSysNo
                                           select item);

            //相关商品在所有发票中的数量总合小于购买数量则,将剩余的数量添加到发标编号为1的发票中
            quantityMoreThanOneList.ForEach(item =>
            {
                var tList = from tItem in invoiceProductList
                            where tItem.ProductID == item.ProductID
                            select tItem;
                var dItem = tList.FirstOrDefault(tItem => tItem.InvoiceNo == 1);
                var tq    = item.Quantity - tList.Sum(tItem => tItem.InvoiceQuantity);
                if (tq > 0)
                {
                    if (dItem == null)
                    {
                        dItem = new InvoiceProductVM
                        {
                            InvoiceNo            = 1,
                            Price                = item.Price,
                            ProductID            = item.ProductID,
                            ProductName          = item.ProductName,
                            ProductSysNo         = item.ProductSysNo,
                            Quantity             = item.Quantity,
                            StockSysNo           = item.StockSysNo,
                            IsExtendWarrantyItem = item.IsExtendWarrantyItem,
                            MasterProductSysNo   = item.MasterProductSysNo,
                            InvoiceQuantity      = tq
                        };
                        invoiceProductList.Add(dItem);
                    }
                    else
                    {
                        dItem.InvoiceQuantity += tq;
                    }
                }
                else if (tq < 0)
                {
                    this.Window.Alert(String.Format(ResSO.Msg_SplitInvoice_ProductQuantityIsError, item.ProductID));
                    result = false;
                    return;
                }
            });
            //按仓库,发票编号排序
            invoiceProductList.Sort((i1, i2) =>
            {
                int i = i1.StockSysNo.Value - i2.StockSysNo.Value;
                i     = i == 0 ? i1.InvoiceNo - i2.InvoiceNo : i;
                return(i == 0 ? i1.ProductSysNo - i2.ProductSysNo : i);
            });

            //为发票编号从0开始排序.
            Dictionary <int, List <KeyValuePair <int, string> > > stockInvoiceNumberDic = new Dictionary <int, List <KeyValuePair <int, string> > >();

            int oldStockSysNo = invoiceProductList[0].StockSysNo.Value;
            int oldInvoiceNo  = invoiceProductList[0].InvoiceNo;
            int invoiceIndex  = 1;

            for (int i = 0; i < invoiceProductList.Count; i++)
            {
                InvoiceProductVM item = invoiceProductList[i];
                if (!stockInvoiceNumberDic.ContainsKey(item.StockSysNo.Value))
                {
                    stockInvoiceNumberDic.Add(item.StockSysNo.Value, new List <KeyValuePair <int, string> >());
                    stockInvoiceNumberDic[item.StockSysNo.Value].AddRange(new KeyValuePair <int, string>[] { new KeyValuePair <int, string>(0, "New"), new KeyValuePair <int, string>(1, String.Format("{0}_1", item.StockSysNo)) });
                }
                if (oldStockSysNo == item.StockSysNo)
                {
                    if (oldInvoiceNo != item.InvoiceNo)
                    {
                        oldInvoiceNo = item.InvoiceNo;
                        invoiceIndex++;
                        stockInvoiceNumberDic[item.StockSysNo.Value].Add(new KeyValuePair <int, string>(invoiceIndex, String.Format("{0}_{1}", item.StockSysNo, invoiceIndex)));
                    }
                }
                else
                {
                    oldStockSysNo = item.StockSysNo.Value;
                    oldInvoiceNo  = item.InvoiceNo;
                    invoiceIndex  = 1;
                }
                item.InvoiceNo = invoiceIndex;
            }
            invoiceProductList.ForEach(item =>
            {
                item.InvoiceNumberList = stockInvoiceNumberDic[item.StockSysNo.Value];
            });
            //保存拆分排序结果
            PageView.SplitedProductList = invoiceProductList;
            return(result);
        }