コード例 #1
0
        private void btnAllocate_Click(object sender, EventArgs e)
        {
            List <Models.OrderItem> openOrderItems = dbContext.OrderItems.Where(o => o.IsComplete == false)
                                                     .Where(o => o.Part.ID == part.ID).ToList();

            int.TryParse(textEditQty.Text, out int qtyToAllocate);
            int qtyAllocatedRunningTotal = 0;

            Models.OperationPerformed opPerformed = new Models.OperationPerformed();
            opPerformed.qtyDone       = qtyToAllocate;
            opPerformed.timePerformed = DateTime.Now;
            opPerformed.usr           = currentUser;
            opPerformed.Notes         = textEditNotes.Text;
            opPerformed.OrderItemOperationPerformeds = new List <Models.OrderItemOperationPerformed>();

            foreach (Models.OrderItem orderItem in openOrderItems.ToList())
            {
                if (orderItem.QtyRequired <= qtyToAllocate - qtyAllocatedRunningTotal)
                {
                    orderItem.QtyNested       = orderItem.QtyRequired;
                    qtyAllocatedRunningTotal += orderItem.QtyRequired;

                    Models.OrderItemOperationPerformed orderItemOpPerformed = new Models.OrderItemOperationPerformed();
                    orderItemOpPerformed.qtyDone            = orderItem.QtyRequired;
                    orderItemOpPerformed.orderItemOperation = orderItemOperation;
                    orderItemOpPerformed.operationPerformed = opPerformed;
                    dbContext.OrderItemOperationPerformeds.Add(orderItemOpPerformed);

                    opPerformed.OrderItemOperationPerformeds.Add(orderItemOpPerformed);
                }
            }

            dbContext.OperationPerformeds.Add(opPerformed);

            dbContext.SaveChanges();
        }
コード例 #2
0
ファイル: OperationManager.cs プロジェクト: lornemartin/Radan
        /// <summary>
        /// record an operation completed
        /// </summary>
        /// <param name="qty"></param>
        /// <returns></returns>
        public void RecordOperationCompleted(int qty)
        {
            Models.OrderItemOperation orderItemOp = Globals.dbContext.OrderItemOperations.Where(o => o.ID == OrderItemOp.ID).FirstOrDefault();

            int qtyDone = qty;

            Models.OrderItemOperationPerformed itemOpPerformed = new Models.OrderItemOperationPerformed();

            Models.OperationPerformed opPerformed = new Models.OperationPerformed();
            opPerformed.qtyDone       = qtyDone;
            opPerformed.timePerformed = DateTime.Now;
            opPerformed.usr           = currentUser;
            opPerformed.OrderItemOperationsPerformed = new List <Models.OrderItemOperationPerformed>();

            int totalQtyLeftToDo = qtyDone;

            // assign operations to order items
            foreach (Models.OrderItemOperation associatedOrderItemOp in associatedOrderItemOps)
            {
                if (associatedOrderItemOp.qtyDone < associatedOrderItemOp.qtyRequired)
                {
                    int itemQtyLeftToDo = associatedOrderItemOp.qtyRequired - associatedOrderItemOp.qtyDone;
                    Models.OrderItemOperationPerformed orderItemOpPerformed = new Models.OrderItemOperationPerformed();
                    if (totalQtyLeftToDo <= itemQtyLeftToDo)
                    {
                        orderItemOpPerformed           = new Models.OrderItemOperationPerformed();
                        orderItemOpPerformed.qtyDone   = totalQtyLeftToDo;
                        associatedOrderItemOp.qtyDone += totalQtyLeftToDo;
                        associatedOrderItemOp.OrderItemOperationPerformeds.Add(orderItemOpPerformed);
                        opPerformed.OrderItemOperationsPerformed.Add(orderItemOpPerformed);
                        totalQtyLeftToDo -= totalQtyLeftToDo;
                        break;
                    }
                    else
                    {
                        orderItemOpPerformed          = new Models.OrderItemOperationPerformed();
                        orderItemOpPerformed.qtyDone  = itemQtyLeftToDo;
                        associatedOrderItemOp.qtyDone = associatedOrderItemOp.qtyRequired;
                        associatedOrderItemOp.OrderItemOperationPerformeds.Add(orderItemOpPerformed);
                        opPerformed.OrderItemOperationsPerformed.Add(orderItemOpPerformed);
                        totalQtyLeftToDo -= itemQtyLeftToDo;
                    }
                }
            }

            // if we've filled all the order items, we need to do something with the rest...
            if (totalQtyLeftToDo > 0)
            {
                Models.Operation overBatchOperation = new Models.Operation();
                overBatchOperation.Location = orderItemOp.operation.Location;
                overBatchOperation.Name     = orderItemOp.operation.Name;
                overBatchOperation.Part     = orderItemOp.operation.Part;
                Globals.dbContext.Operations.Add(overBatchOperation);

                Models.OrderItemOperation overBatchItemOperation = new Models.OrderItemOperation();
                overBatchItemOperation.operation   = overBatchOperation;
                overBatchItemOperation.orderItem   = null;
                overBatchItemOperation.qtyDone     = totalQtyLeftToDo;
                overBatchItemOperation.qtyRequired = 0;
                Globals.dbContext.OrderItemOperations.Add(overBatchItemOperation);

                Models.OrderItemOperationPerformed overBatchItemOperatonPerformed = new Models.OrderItemOperationPerformed();
                overBatchItemOperatonPerformed.orderItemOperation = overBatchItemOperation;
                overBatchItemOperatonPerformed.qtyDone            = totalQtyLeftToDo;
                overBatchItemOperatonPerformed.opPerformed        = opPerformed;
                Globals.dbContext.OrderItemOperationPerformeds.Add(overBatchItemOperatonPerformed);

                opPerformed.OrderItemOperationsPerformed.Add(overBatchItemOperatonPerformed);
                overBatchOperation.OrderItemOperations.Add(overBatchItemOperation);
            }

            Globals.dbContext.OperationPerformeds.Add(opPerformed);
            Globals.dbContext.SaveChanges();
        }
コード例 #3
0
ファイル: OperationManager.cs プロジェクト: lornemartin/Radan
        /// <summary>
        /// If we have both orderItemOperations that are not completed, and orderItemOperations that were previously overproduced,
        /// this function will attempt to fill all the unfinished items with the over produced items
        /// </summary>
        public void AssignUnfinishedOperations()
        {
            // First fill all unFinishedOps with overOps
            foreach (Models.OrderItemOperation unFinishedOp in unFinishedOrderItemOps.ToList())
            {
                foreach (Models.OrderItemOperation overOp in overBatchOrderItemOps.ToList())
                {
                    int unFinishedOpQtyToFill = unFinishedOp.qtyRequired - unFinishedOp.qtyDone;
                    int overOpQtyRemaining    = overOp.qtyDone;

                    if (unFinishedOpQtyToFill >= overOp.qtyDone)
                    {
                        // this is the simplest, we just adjust the unFinishedOp, and remove the overOp
                        unFinishedOp.qtyDone += overOp.qtyDone;
                        unFinishedOp.OrderItemOperationPerformeds.Add(overOp.OrderItemOperationPerformeds.FirstOrDefault());

                        Globals.dbContext.OrderItemOperations.Remove(overOp);
                        // move on to next overOp
                    }
                    else             // overOp qty is more than will fit into unFinishedOp
                    {
                        unFinishedOp.qtyDone = unFinishedOp.qtyRequired;
                        overOp.qtyDone       = unFinishedOpQtyToFill;

                        // create a new
                        Models.OrderItemOperationPerformed newOrderItemOpPerformed = new Models.OrderItemOperationPerformed();
                    }
                }
            }

            // then fill any remaining overOps with unFinishedOps

            // .....refresh overOps.....

            foreach (Models.OrderItemOperation overOp in overBatchOrderItemOps.ToList())
            {
                unFinishedOrderItemOps = Globals.dbContext.OrderItemOperations.Where(o => o.orderItem.PartID == OrderItemOp.orderItem.PartID)
                                         .Where(o => o.operationID == OrderItemOp.operationID)
                                         .Where(o => o.qtyDone < o.qtyRequired).ToList();

                // I have not tested this yet with multiple unFinishedOps, more code will be needed
                foreach (Models.OrderItemOperation unFinishedOp in unFinishedOrderItemOps.ToList())
                {
                    if ((unFinishedOp.qtyRequired - unFinishedOp.qtyDone) >= (overOp.qtyDone)) // if overOp 'fits inside' unFinishedOp
                    {
                        // create a new OrderItemOperationPerformed
                        Models.OrderItemOperationPerformed newItemOpPerformed = new Models.OrderItemOperationPerformed();
                        newItemOpPerformed.qtyDone            = overOp.qtyDone;
                        newItemOpPerformed.opPerformed        = opsPerformed.LastOrDefault();
                        newItemOpPerformed.orderItemOperation = unFinishedOp;
                        //newItemOpPerformed.orderItemOperation.OrderItemOperationPerformeds.Add(unFinishedOp.OrderItemOperationPerformeds.FirstOrDefault());
                        unFinishedOp.OrderItemOperationPerformeds.Add(newItemOpPerformed);
                        Globals.dbContext.OrderItemOperationPerformeds.Add(newItemOpPerformed);

                        // remove the orderItemOpPerformed associated with this overOp
                        overOp.OrderItemOperationPerformeds.ToList().Remove(overOp.OrderItemOperationPerformeds.FirstOrDefault());

                        // modify unFinished op with new quantities
                        unFinishedOp.qtyDone += overOp.qtyDone;

                        // remove overOp
                        Globals.dbContext.OrderItemOperations.Remove(overOp);
                    }
                    else        // overOp.QtyDone is greater than unFinishedOp.QtyRequired - QtyDone
                    {
                        // create a new OrderItemOperationPerformed
                        Models.OrderItemOperationPerformed newItemOpPerformed = new Models.OrderItemOperationPerformed();
                        newItemOpPerformed.qtyDone     = overOp.qtyDone;
                        newItemOpPerformed.opPerformed = opsPerformed.LastOrDefault();
                        unFinishedOp.OrderItemOperationPerformeds.Add(newItemOpPerformed);
                        Globals.dbContext.OrderItemOperationPerformeds.Add(newItemOpPerformed);

                        // modify unFinished op with new quantities
                        unFinishedOp.qtyDone = unFinishedOp.qtyRequired;

                        // modify overOp with new quantities
                        overOp.qtyDone -= unFinishedOp.qtyRequired;
                    }
                }
            }
            Globals.dbContext.SaveChanges();
        }