Example #1
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L5IN_FCR_1048 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();

            var countingRun = CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventoryJob_CountingRun.Query.Search(Connection, Transaction,
                                                                                                    new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventoryJob_CountingRun.Query
            {
                LOG_WRH_INJ_InventoryJob_CountingRunID = Parameter.CountingRunID,
                IsDeleted    = false,
                Tenant_RefID = securityTicket.TenantID
            }).Single();

            // Check if counting run is completed and has no differences in results
            if (!countingRun.IsCounting_Completed && ((countingRun.SequenceNumber == 1 && !countingRun.IsDifferenceFound) || countingRun.SequenceNumber == 2))
            {
                countingRun.IsCounting_Completed = true;
                countingRun.Save(Connection, Transaction);

                //save counting process
                var countingProcess = CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventoryJob_Process.Query.Search(Connection, Transaction,
                                                                                                        new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventoryJob_Process.Query
                {
                    LOG_WRH_INJ_InventoryJob_ProcessID = countingRun.InventoryJob_Process_RefID,
                    IsDeleted    = false,
                    Tenant_RefID = securityTicket.TenantID
                }).SingleOrDefault();

                countingProcess.IsBookedIntoStock = true;

                countingProcess.Save(Connection, Transaction);
                countingRun.Save(Connection, Transaction);
            }

            #region Update Stock
            if (countingRun.SequenceNumber == 1 && countingRun.IsCounting_Completed == true)
            {
                var udParameter = new P_L5IN_UCRD_1140 {
                    CountingRunID = countingRun.LOG_WRH_INJ_InventoryJob_CountingRunID
                };
                var updateDiffResult = cls_Update_CountingRun_Differences.Invoke(Connection, Transaction, udParameter, securityTicket);
            }
            else if (countingRun.SequenceNumber == 2)
            {
                var parameterGetCountingResult = new CL5_APOLogistic_Inventory.Atomic.Retrieval.P_L5IN_GCRfCR_1654
                {
                    CountingRunID = Parameter.CountingRunID,
                };

                var resultsWithDifferences = CL5_APOLogistic_Inventory.Atomic.Retrieval.cls_Get_CountingResults_for_CountingRun.Invoke(Connection, Transaction, parameterGetCountingResult, securityTicket).Result;

                foreach (var result in resultsWithDifferences)
                {
                    bool isTrackingInstance = result.LOG_WRH_INJ_CountingResult_TrackingInstanceID != Guid.Empty;
                    if (isTrackingInstance)
                    {
                        var ti = CL1_LOG.ORM_LOG_ProductTrackingInstance.Query.Search(Connection, Transaction,
                                                                                      new CL1_LOG.ORM_LOG_ProductTrackingInstance.Query
                        {
                            LOG_ProductTrackingInstanceID = result.LOG_ProductTrackingInstanceID,
                            IsDeleted    = false,
                            Tenant_RefID = securityTicket.TenantID
                        }).Single();

                        ti.CurrentQuantityOnTrackingInstance = result.TrackingInstance_CountedAmount;
                        ti.Save(Connection, Transaction);
                    }
                    var shelfContent = CL1_LOG_WRH.ORM_LOG_WRH_Shelf_Content.Query.Search(Connection, Transaction,
                                                                                          new CL1_LOG_WRH.ORM_LOG_WRH_Shelf_Content.Query
                    {
                        LOG_WRH_Shelf_ContentID = result.LOG_WRH_Shelf_ContentID,
                        IsDeleted    = false,
                        Tenant_RefID = securityTicket.TenantID
                    }).Single();

                    shelfContent.Quantity_Current = result.Shelf_CountedAmount;
                    shelfContent.Save(Connection, Transaction);
                }
            }
            #endregion Update Stock

            return(returnValue);

            #endregion UserCode
        }
        protected static FR_Bool Execute(DbConnection Connection, DbTransaction Transaction, P_L5IN_UCRD_1140 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();

            // Get current counting run
            var countingRun = new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventoryJob_CountingRun();
            countingRun.Load(Connection, Transaction, Parameter.CountingRunID);

            // Check is current counting run valid
            if (countingRun == null ||
                countingRun.IsDeleted ||
                countingRun.LOG_WRH_INJ_InventoryJob_CountingRunID == Guid.Empty)
            {
                throw new Exception("Bad parameter CountingRunID.");
            }

            // Get counting result values for current counting run
            var parameterGetCountingResult = new CL5_APOLogistic_Inventory.Atomic.Retrieval.P_L5IN_GCRfCR_1654
            {
                CountingRunID = Parameter.CountingRunID
            };

            var countingResultAndTrackingInstanceValues = CL5_APOLogistic_Inventory.Atomic.Retrieval.cls_Get_CountingResults_for_CountingRun.Invoke(Connection, Transaction, parameterGetCountingResult, securityTicket).Result;

            #region Check Counting Results
            // Check values
            bool updateCountingRuns = false;
            foreach (var item in countingResultAndTrackingInstanceValues)
            {
                // Check Tracking Instance
                if (item.LOG_WRH_INJ_CountingResult_TrackingInstanceID != Guid.Empty)
                {
                    if (item.TrackingInstance_CountedAmount != item.TrackingInstance_CurrentQuantity)
                    {
                        var trackingInstance = new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_CountingResult_TrackingInstance();
                        trackingInstance.Load(Connection, Transaction, item.LOG_WRH_INJ_CountingResult_TrackingInstanceID);
                        trackingInstance.IsDifferenceToExpectedQuantityFound = true;
                        trackingInstance.Save(Connection, Transaction);
                        updateCountingRuns = true;
                    }
                }

                // Check Shelf counting result
                if (item.LOG_WRH_INJ_InventoryJob_CountingResultID != Guid.Empty)
                {
                    if (item.Shelf_CountedAmount != item.Shelf_CurrentQuantity)
                    {
                        var countingResult = new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventryJob_CountingResult();
                        countingResult.Load(Connection, Transaction, item.LOG_WRH_INJ_InventoryJob_CountingResultID);
                        countingResult.IsDifferenceToExpectedQuantityFound = true;
                        countingResult.Save(Connection, Transaction);
                        updateCountingRuns = true;
                    }
                }
            }
            #endregion

            #region Counting Run Manage

            if (updateCountingRuns)
            {
                // Create new counting run
                var nextCountingRun = new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventoryJob_CountingRun();
                nextCountingRun.ExecutingBusinessParticipant_RefID = countingRun.ExecutingBusinessParticipant_RefID;
                nextCountingRun.InventoryJob_Process_RefID         = countingRun.InventoryJob_Process_RefID;
                nextCountingRun.SequenceNumber = 2;
                nextCountingRun.Tenant_RefID   = securityTicket.TenantID;
                nextCountingRun.Save(Connection, Transaction);

                countingRun.IsDifferenceFound = true;
                countingRun.Save(Connection, Transaction);
            }

            countingRun.IsCounting_Completed = true;
            countingRun.Save(Connection, Transaction);

            #endregion

            return(new FR_Bool {
                Result = true
            });

            #endregion UserCode
        }