Пример #1
0
 public override void When(MovementCommands.DocumentAction c)
 {
     if (c.Value == DocumentAction.Complete)
     {
         var mov = AssertDocumentStatus(c.DocumentNumber, DocumentStatusIds.Drafted);
         var inventoryItemEntries = CompleteMovementCreateInventoryItemEntries(mov);
         CreateOrUpdateInventoryItems(inventoryItemEntries);
         if (mov.IsInTransit)
         {
             var movConfirm = CreateMovementConfirmation(mov);
             MovementConfirmationApplicationService.When(movConfirm);
         }
         base.When(c);
     }
     else if (c.Value == DocumentAction.Confirm)
     {
         throw new NotSupportedException("Need to confirm MovementConfirmation.");
     }
     else if (c.Value == DocumentAction.Reverse)
     {
         var srcMov          = AssertDocumentStatus(c.DocumentNumber, DocumentStatusIds.Completed);
         var reversalMovInfo = CreateReversalMovementAndCompleteAndClose(c, srcMov);
         ReverseUpdateSourceMovement(c, reversalMovInfo);
         //base.When(c);
     }
     else
     {
         base.When(c);
     }
 }
Пример #2
0
        private void ReverseUpdateSourceMovement(MovementCommands.DocumentAction c, ICreateMovement reversalMovInfo)
        {
            //源单据前向关联到反转单据:
            var reversalDocumentNumber = reversalMovInfo.DocumentNumber;
            var description            = "(" + reversalMovInfo.DocumentNumber + "<-)";//(1000016<-)

            Update(c, ar => ((MovementAggregate)ar).Reverse(reversalDocumentNumber, description, c.Version, c.CommandId, c.RequesterId));
        }
Пример #3
0
        private string TestCreateAndCompleteAndReverseMovement_1()
        {
            var documentNumber = Guid.NewGuid().ToString();

            CreateMovement movement = new CreateMovement();

            movement.DocumentNumber  = documentNumber;
            movement.CommandId       = Guid.NewGuid().ToString();
            movement.WarehouseIdFrom = "1";
            movement.WarehouseIdTo   = "2";
            movement.MovementDate    = DateTime.Now;
            movement.IsInTransit     = false;//movement.IsInTransit = true;

            var line_1 = movement.NewCreateMovementLine();

            line_1.LineNumber             = DateTime.Now.Ticks.ToString();//todo
            line_1.ProductId              = "TEST_" + DateTime.Now.Ticks.ToString();
            line_1.LocatorIdFrom          = "1_TEST_F_" + DateTime.Now.Ticks.ToString();
            line_1.LocatorIdTo            = "2_TEST_T_" + DateTime.Now.Ticks.ToString();
            line_1.AttributeSetInstanceId = "EMPTY";
            line_1.MovementQuantity       = 123;
            movement.MovementLines.Add(line_1);

            movementApplicationService.When(movement);

            var complete = new MovementCommands.DocumentAction();

            complete.Value          = DocumentAction.Complete;
            complete.DocumentNumber = documentNumber;
            complete.Version        = 1;
            complete.CommandId      = Guid.NewGuid().ToString();
            movementApplicationService.When(complete);

            var reverse = new MovementCommands.DocumentAction();

            reverse.Value          = DocumentAction.Reverse;
            reverse.DocumentNumber = documentNumber;
            reverse.Version        = 2;
            reverse.CommandId      = Guid.NewGuid().ToString();
            movementApplicationService.When(reverse);

            return(documentNumber);
        }
Пример #4
0
        private string CreateAndCompleteTestMovement(bool isInTransit)
        {
            var documentNumber = Guid.NewGuid().ToString();

            CreateMovement movement = new CreateMovement();

            movement.DocumentNumber  = documentNumber;
            movement.CommandId       = Guid.NewGuid().ToString();
            movement.WarehouseIdFrom = "1";
            movement.WarehouseIdTo   = "2";
            //movement.DocumentAction = DocumentAction.Draft;// 不能这样写:movement.DocumentStatus = DocumentStatus.Drafted
            //movement.ChargeAmount = new Money(10000, "CNY");
            //movement.FreightAmount = new Money(400, "CNY");
            //movement.MovementTypeId = DocumentTypeIds.Movement;
            movement.MovementDate = DateTime.Now;

            //////////////////
            movement.IsInTransit = isInTransit;
            //////////////////

            var line_1 = movement.NewCreateMovementLine();

            line_1.LineNumber             = DateTime.Now.Ticks.ToString();//todo
            line_1.ProductId              = "TEST_" + DateTime.Now.Ticks.ToString();
            line_1.LocatorIdFrom          = "1_TEST_F_" + DateTime.Now.Ticks.ToString();
            line_1.LocatorIdTo            = "2_TEST_T_" + DateTime.Now.Ticks.ToString();
            line_1.AttributeSetInstanceId = "EMPTY";
            line_1.MovementQuantity       = 123;
            movement.MovementLines.Add(line_1);

            movementApplicationService.When(movement);

            var complete = new MovementCommands.DocumentAction();

            complete.Value          = DocumentAction.Complete;
            complete.DocumentNumber = documentNumber;
            complete.Version        = 1;
            complete.CommandId      = Guid.NewGuid().ToString();
            movementApplicationService.When(complete);
            return(documentNumber);
        }
Пример #5
0
        ///// <summary>
        ///// Confirm all movement line quantities.
        ///// </summary>
        //internal IList<ICreateInventoryItemEntry> ConfirmMovementCreateInventoryItemEntries(IMovementState movement)
        //{
        //    Func<IMovementLineState, decimal> getConfirmedQty = d => d.MovementQuantity;
        //    var invItemEntries = ConfirmMovementCreateInventoryItemEntries(movement, getConfirmedQty);
        //    return invItemEntries;
        //}

        private ICreateMovement CreateReversalMovementAndCompleteAndClose(MovementCommands.DocumentAction c, IMovementState movement)
        {
            var createReversalMovement = CreateReversalMovement(movement);

            When(createReversalMovement);
            When(new MovementCommands.DocumentAction
            {
                Value          = DocumentAction.Complete,
                DocumentNumber = createReversalMovement.DocumentNumber,
                Version        = 1,
                CommandId      = c.CommandId,
                RequesterId    = c.RequesterId,
            });
            When(new MovementCommands.DocumentAction
            {
                Value          = DocumentAction.Close,
                DocumentNumber = createReversalMovement.DocumentNumber,
                Version        = 2,
                CommandId      = c.CommandId,
                RequesterId    = c.RequesterId,
            });

            return(createReversalMovement);
        }
Пример #6
0
 public void When(MovementCommands.DocumentAction c)
 {
     throw new NotImplementedException();//todo
 }
Пример #7
0
 internal void ConfirmUpdateMovement(MovementCommands.DocumentAction c)
 {
     Update(c, ar => ((MovementAggregate)ar).DocumentAction(DocumentAction.Confirm, c.Version, c.CommandId, c.RequesterId));
 }