Beispiel #1
0
        private async Task <string> SaveToERPAsync(string docId)
        {
            ERPservicesSoapClient ERPWebServices = new ERPservicesSoapClient(ERPservicesSoapClient.EndpointConfiguration.ERPservicesSoap);
            string msg = "";
            //
            ERPRepHead hd = new ERPRepHead();

            hd.BIL_NO = docId;
            hd.PS_DD  = DateTime.Now.Date;
            hd.SAL_NO = User.Identity.Name;
#if DEBUG
            hd.SAL_NO = "344033";
#endif
            //Get repair doc's stock.
            var repairCosts = _context.BMEDRepairCosts.Where(rc => rc.DocId == docId).ToList();
            if (repairCosts.Count() > 0)
            {
                var stocks = repairCosts.Where(rc => rc.StockType == "0").OrderBy(rc => rc.SeqNo).ToList();
                if (stocks.Count() > 0)
                {
                    int i = 1;
                    List <ERPRepBody> body = new List <ERPRepBody>();
                    foreach (var stock in stocks)
                    {
                        body.Add(new ERPRepBody
                        {
                            ITM      = i,
                            PRD_NO   = stock.PartNo.ToString(),
                            PRD_NAME = stock.PartName.ToString(),
                            QTY      = Convert.ToDecimal(stock.Qty),
                            UP       = Convert.ToDecimal(stock.Price),
                            AMT      = Convert.ToDecimal(stock.TotalCost)
                        });
                        i++;
                    }
                    //
                    string mf       = JsonConvert.SerializeObject(hd);
                    string bf       = JsonConvert.SerializeObject(body);
                    var    response = await ERPWebServices.PostRepStuffAsync(mf, bf);

                    msg = response.Body.PostRepStuffResult;
                    //回傳銷貨單號,回寫至請修單主檔
                    var repair = _context.BMEDRepairs.Find(docId);
                    if (repair != null)
                    {
                        repair.SalesDocId            = msg;
                        _context.Entry(repair).State = EntityState.Modified;
                        _context.SaveChanges();
                    }
                }
            }
            return(msg);
        }
Beispiel #2
0
        /// <summary>
        /// Sync Stock to ERP system.
        /// </summary>
        /// <param name="docId"></param>
        /// <returns></returns>
        private async Task<string> SaveToERPAsync(string docId)
        {
            ERPservicesSoapClient ERPWebServices = new ERPservicesSoapClient(ERPservicesSoapClient.EndpointConfiguration.ERPservicesSoap);
            string msg = "";
            //
            var keep = _context.BMEDKeeps.Find(docId);
            ERPRepHead hd = new ERPRepHead();
            hd.ZHANG_ID = "2";
            hd.ADD = 0;
            hd.BIL_NO = "K" + docId;
            hd.PS_DD = DateTime.Now.Date;
            hd.SAL_NO = User.Identity.Name;
            //Get SAL_NO
            var salStocks = _context.BMEDKeepCosts.Where(rc => rc.DocId == docId)
                                                  .Where(rc => rc.StockType == "0").ToList();
            var salTickets = _context.BMEDKeepCosts.Where(rc => rc.DocId == docId)
                                                   .Where(rc => rc.StockType == "2").ToList();
            if (salStocks.Count() > 0)
            {
                var salId = salStocks.FirstOrDefault().Rtp;
                var user = _context.AppUsers.Find(salId);
                hd.SAL_NO = user.UserName;
            }
            else
            {
                var salId = salTickets.OrderByDescending(s => s.Rtt).FirstOrDefault().Rtp;
                var user = _context.AppUsers.Find(salId);
                hd.SAL_NO = user.UserName;
            }
#if DEBUG
            hd.SAL_NO = "344033";
#endif
            if (keep != null)
            {
                hd.CUS_NO = keep.AccDpt;
                var asset = _context.BMEDAssets.Find(keep.AssetNo);
                if (asset != null)
                {
                    hd.WEBMAC = asset.Type;
                    hd.WEBITM = asset.MakeNo;
                }
                if (!string.IsNullOrEmpty(keep.SalesDocId))
                {
                    hd.ADD = 1;
                }
            }
            //Get keep doc's costs.
            DateTime? ticketDate = null;
            var keepCosts = _context.BMEDKeepCosts.Where(rc => rc.DocId == docId).ToList();
            if (keepCosts.Count() > 0)
            {
                // 讀取庫存明細 (2020/9/30增加發票明細)
                var stocks = keepCosts.Where(rc => rc.StockType == "0" || rc.StockType == "2").OrderBy(rc => rc.SeqNo).ToList();
                if (stocks.Count() > 0)
                {

                    int i = 1;
                    List<ERPRepBody> body = new List<ERPRepBody>();
                    ERPVendors ERPvendor = new ERPVendors();
                    foreach (var stock in stocks)
                    {
                        // get ERP vendor id.
                        if (stock.VendorId != null)
                        {
                            var vendor = _context.BMEDVendors.Find(stock.VendorId);
                            ERPvendor = await new ERPVendors().GetERPVendorAsync(vendor.UniteNo);
                        }
                        // get ticket date.
                        if (stock.AccountDate.HasValue)
                        {
                            if (ticketDate == null)
                            {
                                ticketDate = stock.AccountDate.Value.Date;
                            }
                            else if (stock.AccountDate.Value < ticketDate)
                            {
                                ticketDate = stock.AccountDate.Value.Date;
                            }
                        }
                        // 
                        var isPay = "F";
                        if (stock.IsPetty == "Y")
                        {
                            isPay = "T";
                        }
                        body.Add(new ERPRepBody
                        {
                            ITM = i,
                            PRD_NO = stock.PartNo,
                            PRD_NAME = stock.PartName,
                            QTY = Convert.ToDecimal(stock.Qty),
                            UP = Convert.ToDecimal(stock.Price),
                            AMT = Convert.ToDecimal(stock.TotalCost),
                            INV_CUS_NO = stock.VendorId == null || stock.StockType == "0" ? null : ERPvendor.CUS_NO,
                            ISPAY = isPay,
                            TAX_ID = stock.TaxClass
                        });
                        i++;
                    }
                    //
                    if (ticketDate != null)
                    {
                        hd.PS_DD = ticketDate.Value;
                    }
                    //
                    string mf = JsonConvert.SerializeObject(hd);
                    string bf = JsonConvert.SerializeObject(body);
                    var response = await ERPWebServices.PostRepStuffAsync(mf, bf);
                    JObject objs = JObject.Parse(response.Body.PostRepStuffResult);
                    string rtnCode = objs["RtnCode"].ToString();
                    if (rtnCode == "1")
                    {
                        msg = objs["RtnMsg"].ToString();
                        //回傳銷貨單號,回寫至請修單主檔
                        if (keep != null)
                        {
                            keep.SalesDocId = msg;
                            _context.Entry(keep).State = EntityState.Modified;
                            _context.SaveChanges();
                        }
                        msg = "成功";
                    }
                    else
                    {
                        var rtnMsg = objs["RtnMsg"].ToString().Replace(Environment.NewLine, "");
                        msg = "寫入ERP失敗!" + Environment.NewLine + "請將錯誤訊息【" + rtnMsg + "】告知ERP管理人員協助處理。";
                    }
                    return msg;
                }
                msg = "無費用明細,寫入ERP失敗!";
                return msg;
            }
            else
            {
                msg = "無費用明細,寫入ERP失敗!";
                return msg;
            }
        }