コード例 #1
0
    protected void btnConfirm_Click(object sender, EventArgs e)
    {
        try
        {
            IList <ActingBill> actingBillList = this.ucNewList.PopulateSelectedData();
            IList <Bill>       billList       = TheBillMgr.CreateBill(actingBillList, this.CurrentUser);
            this.ShowSuccessMessage("MasterData.Bill.CreateSuccessfully", billList[0].BillNo);

            if (this.IsRelease.Checked)
            {
                TheBillMgr.ReleaseBill(billList[0].BillNo, this.CurrentUser);
                this.ShowSuccessMessage("MasterData.Bill.ReleaseSuccessfully", billList[0].BillNo);
            }
            this.PageCleanUp();
            CreateEvent(billList[0].BillNo, null);
        }
        catch (BusinessErrorException ex)
        {
            this.ShowErrorMessage(ex);
        }
    }
コード例 #2
0
    protected void btnUpload_Click(object sender, EventArgs e)
    {
        try
        {
            HSSFWorkbook excel         = new HSSFWorkbook(fileUpload.PostedFile.InputStream);
            Sheet        sheet         = excel.GetSheetAt(0);
            IEnumerator  rows          = sheet.GetRowEnumerator();
            Row          custrow       = sheet.GetRow(2);
            string       cust          = custrow.GetCell(1).StringCellValue;//客户代码
            Customer     customer      = TheCustomerMgr.LoadCustomer(cust);
            Row          row_startdate = sheet.GetRow(3);
            string       startdate     = row_startdate.GetCell(1).StringCellValue; //开始日期
            Row          row_enddate   = sheet.GetRow(4);
            string       enddate       = row_enddate.GetCell(1).StringCellValue;   //结束日期
            startdate = startdate == string.Empty ? DateTime.Now.AddMonths(-1).ToShortDateString() : startdate;
            enddate   = enddate == string.Empty ? DateTime.Now.ToShortDateString() : enddate;
            IList <ActingBill> actingBillList = TheActingBillMgr.GetActingBill(cust, "", DateTime.Parse(startdate), DateTime.Parse(enddate), "", "", this.ModuleType, this.billNo);

            var actbill = (from i in actingBillList//按ASN ITME聚合 得到总的可用数量
                           group i by new
            {
                i.IpNo,
                i.Item.Code
            } into k
                           select new
            {
                Item = k.Key.Code,
                IpNo = k.Key.IpNo,
                Amt = k.Sum(i => i.BillQty - i.BilledQty)
            }).ToList();

            ImportHelper.JumpRows(rows, 7);
            IList <ActingBill> createBillList = new List <ActingBill>();
            IList <Bill>       createdBill    = new List <Bill>();

            while (rows.MoveNext())
            {
                Row    curow = (HSSFRow)rows.Current;
                string asn   = curow.GetCell(0).StringCellValue;
                string item  = curow.GetCell(1).NumericCellValue.ToString();

                decimal qty = decimal.Parse(curow.GetCell(2).NumericCellValue.ToString());
                if (asn != string.Empty)
                {
                    var temp_qty = actbill.Where(i => i.Item == item && i.IpNo == asn).ToList();
                    if (temp_qty.Count > 0)
                    {
                        if (Math.Abs(temp_qty[0].Amt) - Math.Abs(qty) >= 0)
                        {
                            IList <ActingBill> result = actingBillList.Where(i => i.Item.Code == item && i.IpNo == asn).ToList();
                            foreach (ActingBill _actbill in result)
                            {
                                if (qty == 0)
                                {
                                    break;          //扣减完了
                                }
                                if (_actbill.BillQty - _actbill.BilledQty - _actbill.CurrentBillQty == 0)
                                {
                                    continue;                                                                      //actbill可用数量用完了
                                }
                                //if (_actbill.BillQty - _actbill.BilledQty - _actbill.CurrentBillQty - qty >= 0)
                                //{
                                //    _actbill.CurrentBillQty = _actbill.CurrentBillQty + qty;
                                //    qty = 0;
                                //}
                                //else
                                //{
                                //    _actbill.CurrentBillQty = _actbill.BillQty - _actbill.BilledQty - _actbill.CurrentBillQty;
                                //    qty = qty - _actbill.BillQty - _actbill.BilledQty - _actbill.CurrentBillQty;
                                //}
                                if (_actbill.BillQty > 0)
                                {
                                    if (_actbill.BillQty - _actbill.BilledQty - _actbill.CurrentBillQty - qty >= 0)
                                    {
                                        _actbill.CurrentBillQty = _actbill.CurrentBillQty + qty;
                                        qty = 0;
                                    }
                                    else
                                    {
                                        _actbill.CurrentBillQty = _actbill.BillQty - _actbill.BilledQty - _actbill.CurrentBillQty;
                                        qty = qty - _actbill.CurrentBillQty;
                                    }
                                }
                                else
                                {
                                    if (_actbill.BillQty - _actbill.BilledQty - _actbill.CurrentBillQty - qty <= 0)
                                    {
                                        _actbill.CurrentBillQty = _actbill.CurrentBillQty + qty;
                                        qty = 0;
                                    }
                                    else
                                    {
                                        _actbill.CurrentBillQty = _actbill.BillQty - _actbill.BilledQty - _actbill.CurrentBillQty;
                                        qty = qty - _actbill.CurrentBillQty;
                                    }
                                }
                                createBillList.Add(_actbill);
                            }
                        }
                        else
                        {
                            ShowErrorMessage("行" + (curow.RowNum + 1).ToString() + "数量大于剩余开票数量!");
                            return;
                        }
                    }
                    else
                    {
                        ShowErrorMessage("行" + (curow.RowNum + 1).ToString() + " ASN或零件不存在!请查询对应记录后再导入!");
                        return;
                    }
                }
            }
            int cnt = 0;
            try
            {
                while (0 < createBillList.Count)
                {
                    cnt++;
                    var t = from i in createBillList
                            group i by new
                    {
                        i.Item.Code
                    } into k
                        select new
                    {
                        Item = k.Key.Code,
                        Amt  = k.Sum(i => i.CurrentBillQty * i.UnitPrice)
                    };

                    List <string> abM   = new List <string>();
                    List <string> zeroM = new List <string>();
                    foreach (var i in t)
                    {
                        if (i.Amt > 1000000)
                        {
                            abM.Add(i.Item);
                        }
                        if (i.Amt == 0 && cnt == 1)
                        {
                            zeroM.Add(i.Item);
                        }
                    }

                    #region 超过100w的
                    foreach (string s in abM)
                    {
                        IList <ActingBill> tempList = createBillList.Where(i => i.Item.Code == s).OrderByDescending(i => i.UnitPrice * i.CurrentBillQty).ToList();
                        IList <ActingBill> amtList  = new List <ActingBill>();
                        decimal            amount   = 0;
                        foreach (ActingBill act in tempList)
                        {
                            if (amount + act.CurrentBillQty * act.UnitPrice <= 1000000)
                            {
                                amtList.Add(act);
                                amount += act.CurrentBillQty * act.UnitPrice;
                            }
                            else if (act.CurrentBillQty * act.UnitPrice > 1000000)
                            {
                                decimal qty = Math.Round(1000000 / act.UnitPrice, 0);
                                act.CurrentBillQty = qty;
                                amtList.Add(act);
                            }
                            else
                            {
                                continue;
                            }
                        }

                        if (amtList.Count > 0)
                        {
                            IList <Bill> billList = TheBillMgr.CreateBill(amtList, this.CurrentUser);
                            createdBill.Add(billList[0]);
                        }
                        foreach (ActingBill act in amtList)
                        {
                            if (Math.Round(1000000 / act.UnitPrice, 0) > act.CurrentBillQty)
                            {
                                createBillList.Remove(act);
                            }
                            else
                            {
                                act.CurrentBillQty = act.BillQty - act.BilledQty - Math.Round(1000000 / act.UnitPrice, 0) * cnt;
                            }
                        }
                    }

                    #endregion
                    #region 未超过100w的
                    List <string> normal = new List <string>();
                    var           bAm    = (from i in createBillList
                                            group i by new
                    {
                        i.Item.Code
                    } into k
                                            select new
                    {
                        Item = k.Key.Code,
                        Amt = k.Sum(i => i.CurrentBillQty * i.UnitPrice)
                    }).Where(i => i.Amt < 1000000 && i.Amt != 0).OrderByDescending(i => i.Amt).ToList();
                    while (bAm.Count > 0)
                    {
                        decimal        tempAmt   = 0;
                        IList <string> tempGroup = new List <string>();
                        foreach (var i in bAm)
                        {
                            if (i.Amt + tempAmt <= 1000000)
                            {
                                tempGroup.Add(i.Item);
                                tempAmt += i.Amt;
                            }
                            else
                            {
                                continue;
                            }
                        }
                        List <ActingBill> tempAct = new List <ActingBill>();
                        foreach (string item in tempGroup)
                        {
                            List <ActingBill> _tempAct = (createBillList.Where(i => i.Item.Code == item)).ToList();
                            foreach (ActingBill bill in _tempAct)
                            {
                                tempAct.Add(bill);
                            }
                        }
                        for (int i = bAm.Count; i > 0; i--)
                        {
                            if (tempGroup.Contains(bAm[i - 1].Item))
                            {
                                bAm.Remove(bAm[i - 1]);
                                i = bAm.Count + 1;
                            }
                        }
                        if (tempAct.Count > 0)
                        {
                            IList <Bill> billList = TheBillMgr.CreateBill(tempAct, this.CurrentUser);
                            createdBill.Add(billList[0]);
                        }
                        foreach (ActingBill bill in tempAct)
                        {
                            createBillList.Remove(bill);
                        }
                    }


                    #endregion
                    if (zeroM.Count > 0 && cnt == 1)
                    {
                        foreach (string code in zeroM)
                        {
                            IList <ActingBill> tempList = createBillList.Where(i => i.Item.Code == code).OrderByDescending(i => i.UnitPrice * i.CurrentBillQty).ToList();
                            if (tempList.Count > 0)
                            {
                                if (createdBill.Count > 0)
                                {
                                    TheBillMgr.AddBillDetail(createdBill[0], tempList, this.CurrentUser);
                                }
                                else
                                {
                                    IList <Bill> billList = TheBillMgr.CreateBill(tempList, this.CurrentUser);
                                    createdBill.Add(billList[0]);
                                }
                            }
                            foreach (ActingBill actb in tempList)
                            {
                                createBillList.Remove(actb);
                            }
                        }
                    }
                }
            }
            catch (BusinessErrorException ex)
            {
                ShowErrorMessage(ex);
            }
            catch (Exception ex)
            {
                ShowErrorMessage(ex.Message);
            }
            _createdBillNo += " 已创建以下账单:<br/>";
            foreach (Bill b in createdBill)
            {
                _createdBillNo += b.BillNo + "<br />";
            }


            #region output result xls
            if (createdBill != null && createdBill.Count > 0)
            {
                this.btnBack_Click(sender, e);

                ExportResult(createdBill);
            }
            #endregion
        }
        catch (Exception exception)
        {
            ShowErrorMessage(exception.Message);
        }
    }