/// <summary> /// Add Boxes to the stock. /// if the box exist will only update the Count /// if the box doesn't exist will create a new record /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="count"></param> /// <param name="timeLastPurchase"></param> void AddToStock(double x, double y, int count, DateTime?timeLastPurchase = null, bool saveToDB = true, int?id = null) { bool newBox = false; //Get the mainTreeData for the search term from the main tree var mainTreeSearchTerm = new BottomSizeTreeDataModel(x); _mainTree.FindAndUpdate(mainTreeSearchTerm, out BottomSizeTreeDataModel mainTreeData); //Get the innerTreeData for the searchTerm in the inner tree var innerTreeSearchTerm = new HeightSizeTreeDataModel(y); if (mainTreeData.InnerTree is null) { mainTreeData.InnerTree = new BinarySearchTree <HeightSizeTreeDataModel>(); } //if the inner TreeData is new if (mainTreeData.InnerTree.FindAndUpdate(innerTreeSearchTerm, out HeightSizeTreeDataModel innerTreeData) == false) { //if there isn't time data, than will get the current date and time if (timeLastPurchase.HasValue == false) { innerTreeData.DateNode = _dataByTime.Add(new TimeListDataModel() { X = x, Y = y, TimeLastPurchase = DateTime.Now }); } //if there is a time last purchase it means this should be added to a diffrent position. //will never be null here else { innerTreeData.DateNode = _dataByTime.InsertByValue(new TimeListDataModel { X = x, Y = y, TimeLastPurchase = timeLastPurchase.Value }); } newBox = true; } //if the inner tree data is old else { //update the data innerTreeData.DateNode.Data.TimeLastPurchase = DateTime.Now; //Shift the node to the end of the list _dataByTime.ShiftNodeToEnd(innerTreeData.DateNode); } //Set the Properties innerTreeData.Count += count; //if there is no value than id will be 0 by default(int) if (id.HasValue) { innerTreeData.Id = id.Value; } //the box of this size var box = new Box { Id = innerTreeData.Id, X = mainTreeData.X, Y = innerTreeData.Y, Count = innerTreeData.Count, TimeLastPurchase = innerTreeData.DateNode.Data.TimeLastPurchase }; //Add Data To DB if (saveToDB) { _logger.Log(new LogData("Updated Stock", true)); //save the id innerTreeData.Id = SaveToDB(box, newBox).Id; } }