public OrderHistoryFileReturn ParseMainframeFile(TextReader reader)
        {
            OrderHistoryFileReturn retVal = new OrderHistoryFileReturn();

            OrderHistoryFile currentFile = null;

            while (reader.Peek() != -1)
            {
                string line = reader.ReadLine();

                switch (line.Substring(RECORDTYPE_STARTPOS, RECORDTYPE_LENGTH))
                {
                case "H":
                    SetErrorStatusAndFutureItemsOnFile(currentFile);

                    currentFile = CreateOrderHistoryFileFromHeaderLine(line);
                    retVal.Files.Add(currentFile);
                    break;

                case "D":
                    var orderDetail = new OrderHistoryDetail();
                    orderDetail.Parse(line);
                    currentFile.Details.Add(orderDetail);
                    break;

                default:
                    break;
                }
            } // end of while

            SetErrorStatusAndFutureItemsOnFile(currentFile);

            return(retVal);
        }
        private EF.OrderHistoryDetail MergeWithCurrentOrderDetail
            (bool isSpecialOrder, EF.OrderHistoryHeader header, OrderHistoryDetail currentDetail, EF.OrderHistoryDetail detail)
        {
            currentDetail.MergeWithEntityFrameworkModel(ref detail);

            detail.BranchId      = header.BranchId;
            detail.InvoiceNumber = header.InvoiceNumber;
            if (isSpecialOrder)
            {
                detail.ItemStatus = KeithLink.Svc.Core.Constants.SPECIALORDERITEM_REQ_STATUS_TRANSLATED_CODE;
            }

            return(detail);
        }
Exemple #3
0
        public async Task <ActionResult <List <OrderHistoryModel> > > GetWXUserOrder(string id)
        {
            var wXUserOrder = await _context.WXUserOrder.Where(b => b.WXUserID == id).OrderByDescending(b => b.CreateTime).ToListAsync();

            if (wXUserOrder == null)
            {
                return(NotFound());
            }
            List <OrderHistoryModel> orderHistories = new List <OrderHistoryModel>();

            System.Diagnostics.Debug.WriteLine("正在查询订单:");
            foreach (var item in wXUserOrder)
            {
                var OrderDetails = await _context.WXUserOrderDetail.Where(b => b.WXUserOrderID == item.WXPayNumber).ToListAsync();

                List <OrderHistoryDetail> orderHistoryDetails = new List <OrderHistoryDetail>();
                foreach (var item_2 in OrderDetails)
                {
                    var single_product        = _context.CommodityManage.Single(b => b.ProductID == item_2.WXProductID);
                    OrderHistoryDetail detail = new OrderHistoryDetail {
                        ProductName   = single_product.ProductName,
                        ImgLink       = single_product.ProductImage,
                        Price         = single_product.ProductPrice,
                        ProductNumber = item_2.WXProductNumber
                    };
                    orderHistoryDetails.Add(detail);
                }
                OrderHistoryModel orderHistory = new OrderHistoryModel
                {
                    DeviceName  = "西南大学零售柜",
                    OrderDate   = item.CreateTime.ToString("F"),
                    OrderDetail = JsonConvert.SerializeObject(orderHistoryDetails),
                    TotalPrice  = (float)item.TotalPrice
                };
                System.Diagnostics.Debug.WriteLine("正在查询订单详情:");
                orderHistories.Add(orderHistory);
            }
            //wXUserOrder.WXPayNumber
            //List<WXUserOrderDetail> OrderDetails = new List<WXUserOrderDetail>();
            //var OrderDetails = await _context.WXUserOrderDetail.Where(b => b.WXUserOrderID == wXUserOrder.WXPayNumber).ToListAsync();
            //orderHistory.Add();
            return(orderHistories);
        }
        private static OrderHistoryDetail ToOrderHistoryDetail(CS.LineItem lineItem, string branchId, string invoiceNumber)
        {
            OrderHistoryDetail detail = new OrderHistoryDetail();

            detail.LineNumber      = Convert.ToInt16(lineItem.Properties["LinePosition"]);
            detail.ItemNumber      = lineItem.ProductId;
            detail.OrderQuantity   = (short)lineItem.Quantity;
            detail.ShippedQuantity = lineItem.Properties["QuantityShipped"] == null ? 0 : (int)lineItem.Properties["QuantityShipped"];
            detail.UnitOfMeasure   = (bool)lineItem.Properties["Each"] ? UnitOfMeasure.Package : UnitOfMeasure.Case;
            detail.CatchWeight     = (bool)lineItem.Properties["CatchWeight"];
            //detail.ItemDeleted =
            detail.UnitCost  = lineItem.ListPrice ?? 0;
            detail.SellPrice = (double)lineItem.PlacedPrice;
            detail.SubbedOriginalItemNumber = lineItem.Properties["SubstitutedItemNumber"] == null ? null : (string)lineItem.Properties["SubstitutedItemNumber"];
            //detail.ReplacedOriginalItemNumber =
            detail.ItemStatus = lineItem.Properties["MainFrameStatus"] == null ? null : (string)lineItem.Properties["MainFrameStatus"];

            return(detail);
        }
        public static OrderHistoryFile ToOrderHistoryFile(this ConfirmationFile confirmation)
        {
            OrderHistoryFile history = new OrderHistoryFile();

            foreach (ConfirmationDetail confDetail in confirmation.Detail)
            {
                OrderHistoryDetail detail = new OrderHistoryDetail()
                {
                    LineNumber         = int.Parse(confDetail.RecordNumber),
                    ItemNumber         = confDetail.ItemNumber,
                    OrderQuantity      = confDetail.QuantityOrdered,
                    UnitOfMeasure      = confDetail.BrokenCase.Equals("Y", StringComparison.InvariantCultureIgnoreCase) ? UnitOfMeasure.Package : UnitOfMeasure.Case,
                    ShippedQuantity    = confDetail.QuantityShipped,
                    TotalShippedWeight = confDetail.ShipWeight,
                    SellPrice          = (confDetail.BrokenCase.Equals("Y", StringComparison.InvariantCultureIgnoreCase) ? confDetail.SplitPriceNet : confDetail.PriceNet),
                    ItemStatus         = confDetail.ReasonNotShipped
                                         //CatchWeight,
                                         //FutureItem,
                                         //ItemDeleted,
                                         //ReplacedOriginalItemNumber,
                                         //SubbedOriginalItemNumber,
                };

                history.Details.Add(detail);
            }

            history.Header.BranchId       = confirmation.Header.Branch;
            history.Header.ControlNumber  = confirmation.Header.ConfirmationNumber;
            history.Header.CustomerNumber = confirmation.Header.CustomerNumber;
            history.Header.InvoiceNumber  = confirmation.Header.InvoiceNumber;
            history.Header.DeliveryDate   = confirmation.Header.ShipDate;
            //history.Header.ControlNumber = confirmation.Header.RemoteOrderNumber;
            //history.Header.RouteNumber = confirmation.Header.RouteNumber;
            //history.Header.StopNumber = confirmation.Header.StopNumber;
            history.Header.OrderStatus = confirmation.Header.ConfirmationStatus;
            history.Header.OrderStatus = string.Empty;
            history.Header.OrderSystem = OrderSource.Entree;
            //history.Header.PONumber
            //history.Header.FutureItems
            //history.Header.ErrorStatus

            return(history);
        }
        /// <summary>
        /// Parse an array of strings as a file
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private OrderHistoryFileReturn ParseFile(string[] data)
        {
            OrderHistoryFileReturn retVal = new OrderHistoryFileReturn();

            OrderHistoryFile currentFile = null;

            for (int i = 0; i < data.Length; i++)
            {
                string line = data[i];

                if (line.Contains("END###"))
                {
                    break;
                }

                switch (line.Substring(RECORDTYPE_STARTPOS, RECORDTYPE_LENGTH))
                {
                case "H":
                    SetErrorStatusAndFutureItemsOnFile(currentFile);

                    currentFile = ParseNewOrderHistoryFileFromHeaderLine(line);
                    retVal.Files.Add(currentFile);
                    break;

                case "D":
                    var orderDetail = new OrderHistoryDetail();
                    orderDetail.Parse(line);
                    currentFile.Details.Add(orderDetail);
                    break;

                default:
                    break;
                }
            } // end of for loop

            SetErrorStatusAndFutureItemsOnFile(currentFile);

            return(retVal);
        }
        public static OrderHistoryDetail ToOrderHistoryDetail(this EF.OrderHistoryDetail value)
        {
            OrderHistoryDetail retVal = new OrderHistoryDetail();

            retVal.ItemNumber                 = value.ItemNumber;
            retVal.LineNumber                 = value.LineNumber;
            retVal.OrderQuantity              = value.OrderQuantity;
            retVal.ShippedQuantity            = value.ShippedQuantity;
            retVal.UnitOfMeasure              = value.UnitOfMeasure.Equals("C", StringComparison.InvariantCultureIgnoreCase) ? UnitOfMeasure.Case : UnitOfMeasure.Package;
            retVal.CatchWeight                = value.CatchWeight;
            retVal.ItemDeleted                = value.ItemDeleted;
            retVal.SubbedOriginalItemNumber   = value.SubbedOriginalItemNumber;
            retVal.ReplacedOriginalItemNumber = value.ReplacedOriginalItemNumber;
            retVal.ItemStatus                 = value.ItemStatus;
            retVal.TotalShippedWeight         = (double)value.TotalShippedWeight;
            retVal.SellPrice              = (double)value.SellPrice;
            retVal.Source                 = value.Source;
            retVal.ManufacturerId         = value.ManufacturerId;
            retVal.SpecialOrderHeaderId   = value.SpecialOrderHeaderId;
            retVal.SpecialOrderLineNumber = value.SpecialOrderLineNumber;

            return(retVal);
        }
        public static EF.OrderHistoryDetail ToEntityFrameworkModel(this OrderHistoryDetail value)
        {
            EF.OrderHistoryDetail retVal = new EF.OrderHistoryDetail();

            retVal.ItemNumber                 = value.ItemNumber;
            retVal.LineNumber                 = value.LineNumber;
            retVal.OrderQuantity              = value.OrderQuantity;
            retVal.ShippedQuantity            = value.ShippedQuantity;
            retVal.UnitOfMeasure              = value.UnitOfMeasure.ToShortString();
            retVal.CatchWeight                = value.CatchWeight;
            retVal.ItemDeleted                = value.ItemDeleted;
            retVal.SubbedOriginalItemNumber   = value.SubbedOriginalItemNumber;
            retVal.ReplacedOriginalItemNumber = value.ReplacedOriginalItemNumber;
            retVal.ItemStatus                 = value.ItemStatus;
            retVal.TotalShippedWeight         = (decimal)value.TotalShippedWeight;
            retVal.SellPrice              = (decimal)value.SellPrice;
            retVal.Source                 = value.Source;
            retVal.ManufacturerId         = value.ManufacturerId;
            retVal.SpecialOrderHeaderId   = value.SpecialOrderHeaderId;
            retVal.SpecialOrderLineNumber = value.SpecialOrderLineNumber;

            return(retVal);
        }
        public static void MergeWithEntityFrameworkModel(this OrderHistoryDetail value, ref EF.OrderHistoryDetail entity)
        {
            entity.ItemNumber      = value.ItemNumber;
            entity.LineNumber      = value.LineNumber;
            entity.OrderQuantity   = value.OrderQuantity;
            entity.ShippedQuantity = (value.ItemStatus != null && value.ItemStatus.Equals(Constants.CONFIRMATION_DETAIL_ITEM_STATUS_DELETE)) ? 0 : value.ShippedQuantity;
            entity.UnitOfMeasure   = value.UnitOfMeasure.ToShortString();
            entity.CatchWeight     = value.CatchWeight;
            entity.ItemDeleted     = value.ItemDeleted;

            // The field in the table is defined as char(6) and will be padded with spaces.
            // We will avoid extraneous updates by EF if we prevent changing the value when they are equivalent.
            bool equivalentValues =
                entity.SubbedOriginalItemNumber != null &&
                value.SubbedOriginalItemNumber != null &&
                entity.SubbedOriginalItemNumber.TrimEnd() == value.SubbedOriginalItemNumber.TrimEnd();

            if (equivalentValues == false)
            {
                entity.SubbedOriginalItemNumber = value.SubbedOriginalItemNumber;
            }

            // The field in the table is defined as char(6) and will be padded with spaces.
            // We will avoid extraneous updates by EF if we prevent changing the value when they are equivalent.
            equivalentValues =
                entity.ReplacedOriginalItemNumber != null &&
                value.ReplacedOriginalItemNumber != null &&
                entity.ReplacedOriginalItemNumber.TrimEnd() == value.ReplacedOriginalItemNumber.TrimEnd();
            if (equivalentValues == false)
            {
                entity.ReplacedOriginalItemNumber = value.ReplacedOriginalItemNumber;
            }

            entity.ItemStatus         = value.ItemStatus;
            entity.TotalShippedWeight = decimal.Parse(value.TotalShippedWeight.ToString());
            entity.SellPrice          = (decimal)value.SellPrice;
        }
Exemple #10
0
        /// <summary>
        /// See technique used in GetMPN()
        /// </summary>
        /// <param name="html"></param>
        /// <returns></returns>
        public static List <OrderHistoryDetail> GetTransactionsFromPage(string html)
        {
            string dateSold     = null;
            var    transactions = new List <OrderHistoryDetail>();

            try
            {
                // https://stackoverflow.com/questions/4182594/grab-all-text-from-html-with-html-agility-pack
                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(html);

                int element = 0;
                foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//text()"))
                {
                    if (node.InnerText == "Purchase History Section")   // string match "Purchase History Section"
                    {
                        string price = null;
                        int    qty   = 0;

                        var secondTable = node.SelectSingleNode("//table[2]");                                 // move to 2nd table

                        foreach (HtmlNode nodet in secondTable.SelectNodes("//td[@class='contentValueFont']")) // collect table elements matching class
                        {
                            string value = nodet.InnerText;
                            switch (element)
                            {
                            case 0:
                                price = ParsePrice(value);
                                ++element;
                                break;

                            case 1:
                                qty = Convert.ToInt32(value);
                                ++element;
                                break;

                            case 2:
                                dateSold = value;
                                var tran = new OrderHistoryDetail();
                                tran.Price          = Convert.ToDecimal(price);
                                tran.Qty            = qty;
                                tran.DateOfPurchase = GetUTCFromEbayDateStr(dateSold);
                                transactions.Add(tran);
                                element = 0;
                                break;
                            }
                        }
                        var variations    = new List <string>();
                        var variationNode = secondTable.SelectNodes("//td[@class='variationContentValueFont']");
                        if (variationNode != null)
                        {
                            AddVariations(variationNode, transactions);
                        }
                    }
                }
                return(transactions);
            }
            catch (Exception exc)
            {
                string msg = dsutil.DSUtil.ErrMsg("GetTransactionsFromPage", exc);
                dsutil.DSUtil.WriteFile(_logfile, msg, "");
                return(null);
            }
        }
        public static void Parse(this OrderHistoryDetail value, string record)
        {
            if (record.Length >= DETAIL_STARTPOS_ITEMNUM + DETAIL_LENGTH_ITEMNUM)
            {
                value.ItemNumber = record.Substring(DETAIL_STARTPOS_ITEMNUM, DETAIL_LENGTH_ITEMNUM);
            }

            if (record.Length >= DETAIL_STARTPOS_LINNUM + DETAIL_LENGTH_LINNUM)
            {
                int lineNumber;
                int.TryParse(record.Substring(DETAIL_STARTPOS_LINNUM, DETAIL_LENGTH_LINNUM), out lineNumber);
                value.LineNumber = lineNumber;
            }

            if (record.Length >= DETAIL_STARTPOS_ORDQTY + DETAIL_LENGTH_ORDQTY)
            {
                int ordQty;
                int.TryParse(record.Substring(DETAIL_STARTPOS_ORDQTY, DETAIL_LENGTH_ORDQTY), out ordQty);
                value.OrderQuantity = ordQty;
            }

            if (record.Length >= DETAIL_STARTPOS_SHIPQTY + DETAIL_LENGTH_SHIPQTY)
            {
                int shippedQty;
                int.TryParse(record.Substring(DETAIL_STARTPOS_SHIPQTY, DETAIL_LENGTH_SHIPQTY), out shippedQty);
                value.ShippedQuantity = shippedQty;
            }

            if (record.Length >= DETAIL_STARTPOS_UOM + DETAIL_LENGTH_UOM)
            {
                value.UnitOfMeasure = (record.Substring(DETAIL_STARTPOS_UOM, DETAIL_LENGTH_UOM) == "P" ? UnitOfMeasure.Package : UnitOfMeasure.Case);
            }

            if (record.Length >= DETAIL_STARTPOS_SELLPRICE + DETAIL_LENGTH_SELLPRICE)
            {
                double sellPrice;
                double.TryParse(record.Substring(DETAIL_STARTPOS_SELLPRICE, DETAIL_LENGTH_SELLPRICE), out sellPrice);
                value.SellPrice = sellPrice;
            }

            if (record.Length >= DETAIL_STARTPOS_CWT + DETAIL_LENGTH_CWT)
            {
                value.CatchWeight = (record.Substring(DETAIL_STARTPOS_CWT, DETAIL_LENGTH_CWT) == "Y");
            }
            if (record.Length >= DETAIL_STARTPOS_ITEMDEL + DETAIL_LENGTH_ITEMDEL)
            {
                value.ItemDeleted = (record.Substring(DETAIL_STARTPOS_ITEMDEL, DETAIL_LENGTH_ITEMDEL) == "Y");
            }
            if (record.Length >= DETAIL_STARTPOS_SUBORG + DETAIL_LENGTH_SUBORG)
            {
                value.SubbedOriginalItemNumber = record.Substring(DETAIL_STARTPOS_SUBORG, DETAIL_LENGTH_SUBORG).Trim();
            }
            if (record.Length >= DETAIL_STARTPOS_REPLORG + DETAIL_LENGTH_REPLORG)
            {
                value.ReplacedOriginalItemNumber = record.Substring(DETAIL_STARTPOS_REPLORG, DETAIL_LENGTH_REPLORG).Trim();
            }
            if (record.Length >= DETAIL_STARTPOS_ITEMSTS + DETAIL_LENGTH_ITEMSTS)
            {
                value.ItemStatus = record.Substring(DETAIL_STARTPOS_ITEMSTS, DETAIL_LENGTH_ITEMSTS);
            }
            if (record.Length >= DETAIL_STARTPOS_FUTURE + DETAIL_LENGTH_FUTURE)
            {
                value.FutureItem = (record.Substring(DETAIL_STARTPOS_FUTURE, DETAIL_LENGTH_FUTURE) == "Y");
            }

            if (record.Length >= DETAIL_STARTPOS_WEIGHT + DETAIL_LENGTH_WEIGHT)
            {
                double weight;
                double.TryParse(record.Substring(DETAIL_STARTPOS_WEIGHT, DETAIL_LENGTH_WEIGHT), out weight);
                value.TotalShippedWeight = weight;
            }

            if (record.Length >= DETAIL_STARTPOS_SOURCE + DETAIL_LENGTH_SOURCE)
            {
                value.Source = record.Substring(DETAIL_STARTPOS_SOURCE, DETAIL_LENGTH_SOURCE);
            }
            if (record.Length >= DETAIL_STARTPOS_MFGID + DETAIL_LENGTH_MFGID)
            {
                value.ManufacturerId = record.Substring(DETAIL_STARTPOS_MFGID, DETAIL_LENGTH_MFGID).Trim();
            }
            if (record.Length >= DETAIL_STARTPOS_REQID + DETAIL_LENGTH_REQID)
            {
                value.SpecialOrderHeaderId = record.Substring(DETAIL_STARTPOS_REQID, DETAIL_LENGTH_REQID);
            }
            if (record.Length >= DETAIL_STARTPOS_REQLINNUM + DETAIL_LENGTH_REQLINNUM)
            {
                value.SpecialOrderLineNumber = record.Substring(DETAIL_STARTPOS_REQLINNUM, DETAIL_LENGTH_REQLINNUM);
            }
        }
        protected override void LogAuditTrail(RegularOrder order, string action)
        {
            if (CurrentUser != null)
            {
                action = action.ToUpperInvariant();
                if (_orderHistoryRepository == null)
                {
                    _orderHistoryRepository = new GenericRepository <OrderHistory>(Repository.Context);
                }
                if (_orderHistoryDetailRepository == null)
                {
                    _orderHistoryDetailRepository = new GenericRepository <OrderHistoryDetail>(Repository.Context);
                }

                // Logs audit trail
                OrderHistory orderHistory = new OrderHistory();
                orderHistory.id        = IDGenerator.NewId <OrderHistory>(true);
                orderHistory.order_id  = order.id;
                orderHistory.action    = action;
                orderHistory.date_time = DateTime.Now;
                orderHistory.user_id   = SystemParam.CurrentUser.id;
                _orderHistoryRepository.Insert(orderHistory);

                switch (order.EntityState)
                {
                case EntityState.Added:
                {
                    foreach (var property in order.GetType().GetProperties())
                    {
                        OrderHistoryDetail orderHistoryDetail = new OrderHistoryDetail();
                        orderHistoryDetail.id            = Guid.NewGuid().ToString();
                        orderHistoryDetail.parent_id     = orderHistory.id;
                        orderHistoryDetail.property_name = property.Name;
                        orderHistoryDetail.old_value     = string.Empty;
                        orderHistoryDetail.new_value     = property.GetValue(order, null) != null?property.GetValue(order, null).ToString() : null;

                        _orderHistoryDetailRepository.Insert(orderHistoryDetail);
                    }
                }
                break;

                case EntityState.Modified:
                {
                    var stateEntry = Repository.Context.ObjectStateManager.GetObjectStateEntry(order);
                    foreach (var propertyName in stateEntry.GetModifiedProperties())
                    {
                        OrderHistoryDetail orderHistoryDetail = new OrderHistoryDetail();
                        orderHistoryDetail.id            = Guid.NewGuid().ToString();
                        orderHistoryDetail.parent_id     = orderHistory.id;
                        orderHistoryDetail.property_name = propertyName;
                        orderHistoryDetail.old_value     = stateEntry.OriginalValues[propertyName] != null ? stateEntry.OriginalValues[propertyName].ToString() : null;
                        orderHistoryDetail.new_value     = stateEntry.CurrentValues[propertyName] != null ? stateEntry.CurrentValues[propertyName].ToString() : null;
                        _orderHistoryDetailRepository.Insert(orderHistoryDetail);
                    }
                }
                break;

                default: break;
                }
            }
        }
        private EF.OrderHistoryDetail AddNewDetailToOrder(bool isSpecialOrder, EF.OrderHistoryHeader header, OrderHistoryDetail currentDetail)
        {
            EF.OrderHistoryDetail tempDetail = currentDetail.ToEntityFrameworkModel();
            tempDetail.BranchId           = header.BranchId;
            tempDetail.InvoiceNumber      = header.InvoiceNumber;
            tempDetail.OrderHistoryHeader = header;

            if (isSpecialOrder)
            {
                tempDetail.ItemStatus = KeithLink.Svc.Core.Constants.SPECIALORDERITEM_REQ_STATUS_TRANSLATED_CODE;
            }

            header.OrderDetails.Add(tempDetail);
            return(tempDetail);
        }
        private EF.OrderHistoryDetail SeekMatchingDetail(EF.OrderHistoryHeader header, OrderHistoryDetail currentDetail)
        {
            EF.OrderHistoryDetail detail = null;

            if (header.OrderDetails != null && header.OrderDetails.Count > 0)
            {
                detail = header.OrderDetails.Where(d => (d.LineNumber == currentDetail.LineNumber)).FirstOrDefault();
            }

            return(detail);
        }
        private void DetermineDetailOnOrder(bool isSpecialOrder, EF.OrderHistoryHeader header, OrderHistoryDetail currentDetail)
        {
            EF.OrderHistoryDetail detail = SeekMatchingDetail(header, currentDetail);

            if (detail == null)
            {
                detail = AddNewDetailToOrder(isSpecialOrder, header, currentDetail);
            }
            else
            {
                detail = MergeWithCurrentOrderDetail(isSpecialOrder, header, currentDetail, detail);
            }

            if (Configuration.DiagnosticsAuditOrderHistoryDetailChanges)
            {
                ChangeAuditor.AuditChanges(_unitOfWork.Context, detail, _log);
            }
        }